summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/apDebug.cpp7
-rw-r--r--src/flipblock.cpp33
2 files changed, 39 insertions, 1 deletions
diff --git a/src/apDebug.cpp b/src/apDebug.cpp
index f534e58..a352d4a 100644
--- a/src/apDebug.cpp
+++ b/src/apDebug.cpp
@@ -109,6 +109,13 @@ void APDebugDrawer::drawXlu() {
ActivePhysics *ap = ActivePhysics::globalListHead;
while (ap) {
+// if (ap->owner->name == PLAYER)
+// OSReport("Player has : DistToC=%f,%f DistToEdge=%f,%f Pos=%f,%f Scale=%f,%f\n",
+// ap->info.xDistToCenter, ap->info.yDistToCenter,
+// ap->info.xDistToEdge, ap->info.yDistToEdge,
+// ap->owner->pos.x, ap->owner->pos.y,
+// ap->owner->scale.x, ap->owner->scale.y);
+
u32 uptr = (u32)ap;
u8 r = (uptr>>16)&0xFF;
u8 g = (uptr>>8)&0xFF;
diff --git a/src/flipblock.cpp b/src/flipblock.cpp
index a9db0fa..64e6aed 100644
--- a/src/flipblock.cpp
+++ b/src/flipblock.cpp
@@ -17,6 +17,8 @@ public:
void blockWasHit(bool isDown);
+ bool playerOverlaps();
+
mHeapAllocator_c allocator;
nw4r::g3d::ResFile resFile;
m3d::mdl_c model;
@@ -171,7 +173,8 @@ void daEnFlipBlock_c::executeState_Flipping() {
if (rot.x == 0) {
flipsRemaining--;
if (flipsRemaining <= 0) {
- doStateChange(&StateID_Wait);
+ if (!playerOverlaps())
+ doStateChange(&StateID_Wait);
}
}
}
@@ -180,3 +183,31 @@ void daEnFlipBlock_c::endState_Flipping() {
physics.addToList();
}
+
+
+bool daEnFlipBlock_c::playerOverlaps() {
+ dStageActor_c *player = 0;
+
+ Vec myBL = {pos.x - 8.0f, pos.y - 8.0f, 0.0f};
+ Vec myTR = {pos.x + 8.0f, pos.y + 8.0f, 0.0f};
+
+ while ((player = (dStageActor_c*)fBase_c::search(PLAYER, player)) != 0) {
+ float centerX = player->pos.x + player->aPhysics.info.xDistToCenter;
+ float centerY = player->pos.y + player->aPhysics.info.yDistToCenter;
+
+ float left = centerX - player->aPhysics.info.xDistToEdge;
+ float right = centerX + player->aPhysics.info.xDistToEdge;
+
+ float top = centerY + player->aPhysics.info.yDistToEdge;
+ float bottom = centerY - player->aPhysics.info.yDistToEdge;
+
+ Vec playerBL = {left, bottom + 0.1f, 0.0f};
+ Vec playerTR = {right, top - 0.1f, 0.0f};
+
+ if (RectanglesOverlap(&playerBL, &playerTR, &myBL, &myTR))
+ return true;
+ }
+
+ return false;
+}
+