summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2021-07-06 10:12:59 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2021-07-06 10:12:59 -0400
commit8aedeaf12c7dbf35f2f75f1b063b76a4fad06f30 (patch)
treeb90a7f804631d1921be64666e5ddc9bce31df371
parentb57aa99e101c7cf59fd59d2f8df9fe3547d91acc (diff)
downloadtanetane-8aedeaf12c7dbf35f2f75f1b063b76a4fad06f30.tar.gz
tanetane-8aedeaf12c7dbf35f2f75f1b063b76a4fad06f30.tar.bz2
tanetane-8aedeaf12c7dbf35f2f75f1b063b76a4fad06f30.zip
Added "floating" sprite attribute
Sprites with this flag enabled will ignore map collision.
-rw-r--r--src/game.cpp1
-rw-r--r--src/map.cpp2
-rw-r--r--src/map.h1
-rw-r--r--src/sprite.h1
-rw-r--r--src/transform_system.cpp12
5 files changed, 13 insertions, 4 deletions
diff --git a/src/game.cpp b/src/game.cpp index dff8af0..1b2cda9 100644 --- a/src/game.cpp +++ b/src/game.cpp
@@ -88,6 +88,7 @@ void Game::loadMap(std::string filename) {
88 if (!p.backgroundScript.empty()) { 88 if (!p.backgroundScript.empty()) {
89 backgroundScripts.push_back({spriteId, p.backgroundScript}); 89 backgroundScripts.push_back({spriteId, p.backgroundScript});
90 } 90 }
91 getSprite(spriteId).floating = p.floating;
91 } 92 }
92 93
93 for (const Trigger& t : map_->getTriggers()) { 94 for (const Trigger& t : map_->getTriggers()) {
diff --git a/src/map.cpp b/src/map.cpp index f28a976..c6729d6 100644 --- a/src/map.cpp +++ b/src/map.cpp
@@ -123,6 +123,8 @@ Map::Map(std::string_view name) : name_(name) {
123 p.bumpPlayerScript = property.getStringValue(); 123 p.bumpPlayerScript = property.getStringValue();
124 } else if (property.getName() == "backgroundScript") { 124 } else if (property.getName() == "backgroundScript") {
125 p.backgroundScript = property.getStringValue(); 125 p.backgroundScript = property.getStringValue();
126 } else if (property.getName() == "floating") {
127 p.floating = property.getBoolValue();
126 } 128 }
127 } 129 }
128 130
diff --git a/src/map.h b/src/map.h index 48c0223..4019428 100644 --- a/src/map.h +++ b/src/map.h
@@ -37,6 +37,7 @@ struct Prototype {
37 MirrorType mirrorType = MirrorType::None; 37 MirrorType mirrorType = MirrorType::None;
38 int mirrorAxis = 0; 38 int mirrorAxis = 0;
39 std::string spriteToMirror; 39 std::string spriteToMirror;
40 bool floating = false;
40}; 41};
41 42
42struct Trigger { 43struct Trigger {
diff --git a/src/sprite.h b/src/sprite.h index e7cb55b..406053e 100644 --- a/src/sprite.h +++ b/src/sprite.h
@@ -84,6 +84,7 @@ public:
84 std::string bumpPlayerScript; 84 std::string bumpPlayerScript;
85 std::string enclosureZone; 85 std::string enclosureZone;
86 bool sliding = false; 86 bool sliding = false;
87 bool floating = false;
87 88
88 // Animation (internals) 89 // Animation (internals)
89 bool isAnimated = false; 90 bool isAnimated = false;
diff --git a/src/transform_system.cpp b/src/transform_system.cpp index 825514f..425d8ea 100644 --- a/src/transform_system.cpp +++ b/src/transform_system.cpp
@@ -81,7 +81,8 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i curLoc, vec2
81 } 81 }
82 82
83 if (dirHasDir(dir, Direction::right)) { 83 if (dirHasDir(dir, Direction::right)) {
84 if (newTileDR.x() > oldTileDR.x() && 84 if (!sprite.floating &&
85 newTileDR.x() > oldTileDR.x() &&
85 newColDR.x() < mapBounds.w()) { 86 newColDR.x() < mapBounds.w()) {
86 for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { 87 for (int y = newTileUL.y(); y <= newTileDR.y(); y++) {
87 if (map.isBlocked(newTileDR.x(), y)) { 88 if (map.isBlocked(newTileDR.x(), y)) {
@@ -138,7 +139,8 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i curLoc, vec2
138 } 139 }
139 140
140 if (dirHasDir(dir, Direction::left)) { 141 if (dirHasDir(dir, Direction::left)) {
141 if (newTileUL.x() < oldTileUL.x() && 142 if (!sprite.floating &&
143 newTileUL.x() < oldTileUL.x() &&
142 newColUL.x() >= 0) { 144 newColUL.x() >= 0) {
143 for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { 145 for (int y = newTileUL.y(); y <= newTileDR.y(); y++) {
144 if (map.isBlocked(newTileUL.x(), y)) { 146 if (map.isBlocked(newTileUL.x(), y)) {
@@ -217,7 +219,8 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i curLoc, vec2
217 newTileDR = newColDR / map.getTileSize(); 219 newTileDR = newColDR / map.getTileSize();
218 220
219 if (dirHasDir(dir, Direction::down)) { 221 if (dirHasDir(dir, Direction::down)) {
220 if (newTileDR.y() > oldTileDR.y() && 222 if (!sprite.floating &&
223 newTileDR.y() > oldTileDR.y() &&
221 newColDR.y() < mapBounds.h()) { 224 newColDR.y() < mapBounds.h()) {
222 for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { 225 for (int x = newTileUL.x(); x <= newTileDR.x(); x++) {
223 if (map.isBlocked(x, newTileDR.y())) { 226 if (map.isBlocked(x, newTileDR.y())) {
@@ -274,7 +277,8 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i curLoc, vec2
274 } 277 }
275 278
276 if (dirHasDir(dir, Direction::up)) { 279 if (dirHasDir(dir, Direction::up)) {
277 if (newTileUL.y() < oldTileUL.y() && 280 if (!sprite.floating &&
281 newTileUL.y() < oldTileUL.y() &&
278 newColUL.y() >= 0) { 282 newColUL.y() >= 0) {
279 for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { 283 for (int x = newTileUL.x(); x <= newTileDR.x(); x++) {
280 if (map.isBlocked(x, newTileUL.y())) { 284 if (map.isBlocked(x, newTileUL.y())) {