#include #include #include #include "renderer.h" #include "game.h" #include "timer.h" #include "map.h" #include "transform_system.h" #include "camera_system.h" #include "animation_system.h" #include "character_system.h" #include "input_system.h" #include "message_system.h" #include "script_system.h" #include "effect_system.h" #include "behaviour_system.h" #include "mirror_system.h" #include "menu_system.h" void loop(Renderer& renderer, std::mt19937& rng) { Game game(renderer, rng); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); game.loadMap("hallucination_cliff"); vec2i warpLoc = game.getMap().getWarpPoint("fromBottom"); int lucasSprite = game.emplaceSprite("lucas"); game.getSystem().initSprite(lucasSprite, warpLoc); game.getSystem().setUpCollision(lucasSprite, {-7, -8}, {14, 8}, true); game.getSystem().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt"); game.getSystem().setSpriteDirection(lucasSprite, Direction::down); game.getSprite(lucasSprite).normallyHasShadow = true; game.getSprite(lucasSprite).player = true; game.getSprite(lucasSprite).controllable = true; game.getSprite(lucasSprite).persistent = true; game.getSprite(lucasSprite).sliding = true; game.getSystem().initSprite(lucasSprite, LUCAS_MOVEMENT_SPEED); game.getSystem().setFollowingSprite(lucasSprite); game.getSystem().unlockCamera(); int kumaSprite = game.emplaceSprite("kuma"); game.getSystem().initSprite(kumaSprite, warpLoc); game.getSystem().setUpCollision(kumaSprite, {-7, -8}, {14, 8}, false); game.getSystem().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); game.getSystem().setSpriteDirection(kumaSprite, Direction::down); game.getSprite(kumaSprite).normallyHasShadow = true; game.getSprite(kumaSprite).persistent = true; game.getSystem().addSpriteToParty(lucasSprite, kumaSprite); int dusterSprite = game.emplaceSprite("duster"); game.getSystem().initSprite(dusterSprite, warpLoc); game.getSystem().setUpCollision(dusterSprite, {-7, -8}, {14, 8}, false); game.getSystem().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); game.getSystem().setSpriteDirection(dusterSprite, Direction::down); game.getSprite(dusterSprite).normallyHasShadow = true; game.getSprite(dusterSprite).persistent = true; game.getSystem().addSpriteToParty(lucasSprite, dusterSprite); int boneySprite = game.emplaceSprite("boney"); game.getSystem().initSprite(boneySprite, warpLoc); game.getSystem().setUpCollision(boneySprite, {-7, -8}, {14, 8}, false); game.getSystem().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); game.getSystem().setSpriteDirection(boneySprite, Direction::down); game.getSprite(boneySprite).normallyHasShadow = true; game.getSprite(boneySprite).persistent = true; game.getSystem().addSpriteToParty(lucasSprite, boneySprite); renderer.render(game); if (game.getMap().hasMusic()) { game.getMixer().playMusic(game.getMap().getMusic()); } size_t lastTime = SDL_GetTicks(); while (!game.shouldQuit()) { size_t currentTime = SDL_GetTicks(); size_t frameTime = currentTime - lastTime; lastTime = currentTime; for (System& system : game.systems()) { system.tick(frameTime); } renderer.render(game); } } int main(int, char**) { std::random_device randomEngine; std::mt19937 rng(randomEngine()); try { Renderer renderer; loop(renderer, rng); } catch (const sdl_error& ex) { std::cout << "SDL error (" << ex.what() << ")" << std::endl; } return 0; }