diff options
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/game.cpp b/src/game.cpp index 447b62a..861e8ee 100644 --- a/src/game.cpp +++ b/src/game.cpp | |||
@@ -1,4 +1,8 @@ | |||
1 | #include "game.h" | 1 | #include "game.h" |
2 | #include "transform_system.h" | ||
3 | #include "animation_system.h" | ||
4 | #include "character_system.h" | ||
5 | #include "camera_system.h" | ||
2 | 6 | ||
3 | int Game::emplaceSprite(std::string alias) { | 7 | int Game::emplaceSprite(std::string alias) { |
4 | int id = sprites_.size(); | 8 | int id = sprites_.size(); |
@@ -7,3 +11,59 @@ int Game::emplaceSprite(std::string alias) { | |||
7 | spritesByAlias_[alias] = id; | 11 | spritesByAlias_[alias] = id; |
8 | return id; | 12 | return id; |
9 | } | 13 | } |
14 | |||
15 | void Game::clearSprites() { | ||
16 | sprites_.clear(); | ||
17 | spriteIds_.clear(); | ||
18 | spritesByAlias_.clear(); | ||
19 | |||
20 | for (std::unique_ptr<System>& system : systems_) { | ||
21 | system->clearSpriteCache(); | ||
22 | } | ||
23 | } | ||
24 | |||
25 | void Game::loadMap(std::string filename, std::string warpPoint) { | ||
26 | clearSprites(); | ||
27 | |||
28 | map_ = std::make_unique<Map>(filename); | ||
29 | |||
30 | int lucasSprite = emplaceSprite("lucas"); | ||
31 | getSystem<TransformSystem>().initSprite(lucasSprite, map_->getWarpPoint(warpPoint)); | ||
32 | getSystem<TransformSystem>().setUpCollision(lucasSprite, {-8, -8}, {12, 8}, true); | ||
33 | getSystem<AnimationSystem>().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt"); | ||
34 | getSprite(lucasSprite).controllable = true; | ||
35 | getSystem<CharacterSystem>().initSprite(lucasSprite); | ||
36 | |||
37 | int kumaSprite = emplaceSprite("kuma"); | ||
38 | getSystem<TransformSystem>().initSprite(kumaSprite, {32, 32}); | ||
39 | getSystem<AnimationSystem>().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); | ||
40 | getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, kumaSprite); | ||
41 | |||
42 | int dusterSprite = emplaceSprite("duster"); | ||
43 | getSystem<TransformSystem>().initSprite(dusterSprite, {32, 32}); | ||
44 | getSystem<AnimationSystem>().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); | ||
45 | getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, dusterSprite); | ||
46 | |||
47 | int boneySprite = emplaceSprite("boney"); | ||
48 | getSystem<TransformSystem>().initSprite(boneySprite, {32, 32}); | ||
49 | getSystem<AnimationSystem>().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); | ||
50 | getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, boneySprite); | ||
51 | |||
52 | for (const Prototype& p : map_->getPrototypes()) { | ||
53 | int spriteId = emplaceSprite(p.name); | ||
54 | getSystem<TransformSystem>().initSprite(spriteId, p.pos); | ||
55 | getSystem<TransformSystem>().setUpCollision(spriteId, p.collisionOffset, p.collisionSize, true); | ||
56 | getSystem<AnimationSystem>().initSprite(spriteId, p.animationFilename); | ||
57 | getSprite(spriteId).interactionScript = p.interactionScript; | ||
58 | } | ||
59 | |||
60 | for (const Trigger& t : map_->getTriggers()) { | ||
61 | int spriteId = emplaceSprite(t.name); | ||
62 | getSystem<TransformSystem>().initSprite(spriteId, t.pos); | ||
63 | getSystem<TransformSystem>().setUpCollision(spriteId, {0, 0}, t.size, false); | ||
64 | getSprite(spriteId).walkthroughScript = t.script; | ||
65 | } | ||
66 | |||
67 | getSystem<CameraSystem>().setFollowingSprite(lucasSprite); | ||
68 | getSystem<CameraSystem>().unlockCamera(); | ||
69 | } | ||