diff options
| author | Treeki <treeki@gmail.com> | 2012-09-24 00:53:20 +0200 | 
|---|---|---|
| committer | Treeki <treeki@gmail.com> | 2012-09-24 00:53:20 +0200 | 
| commit | ec8ad32b054e7680aec1536b36a02f6aaf154c0b (patch) | |
| tree | fc9f598151ac35d72c2aa70c6733de1766615cd1 /src | |
| parent | e739a0171f3efc5791ae32460a341d284efa36be (diff) | |
| download | kamek-ec8ad32b054e7680aec1536b36a02f6aaf154c0b.tar.gz kamek-ec8ad32b054e7680aec1536b36a02f6aaf154c0b.zip  | |
unfinished ActivePhysics debugging
Diffstat (limited to '')
| -rw-r--r-- | src/apDebug.cpp | 222 | 
1 files changed, 222 insertions, 0 deletions
diff --git a/src/apDebug.cpp b/src/apDebug.cpp new file mode 100644 index 0000000..f534e58 --- /dev/null +++ b/src/apDebug.cpp @@ -0,0 +1,222 @@ +#include <game.h> +#define GEKKO +#include "rvl/mtx.h" +#include "rvl/GXEnum.h" +#include "rvl/GXStruct.h" +#include "rvl/GXTransform.h" +#include "rvl/GXGeometry.h" +#include "rvl/GXDispList.h" +#include "rvl/GXLighting.h" +#include "rvl/GXTev.h" +#include "rvl/GXTexture.h" +#include "rvl/GXCull.h" +#include "rvl/GXPixel.h" +#include "rvl/GXBump.h" +#include "rvl/GXVert.h" +#include "rvl/vifuncs.h" + +class APDebugDrawer : public m3d::proc_c { +	public: +		APDebugDrawer(); + +		bool amISetUp; +		mHeapAllocator_c allocator; + +		void setMeUp(); + +		void drawMe(); + +		void drawOpa(); +		void drawXlu(); +}; + + +static APDebugDrawer defaultInstance; + +int APDebugDraw() { +	defaultInstance.drawMe(); +	return 1; +} + + +APDebugDrawer::APDebugDrawer() { +	amISetUp = false; +} + +void APDebugDrawer::setMeUp() { +	allocator.setup(GameHeaps[0], 0x20); +	setup(&allocator); +} + +void APDebugDrawer::drawMe() { +	if (!amISetUp) { +		setMeUp(); +		amISetUp = true; +	} + +	scheduleForDrawing(); +} + +void APDebugDrawer::drawOpa() { +} +void APDebugDrawer::drawXlu() { +	GXClearVtxDesc(); + +	GXSetVtxDesc(GX_VA_POS, GX_DIRECT); +	GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + +	GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); +	GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + +	GXSetNumIndStages(0); +	for (int i = 0; i < 0x10; i++) +		GXSetTevDirect((GXTevStageID)i); + +	GXSetNumChans(1); +	GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); +	GXSetChanAmbColor(GX_COLOR0A0, (GXColor){255,255,255,255}); +	GXSetChanMatColor(GX_COLOR0A0, (GXColor){255,255,255,255}); +	GXSetNumTexGens(0); + +	GXSetNumTevStages(1); +	GXSetNumIndStages(0); + +	GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); + +	GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); +	GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); +//	GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_RASC, GX_CC_ZERO); +//	GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); +//	GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_RASA, GX_CA_ZERO); +//	GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + +	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); + +	GXSetFog(GX_FOG_NONE, 0, 0, 0, 0, (GXColor){0,0,0,0}); +	GXSetFogRangeAdj(GX_FALSE, 0, 0); + +	GXSetCullMode(GX_CULL_NONE); + +	GXSetDither(GX_TRUE); +	GXSetLineWidth(18, GX_TO_ZERO); + +	GXSetTevColor(GX_TEVREG0, (GXColor){255,255,255,255}); +	GXSetTevColor(GX_TEVREG1, (GXColor){0,0,0,255}); + +	ActivePhysics *ap = ActivePhysics::globalListHead; + +	while (ap) { +		u32 uptr = (u32)ap; +		u8 r = (uptr>>16)&0xFF; +		u8 g = (uptr>>8)&0xFF; +		u8 b = uptr&0xFF; +		u8 a = 0xFF; + +		GXBegin(GX_LINES, GX_VTXFMT0, 10); + +		float centreX = ap->owner->pos.x + ap->info.xDistToCenter; +		float centreY = ap->owner->pos.y + ap->info.yDistToCenter; +		float edgeDistX = ap->info.xDistToEdge; +		float edgeDistY = ap->info.yDistToEdge; + +		float tlX = centreX - edgeDistX, tlY = centreY + edgeDistY; +		float trX = centreX + edgeDistX, trY = centreY + edgeDistY; + +		float blX = centreX - edgeDistX, blY = centreY - edgeDistY; +		float brX = centreX + edgeDistX, brY = centreY - edgeDistY; + +		// Top +		GXPosition3f32(tlX, tlY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Left +		GXPosition3f32(tlX, tlY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Right +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(brX, brY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Bottom +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(brX, brY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Diagonal +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		GXEnd(); + +		ap = ap->listPrev; +	} + +	Physics *p = Physics::globalListHead; + +	while (p) { +		u32 uptr = (u32)p; +		u8 r = (uptr>>16)&0xFF; +		u8 g = (uptr>>8)&0xFF; +		u8 b = uptr&0xFF; +		u8 a = 0xFF; + +		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; + +		// Top +		GXPosition3f32(tlX, tlY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Left +		GXPosition3f32(tlX, tlY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Right +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(brX, brY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Bottom +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(brX, brY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		// Diagonal +		GXPosition3f32(trX, trY, 8000.0f); +		GXColor4u8(r,g,b,a); +		GXPosition3f32(blX, blY, 8000.0f); +		GXColor4u8(r,g,b,a); + +		GXEnd(); + +		p = p->next; +	} +}  | 
