#include "game.h" #include "transform_system.h" #include "animation_system.h" #include "character_system.h" #include "camera_system.h" int Game::emplaceSprite(std::string alias) { int id = sprites_.size(); sprites_.emplace_back(); spriteIds_.push_back(id); spritesByAlias_[alias] = id; return id; } void Game::clearSprites() { for (std::unique_ptr& system : systems_) { system->clearSpriteCache(); } sprites_.clear(); spriteIds_.clear(); spritesByAlias_.clear(); } void Game::loadMap(std::string filename, std::string warpPoint, Direction dir) { clearSprites(); map_ = std::make_unique(filename); vec2i warpLoc = map_->getWarpPoint(warpPoint); int lucasSprite = emplaceSprite("lucas"); getSystem().initSprite(lucasSprite, warpLoc); getSystem().setUpCollision(lucasSprite, {-8, -8}, {12, 8}, true); getSystem().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt"); getSystem().setSpriteDirection(lucasSprite, dir); getSprite(lucasSprite).player = true; getSystem().initSprite(lucasSprite); int kumaSprite = emplaceSprite("kuma"); getSystem().initSprite(kumaSprite, warpLoc); getSystem().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); getSystem().setSpriteDirection(kumaSprite, dir); getSystem().addSpriteToParty(lucasSprite, kumaSprite); int dusterSprite = emplaceSprite("duster"); getSystem().initSprite(dusterSprite, warpLoc); getSystem().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); getSystem().setSpriteDirection(dusterSprite, dir); getSystem().addSpriteToParty(lucasSprite, dusterSprite); int boneySprite = emplaceSprite("boney"); getSystem().initSprite(boneySprite, warpLoc); getSystem().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); getSystem().setSpriteDirection(boneySprite, dir); getSystem().addSpriteToParty(lucasSprite, boneySprite); for (const Prototype& p : map_->getPrototypes()) { int spriteId = emplaceSprite(p.name); getSystem().initSprite(spriteId, p.pos); getSystem().setUpCollision(spriteId, p.collisionOffset, p.collisionSize, true); if (!p.animationFilename.empty()) { getSystem().initSprite(spriteId, p.animationFilename); } getSprite(spriteId).interactionScript = p.interactionScript; } for (const Trigger& t : map_->getTriggers()) { int spriteId = emplaceSprite(t.name); getSystem().initSprite(spriteId, t.pos); getSystem().setUpCollision(spriteId, {0, 0}, t.size, false); getSprite(spriteId).walkthroughScript = t.script; } getSystem().setFollowingSprite(lucasSprite); getSystem().unlockCamera(); }