BitmapTextComponentManager::BitmapTextComponentManager(
        LoaderManager* loaderManager,
        RenderPass* renderPass,
        SpriteRenderer* spriteRenderer,
        size_t componentBlockSize)
	: DenseComponentManager("text", componentBlockSize),
      _loader(loaderManager),
      _renderPass(renderPass),
      _spriteRenderer(spriteRenderer),
      _states() {
	lairAssert(_loader);
	lairAssert(_renderPass);
	lairAssert(_spriteRenderer);
}
Exemple #2
0
void Window::setVisible(bool visible) {
	lairAssert(isValid());
	if(visible)
		SDL_ShowWindow(_window);
	else
		SDL_HideWindow(_window);
}
Exemple #3
0
void MainState::nextMessage() {
    lairAssert(!_messages.empty());
    _messages.pop_front();
    if(!_messages.empty()) {
        layoutMessage();
    }
}
Exemple #4
0
void _LoaderThread::start() {
	lairAssert(!_running && _manager);
	if(_thread.joinable()) {
		wait();
	}
	_manager->log().debug("Starting loader thread...");
	_running = true;
	_thread = std::thread(&_LoaderThread::_run, this);
}
Exemple #5
0
void Menu::enableEntry(unsigned i) {
	lairAssert(i < _entries.size());
	if(_entries[i].status != ENABLED) {
		++_nSelectable;
		if(_nSelectable == 1) {
			_selected = i;
		}
	}
	_entries[i].status = ENABLED;
}
Exemple #6
0
void Menu::disableEntry(unsigned i) {
	lairAssert(i < _entries.size());
	if(_entries[i].status == ENABLED) {
		--_nSelectable;
		if(_selected == i) {
			selectNext();
		}
	}
	_entries[i].status = DISABLED;
}
Exemple #7
0
void _LoaderThread::wait() {
	lairAssert(_thread.joinable());
	if(_running) {
		stop();
	}
	auto id = _thread.get_id();
	_manager->log().debug("Joinning loader thread ", id, "...");
	_thread.join();
	_manager->log().debug("Joined loader thread ", id, ".");
}
Exemple #8
0
void Window::setFullscreen(bool fullscreen) {
	lairAssert(isValid());

	unsigned flag = 0;
	if(fullscreen) {
		flag = SDL_WINDOW_FULLSCREEN_DESKTOP;
	}

	int r = SDL_SetWindowFullscreen(_window, flag);
	if(r != 0) {
		// TODO
	}
}
Exemple #9
0
Menu::Menu(Sprite* bg, Font* font, MenuInputs* inputs,
           const Callback& cancelCallback, const Vector2& size)
    : anchor(0, 0),
      margin(12, 12),
      indent(12),
      textColor(1, 1, 1, 1),
      disabledColor(.5, .5, .5, 1),
      _inputs(inputs),
      _cancelCallback(cancelCallback),
      _selected(0),
      _nSelectable(0),
      _entries(),
      _visible(false),
      _frame(bg, size),
      _font(font) {
	lairAssert(bg);
}
Exemple #10
0
void Loader::loadSync(Logger& log) {
	lairAssert(!_isLoaded);

	// It is *very* important to catch exceptions here, or waiting threads
	// could wait forever. Moreover, it would unexpectedly stop a worker
	// thread.
	try {
		loadSyncImpl(log);
	} catch(std::exception e) {
		log.error("Exception caught while loading \"", asset()->logicPath(), "\": ", e.what());
	}

	{
		std::unique_lock<std::mutex> lk(_mutex);
		_isLoaded = true;
	}
	_cv.notify_all();
}
Exemple #11
0
void Window::destroy() {
	lairAssert(isValid());

	log().log("Destroy window: \"", utf8Title(), "\"");

//	onDestroy();

	unsigned id = _windowID();

	SDL_GL_DeleteContext(_glContext);
	_glContext = 0;

	SDL_DestroyWindow(_window);
	_window = 0;

	if(_sys) {
		// DELETE THE WINDOW ! Do not do anything after this.
		_sys->_removeWindow(id);
	}
}
Exemple #12
0
void SplashState::run() {
	lairAssert(_initialized);

	log().log("Starting splash state...");
	_running = true;
	_loop.start();
	_fpsTime  = sys()->getTimeNs();
	_fpsCount = 0;

	do {
		switch(_loop.nextEvent()) {
		case InterpLoop::Tick:
			updateTick();
			break;
		case InterpLoop::Frame:
			updateFrame();
			break;
		}
	} while (_running);

	_loop.stop();
}
Exemple #13
0
void MainState::run() {
    lairAssert(_initialized);

    log().log("Starting main state...");
    _running = true;
    _loop.start();
    _fpsTime  = _game->sys()->getTimeNs();
    _fpsCount = 0;

    unsigned lvl = 0;
    do {
        log().log("Our heroes strike",(lvl?".":" again !"));

        lvl += 20;
        _player.strat[rand()%NB_STRATS] = true;
        _player.strat[rand()%NB_STRATS] = true;
        _player.strat[rand()%NB_STRATS] = true;

        initFight(lvl);
        _state = PLAYING;

        do {
            switch(_loop.nextEvent()) {
            case InterpLoop::Tick:
                updateTick();
                break;
            case InterpLoop::Frame:
                updateFrame();
                break;
            }
        } while (_state != GAME_OVER && _running);

    } while (_fight->boss.hp && _running);
    log().log("The mighty has fallen...");

    log().log("Stopping main state...");
    _loop.stop();
}
Exemple #14
0
void _LoaderThread::setManager(LoaderManager* manager) {
	lairAssert(manager);
	_manager = manager;
	_logger.setFrom(_manager->log());
}
Exemple #15
0
Box2 CollisionComponent::worldAlignedBox() const {
	lairAssert(_shape && _shape->type() == SHAPE_ALIGNED_BOX);
	Vector2 pos = EntityRef(_entityPtr).computeWorldTransform().translation().head<2>();
	return Box2(pos + _shape->point(0), pos + _shape->point(1));
}
Exemple #16
0
const char* Window::utf8Title() const {
	lairAssert(isValid());
	return SDL_GetWindowTitle(_window);
}
Exemple #17
0
bool Window::isVisible() const {
	lairAssert(isValid());
	return SDL_GetWindowFlags(_window) & SDL_WINDOW_SHOWN;
}
Exemple #18
0
void Window::resize(int width, int height) {
	lairAssert(isValid());
	SDL_SetWindowSize(_window, width, height);
}
Exemple #19
0
void MainState::doAction() {
    lairAssert(!_menuStack.empty());
    int target = 3 - _menuStack.back()->selected();
    switch(_menuStack[0]->selected()) {
    case MAIN_ATTACK: {
        lairAssert(_menuStack.size() == 2);
        _fight->curse(PUNCH, target);
        break;
    }
    case MAIN_SWITCH: {
        lairAssert(_menuStack.size() == 2);
        switch(_menuStack[1]->selected()) {
        case NONE:
            _fight->curse(SWITCH, NONE);
            break;
        case FIRE:
            _fight->curse(SWITCH, FIRE);
            break;
        case ICE:
            _fight->curse(SWITCH, ICE);
            break;
        case SPARK:
            _fight->curse(SWITCH, SPARK);
            break;
        case ACID:
            _fight->curse(SWITCH, ACID);
            break;
        }
        break;
    }
    case MAIN_SPELL: {
        lairAssert(_menuStack.size() >= 2);
        switch(_menuStack[1]->selected()) {
        case SPELL_STORM:
            lairAssert(_menuStack.size() == 2);
            _fight->curse(STORM, -1);
            break;
        case SPELL_STRIKE:
            lairAssert(_menuStack.size() == 3);
            _fight->curse(STRIKE, target);
            break;
        case SPELL_CRIPPLE:
            lairAssert(_menuStack.size() == 3);
            _fight->curse(CRIPPLE, target);
            break;
        case SPELL_DRAIN:
            lairAssert(_menuStack.size() == 3);
            _fight->curse(DRAIN, target);
            break;
        case SPELL_VORPAL:
            lairAssert(_menuStack.size() == 3);
            _fight->curse(VORPAL, target);
            break;
        case SPELL_MUD:
            lairAssert(_menuStack.size() == 2);
            _fight->curse(MUD, -1);
            break;
        case SPELL_DISPEL:
            lairAssert(_menuStack.size() == 3);
            _fight->curse(DISPEL, target);
            break;
        }
        break;
    }
    case 3: { // summon
        break;
    }
    }

    updateHealthBars();

    _state = PLAYING;
    while(!_menuStack.empty()) {
        closeMenu();
    }
}
Exemple #20
0
int Window::width() const {
	lairAssert(isValid());
	int w;
	SDL_GetWindowSize(_window, &w, 0);
	return w;
}
Exemple #21
0
Window::Window(SysModule* sys)
    : _sys(sys),
      _window(nullptr),
      _glContext(nullptr) {
	lairAssert(sys);
}
Exemple #22
0
Logger& Window::log() {
	lairAssert(_sys);
	return _sys->log();
}
Exemple #23
0
void Window::setUtf8Title(const char* utf8Title) {
	lairAssert(isValid());
	SDL_SetWindowTitle(_window, utf8Title);
}
Exemple #24
0
uint8 Menu::entryStatus(unsigned i) const {
	lairAssert(i < _entries.size());
	return _entries[i].status;
}
Exemple #25
0
TileLayerComponent* TileLayerComponentManager::addComponentFromJson(EntityRef /*entity*/, const Json::Value& /*json*/,
                                  const Path& /*cd*/) {
	lairAssert(false);
  return nullptr;
}
Exemple #26
0
void Menu::setSelected(unsigned index) {
	lairAssert(index < _entries.size());
	_selected = index;
}
Exemple #27
0
void _LoaderThread::stop() {
	lairAssert(_running && _thread.joinable());
	_manager->log().debug("Stopping loader thread ", _thread.get_id(), "...");
	_running = false;
}
Exemple #28
0
int Window::height() const {
	lairAssert(isValid());
	int h;
	SDL_GetWindowSize(_window, 0, &h);
	return h;
}
Exemple #29
0
SDL_Window* Window::_create(const char* utf8Title, int width, int height) {
	lairAssert(!isValid());

//	SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
//	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
//	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
	unsigned windowFlags = 0
	        | SDL_WINDOW_OPENGL
//	        | SDL_WINDOW_FULLSCREEN_DESKTOP
	        ;
	_window = SDL_CreateWindow(
	            utf8Title,
	            SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
	            width, height,
	            windowFlags);
	if(!_window) {
		log().error("Failed to create SDL window.", SDL_GetError());
		return 0;
	}

	_glContext = SDL_GL_CreateContext(_window);
	if(!_glContext) {
		log().error("failed to create OpenGL context: ", SDL_GetError());
		SDL_DestroyWindow(_window);
		return 0;
	}

	typedef std::pair<const char*, SDL_GLattr> GLAttr;
	GLAttr glAttrs[] =
	{
	    std::make_pair("SDL_GL_RED_SIZE = ", SDL_GL_RED_SIZE),
	    std::make_pair("SDL_GL_GREEN_SIZE = ", SDL_GL_GREEN_SIZE),
	    std::make_pair("SDL_GL_BLUE_SIZE = ", SDL_GL_BLUE_SIZE),
	    std::make_pair("SDL_GL_ALPHA_SIZE = ", SDL_GL_ALPHA_SIZE),
	    std::make_pair("SDL_GL_BUFFER_SIZE = ", SDL_GL_BUFFER_SIZE),
	    std::make_pair("SDL_GL_DOUBLEBUFFER = ", SDL_GL_DOUBLEBUFFER),
	    std::make_pair("SDL_GL_DEPTH_SIZE = ", SDL_GL_DEPTH_SIZE),
	    std::make_pair("SDL_GL_STENCIL_SIZE = ", SDL_GL_STENCIL_SIZE),
	    std::make_pair("SDL_GL_ACCUM_RED_SIZE = ", SDL_GL_ACCUM_RED_SIZE),
	    std::make_pair("SDL_GL_ACCUM_GREEN_SIZE = ", SDL_GL_ACCUM_GREEN_SIZE),
	    std::make_pair("SDL_GL_ACCUM_BLUE_SIZE = ", SDL_GL_ACCUM_BLUE_SIZE),
	    std::make_pair("SDL_GL_ACCUM_ALPHA_SIZE = ", SDL_GL_ACCUM_ALPHA_SIZE),
	    std::make_pair("SDL_GL_STEREO = ", SDL_GL_STEREO),
	    std::make_pair("SDL_GL_MULTISAMPLEBUFFERS = ", SDL_GL_MULTISAMPLEBUFFERS),
	    std::make_pair("SDL_GL_MULTISAMPLESAMPLES = ", SDL_GL_MULTISAMPLESAMPLES),
	    std::make_pair("SDL_GL_ACCELERATED_VISUAL = ", SDL_GL_ACCELERATED_VISUAL),
	    //        std::make_pair("SDL_GL_RETAINED_BACKING = ", SDL_GL_RETAINED_BACKING),
	    std::make_pair("SDL_GL_CONTEXT_MAJOR_VERSION = ", SDL_GL_CONTEXT_MAJOR_VERSION),
	    std::make_pair("SDL_GL_CONTEXT_MINOR_VERSION = ", SDL_GL_CONTEXT_MINOR_VERSION),
	    //        std::make_pair("SDL_GL_CONTEXT_EGL = ", SDL_GL_CONTEXT_EGL),
	    std::make_pair("SDL_GL_CONTEXT_FLAGS = ", SDL_GL_CONTEXT_FLAGS),
	    std::make_pair("SDL_GL_CONTEXT_PROFILE_MASK = ", SDL_GL_CONTEXT_PROFILE_MASK),
	    std::make_pair("SDL_GL_SHARE_WITH_CURRENT_CONTEXT = ", SDL_GL_SHARE_WITH_CURRENT_CONTEXT),
	    //        std::make_pair("SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = ", SDL_GL_FRAMEBUFFER_SRGB_CAPABLE),
	};
	for(unsigned i = 0; i < (sizeof(glAttrs) / sizeof(GLAttr)); ++i) {
		int attr;
		SDL_GL_GetAttribute(glAttrs[i].second, &attr);
		log().info(glAttrs[i].first, attr);
	}

	return _window;
}
Exemple #30
0
bool Window::isFullscreen() const {
	lairAssert(isValid());
	return SDL_GetWindowFlags(_window) & SDL_WINDOW_FULLSCREEN_DESKTOP;
}