diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/character_system.cpp | 23 | ||||
| -rw-r--r-- | src/map.cpp | 2 | ||||
| -rw-r--r-- | src/sprite.h | 3 |
3 files changed, 25 insertions, 3 deletions
| diff --git a/src/character_system.cpp b/src/character_system.cpp index bc02e6c..bcd3beb 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp | |||
| @@ -75,7 +75,8 @@ void CharacterSystem::moveInDirection(int spriteId, Direction dir) { | |||
| 75 | sprite.movementDir = dir; | 75 | sprite.movementDir = dir; |
| 76 | 76 | ||
| 77 | switch (sprite.characterMedium) { | 77 | switch (sprite.characterMedium) { |
| 78 | case CharacterMedium::Normal: { | 78 | case CharacterMedium::Normal: |
| 79 | case CharacterMedium::Water: { | ||
| 79 | game_.getSystem<AnimationSystem>().setSpriteDirection(spriteId, dir); | 80 | game_.getSystem<AnimationSystem>().setSpriteDirection(spriteId, dir); |
| 80 | break; | 81 | break; |
| 81 | } | 82 | } |
| @@ -171,6 +172,12 @@ void CharacterSystem::tick(double dt) { | |||
| 171 | sprite.characterMedium = newMedium; | 172 | sprite.characterMedium = newMedium; |
| 172 | setAnimationFor(spriteId, sprite.characterState); | 173 | setAnimationFor(spriteId, sprite.characterState); |
| 173 | adjustPartyTrails(spriteId); | 174 | adjustPartyTrails(spriteId); |
| 175 | |||
| 176 | // Stop running if you go into water. | ||
| 177 | if (newMedium == CharacterMedium::Water && | ||
| 178 | sprite.characterState == CharacterState::Running) { | ||
| 179 | stopRunning(spriteId); | ||
| 180 | } | ||
| 174 | } | 181 | } |
| 175 | 182 | ||
| 176 | if (sprite.characterState == CharacterState::Running) { | 183 | if (sprite.characterState == CharacterState::Running) { |
| @@ -214,7 +221,8 @@ void CharacterSystem::beginCrouch(int spriteId) { | |||
| 214 | if (sprite.characterState == CharacterState::Running) { | 221 | if (sprite.characterState == CharacterState::Running) { |
| 215 | stopRunning(spriteId); | 222 | stopRunning(spriteId); |
| 216 | } else { | 223 | } else { |
| 217 | if (sprite.characterMedium == CharacterMedium::Ladder) { | 224 | if (sprite.characterMedium == CharacterMedium::Ladder || |
| 225 | sprite.characterMedium == CharacterMedium::Water) { | ||
| 218 | return; | 226 | return; |
| 219 | } | 227 | } |
| 220 | 228 | ||
| @@ -323,6 +331,17 @@ void CharacterSystem::setAnimationFor(int spriteId, CharacterState state) { | |||
| 323 | 331 | ||
| 324 | break; | 332 | break; |
| 325 | } | 333 | } |
| 334 | case CharacterMedium::Water: { | ||
| 335 | std::string animName = "swim_still"; | ||
| 336 | if (state == CharacterState::Walking) { | ||
| 337 | animName = "swim_walk"; | ||
| 338 | } | ||
| 339 | |||
| 340 | game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, animName); | ||
| 341 | sprite.hasShadow = false; | ||
| 342 | |||
| 343 | break; | ||
| 344 | } | ||
| 326 | } | 345 | } |
| 327 | } | 346 | } |
| 328 | 347 | ||
| diff --git a/src/map.cpp b/src/map.cpp index 0425962..23445e4 100644 --- a/src/map.cpp +++ b/src/map.cpp | |||
| @@ -47,6 +47,8 @@ Map::Map(std::string_view name) : name_(name) { | |||
| 47 | } else if (property.getName() == "medium") { | 47 | } else if (property.getName() == "medium") { |
| 48 | if (property.getStringValue() == "ladder") { | 48 | if (property.getStringValue() == "ladder") { |
| 49 | tile.medium = CharacterMedium::Ladder; | 49 | tile.medium = CharacterMedium::Ladder; |
| 50 | } else if (property.getStringValue() == "water") { | ||
| 51 | tile.medium = CharacterMedium::Water; | ||
| 50 | } | 52 | } |
| 51 | } | 53 | } |
| 52 | } | 54 | } |
| diff --git a/src/sprite.h b/src/sprite.h index bb78442..32a082c 100644 --- a/src/sprite.h +++ b/src/sprite.h | |||
| @@ -36,7 +36,8 @@ enum class CharacterState { | |||
| 36 | 36 | ||
| 37 | enum class CharacterMedium { | 37 | enum class CharacterMedium { |
| 38 | Normal, | 38 | Normal, |
| 39 | Ladder | 39 | Ladder, |
| 40 | Water | ||
| 40 | }; | 41 | }; |
| 41 | 42 | ||
| 42 | struct Movement { | 43 | struct Movement { |
