summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-26 18:54:38 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-26 18:54:38 -0500
commitc1fc60c5a2a4b96b830afc29942648714944b9d7 (patch)
tree8460df9e93491b8ba138f7f1cba41572b65fc537 /src
parentaf49b5366d35173702a2b3bd70ac4254b8855538 (diff)
downloadtanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.tar.gz
tanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.tar.bz2
tanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.zip
Added sprite bobbing (for Lucas underwater)
Diffstat (limited to 'src')
-rw-r--r--src/animation_system.cpp19
-rw-r--r--src/animation_system.h1
-rw-r--r--src/character_system.cpp3
-rw-r--r--src/renderer.cpp3
-rw-r--r--src/script_system.cpp3
-rw-r--r--src/sprite.h8
6 files changed, 35 insertions, 2 deletions
diff --git a/src/animation_system.cpp b/src/animation_system.cpp index baf94a4..5892f64 100644 --- a/src/animation_system.cpp +++ b/src/animation_system.cpp
@@ -134,6 +134,25 @@ void AnimationSystem::tick(double dt) {
134 } 134 }
135 } 135 }
136 } 136 }
137
138 bobbingTimer_.accumulate(dt);
139 while (bobbingTimer_.step()) {
140 for (Sprite& sprite : game_.getSprites() | game_.spriteView()) {
141 if (sprite.isAnimated && sprite.bobbing) {
142 if (sprite.bobbingDown) {
143 sprite.bobAmount--;
144 if (sprite.bobAmount == 0) {
145 sprite.bobbingDown = false;
146 }
147 } else {
148 sprite.bobAmount++;
149 if (sprite.bobAmount == 4) {
150 sprite.bobbingDown = true;
151 }
152 }
153 }
154 }
155 }
137} 156}
138 157
139void AnimationSystem::setSpriteDirection(int spriteId, Direction dir) { 158void AnimationSystem::setSpriteDirection(int spriteId, Direction dir) {
diff --git a/src/animation_system.h b/src/animation_system.h index c64c2dc..42aa516 100644 --- a/src/animation_system.h +++ b/src/animation_system.h
@@ -30,6 +30,7 @@ private:
30 30
31 Game& game_; 31 Game& game_;
32 std::vector<Timer> animTimers_ = {{1000/5}, {1000/60}};//30fps * 1000 t/s;; 32 std::vector<Timer> animTimers_ = {{1000/5}, {1000/60}};//30fps * 1000 t/s;;
33 Timer bobbingTimer_ {1000/7};
33}; 34};
34 35
35#endif /* end of include guard: ANIMATION_SYSTEM_H_CCCC7CB8 */ 36#endif /* end of include guard: ANIMATION_SYSTEM_H_CCCC7CB8 */
diff --git a/src/character_system.cpp b/src/character_system.cpp index 87407af..9b91716 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp
@@ -332,12 +332,14 @@ void CharacterSystem::setAnimationFor(int spriteId, CharacterState state) {
332 332
333 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, animName); 333 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, animName);
334 sprite.hasShadow = sprite.normallyHasShadow; 334 sprite.hasShadow = sprite.normallyHasShadow;
335 sprite.bobbing = sprite.bobsWhenNormal;
335 336
336 break; 337 break;
337 } 338 }
338 case CharacterMedium::Ladder: { 339 case CharacterMedium::Ladder: {
339 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, "climb"); 340 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, "climb");
340 sprite.hasShadow = false; 341 sprite.hasShadow = false;
342 sprite.bobbing = false;
341 343
342 if (state == CharacterState::Still || state == CharacterState::Crouching) { 344 if (state == CharacterState::Still || state == CharacterState::Crouching) {
343 sprite.animPaused = true; 345 sprite.animPaused = true;
@@ -355,6 +357,7 @@ void CharacterSystem::setAnimationFor(int spriteId, CharacterState state) {
355 357
356 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, animName); 358 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, animName);
357 sprite.hasShadow = false; 359 sprite.hasShadow = false;
360 sprite.bobbing = false;
358 361
359 break; 362 break;
360 } 363 }
diff --git a/src/renderer.cpp b/src/renderer.cpp index 1196e50..3007378 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp
@@ -115,6 +115,9 @@ void Renderer::renderSprite(const Sprite& sprite) {
115 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).frameIndices.at(sprite.animationFrame)); 115 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).frameIndices.at(sprite.animationFrame));
116 const SDL_Rect& src = frame.srcRect; 116 const SDL_Rect& src = frame.srcRect;
117 SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() }; 117 SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() };
118 if (sprite.bobbing) {
119 dest.y -= sprite.bobAmount;
120 }
118 SDL_RenderCopy(ren_.get(), textures_.at(loadImageFromFile(sprite.spritesheet)).get(), &src, &dest); 121 SDL_RenderCopy(ren_.get(), textures_.at(loadImageFromFile(sprite.spritesheet)).get(), &src, &dest);
119 } 122 }
120} 123}
diff --git a/src/script_system.cpp b/src/script_system.cpp index 92e6afe..e218969 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp
@@ -40,7 +40,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
40 "persistent", &Sprite::persistent, 40 "persistent", &Sprite::persistent,
41 "paused", &Sprite::paused, 41 "paused", &Sprite::paused,
42 "clipping", &Sprite::clipping, 42 "clipping", &Sprite::clipping,
43 "cantCrouch", &Sprite::cantCrouch); 43 "cantCrouch", &Sprite::cantCrouch,
44 "bobsWhenNormal", &Sprite::bobsWhenNormal);
44 45
45 engine_.new_usertype<MessageSystem>( 46 engine_.new_usertype<MessageSystem>(
46 "message", 47 "message",
diff --git a/src/sprite.h b/src/sprite.h index 657a692..570a906 100644 --- a/src/sprite.h +++ b/src/sprite.h
@@ -64,7 +64,7 @@ public:
64 std::string walkthroughScript; 64 std::string walkthroughScript;
65 std::string enclosureZone; 65 std::string enclosureZone;
66 66
67 // Animation 67 // Animation (internals)
68 bool isAnimated = false; 68 bool isAnimated = false;
69 std::string spritesheet; 69 std::string spritesheet;
70 Direction dir = Direction::down; 70 Direction dir = Direction::down;
@@ -76,8 +76,13 @@ public:
76 std::map<std::string, std::map<Direction, int>> nameDirToAnim; 76 std::map<std::string, std::map<Direction, int>> nameDirToAnim;
77 bool animFinished = false; 77 bool animFinished = false;
78 bool hasShadow = false; 78 bool hasShadow = false;
79 int bobAmount = 0;
80 bool bobbingDown = false;
81
82 // Animation (controls)
79 bool normallyHasShadow = false; 83 bool normallyHasShadow = false;
80 bool animPaused = false; 84 bool animPaused = false;
85 bool bobbing = false;
81 86
82 // Character 87 // Character
83 bool orientable = false; 88 bool orientable = false;
@@ -92,6 +97,7 @@ public:
92 int runningSfxChannel = -1; 97 int runningSfxChannel = -1;
93 bool clipping = false; 98 bool clipping = false;
94 bool cantCrouch = false; // Use this to prevent running 99 bool cantCrouch = false; // Use this to prevent running
100 bool bobsWhenNormal = false; // If enabled, sets the animation bobbing flag whenever medium is Normal
95 101
96 // Input 102 // Input
97 bool controllable = false; 103 bool controllable = false;