From ae654356f843bb42a3c72d57b528d87aa63cf66d Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 23 Feb 2021 10:30:16 -0500 Subject: Added a clipping mode (for testing!) This allows walking through solid objects. It can be enabled and disabled using StartClipping() and StopClipping() in the debug console. It should not be used in any actual scripts. --- src/character_system.cpp | 6 +++--- src/script_system.cpp | 3 ++- src/sprite.h | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/character_system.cpp b/src/character_system.cpp index 6e15eac..99b6929 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp @@ -117,7 +117,7 @@ void CharacterSystem::tick(double dt) { CollisionResult collision = game_.getSystem().checkCollision(spriteId, pLoc, sprite.dir); bool blocked = collision.horiz.blocked || collision.vert.blocked; - if (collision.horiz.blocked) { + if (collision.horiz.blocked && !sprite.clipping) { pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; } else if (collision.horiz.colliderSprite != -1) { Sprite& collider = game_.getSprite(collision.horiz.colliderSprite); @@ -127,7 +127,7 @@ void CharacterSystem::tick(double dt) { } } - if (collision.vert.blocked) { + if (collision.vert.blocked && !sprite.clipping) { pLoc.y() = sprite.loc.y();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; } else if (collision.vert.colliderSprite != -1) { Sprite& collider = game_.getSprite(collision.vert.colliderSprite); @@ -137,7 +137,7 @@ void CharacterSystem::tick(double dt) { } } - if (blocked && sprite.characterState == CharacterState::Running) { + if (blocked && sprite.characterState == CharacterState::Running && !sprite.clipping) { stopRunning(spriteId); game_.getMixer().playSound("../res/sfx/bump.wav"); } diff --git a/src/script_system.cpp b/src/script_system.cpp index 769a872..2e02edf 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp @@ -37,7 +37,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { return sprite.frames[sprite.animations[sprite.animationId].frameIndices[sprite.animationFrame]]; }, "persistent", &Sprite::persistent, - "paused", &Sprite::paused); + "paused", &Sprite::paused, + "clipping", &Sprite::clipping); engine_.new_usertype( "message", diff --git a/src/sprite.h b/src/sprite.h index 35ca7aa..3d2e9df 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -77,6 +77,7 @@ public: CharacterState characterState = CharacterState::Still; StepType stepType = StepType::none; int runningSfxChannel = -1; + bool clipping = false; // Input bool controllable = false; -- cgit 1.4.1