summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2013-02-22 00:18:04 +0100
committerTreeki <treeki@gmail.com>2013-02-22 00:18:04 +0100
commitbe4cb117959484a37de3613a484988445c9a3d86 (patch)
treecb284b70f8b5a811a7c2e4c011390df515905a31 /src
parent49bd90a8c871994fb66c58aef841b4f8a0b8f732 (diff)
downloadkamek-be4cb117959484a37de3613a484988445c9a3d86.tar.gz
kamek-be4cb117959484a37de3613a484988445c9a3d86.zip
update collision debug to support BasicCollider and rotated Physics
Diffstat (limited to 'src')
-rw-r--r--src/apDebug.cpp95
1 files changed, 62 insertions, 33 deletions
diff --git a/src/apDebug.cpp b/src/apDebug.cpp
index bcaf33f..01669bf 100644
--- a/src/apDebug.cpp
+++ b/src/apDebug.cpp
@@ -32,7 +32,7 @@ class APDebugDrawer : public m3d::proc_c {
static APDebugDrawer defaultInstance;
-static bool enableDebugMode = false;
+static bool enableDebugMode = true;
int APDebugDraw() {
if (enableDebugMode)
@@ -60,6 +60,7 @@ void APDebugDrawer::drawMe() {
}
void APDebugDrawer::drawOpa() {
+ drawXlu();
}
void APDebugDrawer::drawXlu() {
GXClearVtxDesc();
@@ -94,8 +95,8 @@ void APDebugDrawer::drawXlu() {
GXSetZCompLoc(GX_FALSE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
- GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
- GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_TRUE, GX_ALWAYS, GX_FALSE);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetFog(GX_FOG_NONE, 0, 0, 0, 0, (GXColor){0,0,0,0});
GXSetFogRangeAdj(GX_FALSE, 0, 0);
@@ -108,6 +109,12 @@ void APDebugDrawer::drawXlu() {
GXSetTevColor(GX_TEVREG0, (GXColor){255,255,255,255});
GXSetTevColor(GX_TEVREG1, (GXColor){0,0,0,255});
+ nw4r::g3d::Camera cam(GetCameraByID(GetCurrentCameraID()));
+ Mtx matrix;
+ cam.GetCameraMtx(&matrix);
+ GXLoadPosMtxImm(matrix, 0);
+ GXSetCurrentMtx(0);
+
ActivePhysics *ap = ActivePhysics::globalListHead;
while (ap) {
@@ -153,33 +160,33 @@ void APDebugDrawer::drawXlu() {
}
// Top
- GXPosition3f32(tlX, tlY, 8000.0f);
+ GXPosition3f32(tlX, tlY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
// Left
- GXPosition3f32(tlX, tlY, 8000.0f);
+ GXPosition3f32(tlX, tlY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
// Right
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(brX, brY, 8000.0f);
+ GXPosition3f32(brX, brY, 9000.0f);
GXColor4u8(r,g,b,a);
// Bottom
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(brX, brY, 8000.0f);
+ GXPosition3f32(brX, brY, 9000.0f);
GXColor4u8(r,g,b,a);
// Diagonal
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
GXEnd();
@@ -198,45 +205,43 @@ void APDebugDrawer::drawXlu() {
GXBegin(GX_LINES, GX_VTXFMT0, 10);
- float centreX = p->owner->pos.x;
- float centreY = p->owner->pos.y;
- float edgeDistX = p->_88;
- float edgeDistY = p->_8C;
-
- float tlX = centreX + p->x, tlY = centreY + p->y;
- float trX = centreX + p->_88, trY = centreY + p->y;
-
- float blX = centreX + p->x, blY = centreY + p->_8C;
- float brX = centreX + p->_88, brY = centreY + p->_8C;
+ float tlX = p->unkArray[0].x;
+ float tlY = p->unkArray[0].y;
+ float trX = p->unkArray[3].x;
+ float trY = p->unkArray[3].y;
+ float blX = p->unkArray[1].x;
+ float blY = p->unkArray[1].y;
+ float brX = p->unkArray[2].x;
+ float brY = p->unkArray[2].y;
// Top
- GXPosition3f32(tlX, tlY, 8000.0f);
+ GXPosition3f32(tlX, tlY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
// Left
- GXPosition3f32(tlX, tlY, 8000.0f);
+ GXPosition3f32(tlX, tlY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
// Right
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(brX, brY, 8000.0f);
+ GXPosition3f32(brX, brY, 9000.0f);
GXColor4u8(r,g,b,a);
// Bottom
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(brX, brY, 8000.0f);
+ GXPosition3f32(brX, brY, 9000.0f);
GXColor4u8(r,g,b,a);
// Diagonal
- GXPosition3f32(trX, trY, 8000.0f);
+ GXPosition3f32(trX, trY, 9000.0f);
GXColor4u8(r,g,b,a);
- GXPosition3f32(blX, blY, 8000.0f);
+ GXPosition3f32(blX, blY, 9000.0f);
GXColor4u8(r,g,b,a);
GXEnd();
@@ -245,6 +250,30 @@ void APDebugDrawer::drawXlu() {
}
+ // Basic Colliders
+ BasicCollider *bc = BasicCollider::globalListHead;
+ while (bc) {
+ u32 uptr = (u32)bc;
+ u8 r = (uptr>>16)&0xFF;
+ u8 g = (uptr>>8)&0xFF;
+ u8 b = uptr&0xFF;
+ u8 a = 0xFF;
+
+ switch (bc->type) {
+ case 0: case 2:
+ GXBegin(GX_LINES, GX_VTXFMT0, 2);
+ GXPosition3f32(bc->leftX, bc->leftY, 9000.0f);
+ GXColor4u8(r,g,b,a);
+ GXPosition3f32(bc->rightX, bc->rightY, 9000.0f);
+ GXColor4u8(r,g,b,a);
+ GXEnd();
+ break;
+ }
+
+ bc = bc->next;
+ }
+
+
// Now, the hardest one.. CollisionMgr_c!
fBase_c *fb = 0;
while ((fb = fBase_c::searchByBaseType(2, fb))) {