summary refs log tree commit diff stats
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
parentaf49b5366d35173702a2b3bd70ac4254b8855538 (diff)
downloadtanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.tar.gz
tanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.tar.bz2
tanetane-c1fc60c5a2a4b96b830afc29942648714944b9d7.zip
Added sprite bobbing (for Lucas underwater)
-rw-r--r--res/scripts/common.lua15
-rw-r--r--res/scripts/underwater.lua1
-rw-r--r--res/scripts/underwater_start.lua1
-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
9 files changed, 52 insertions, 2 deletions
diff --git a/res/scripts/common.lua b/res/scripts/common.lua index 895ad7b..825d2e5 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua
@@ -329,3 +329,18 @@ function AllowCrouching()
329 local playerSprite = getSprite(playerId) 329 local playerSprite = getSprite(playerId)
330 playerSprite.cantCrouch = false 330 playerSprite.cantCrouch = false
331end 331end
332
333--- Makes a sprite start bobbing up and down (for underwater).
334-- This only applies when the sprite is on a normal medium (so, not on ladders).
335function StartBobbing(spriteName)
336 local spriteId = getSpriteByAlias(spriteName)
337 local sprite = getSprite(spriteId)
338 sprite.bobsWhenNormal = true
339end
340
341--- Makes a sprite stop bobbing up and down.
342function StopBobbing(spriteName)
343 local spriteId = getSpriteByAlias(spriteName)
344 local sprite = getSprite(spriteId)
345 sprite.bobsWhenNormal = false
346end
diff --git a/res/scripts/underwater.lua b/res/scripts/underwater.lua index 4c5d2bb..3500079 100644 --- a/res/scripts/underwater.lua +++ b/res/scripts/underwater.lua
@@ -2,6 +2,7 @@ underwater = {}
2 2
3function underwater.leave() 3function underwater.leave()
4 AllowCrouching() 4 AllowCrouching()
5 StopBobbing("lucas")
5end 6end
6 7
7function underwater.fish2() 8function underwater.fish2()
diff --git a/res/scripts/underwater_start.lua b/res/scripts/underwater_start.lua index 98a6e67..c14f4b8 100644 --- a/res/scripts/underwater_start.lua +++ b/res/scripts/underwater_start.lua
@@ -2,6 +2,7 @@ underwater_start = {}
2 2
3function underwater_start.init() 3function underwater_start.init()
4 PreventCrouching() 4 PreventCrouching()
5 StartBobbing("lucas")
5end 6end
6 7
7function underwater_start.talk_to_fish1() 8function underwater_start.talk_to_fish1()
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;