change ifdef instead of copying function blocks

This commit is contained in:
Jeffrey Crowell
2026-02-14 00:03:10 -08:00
parent 5d6aa01e6e
commit 5d359236e1
3 changed files with 1 additions and 567 deletions
-1
View File
@@ -1351,7 +1351,6 @@ set(DUSK_FILES
src/dusk/globals.cpp
src/dusk/mtx.cpp
src/dusk/J3DTransforms_C.cpp
src/dusk/m_Do_ext_dusk.cpp
)
source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES})
-565
View File
@@ -1,565 +0,0 @@
// XXX Ripped these from a DEBUG block, rather than changing defines.
/**
* m_Do_ext.cpp
* Model, Animation, and Heap Functions
*/
#include "d/dolzel.h" // IWYU pragma: keep
#include <dolphin/gf/GFPixel.h>
#include <dolphin/gx.h>
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h"
#include "JSystem/JKernel/JKRAssertHeap.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JUtility/JUTCacheFont.h"
#include "JSystem/JUtility/JUTResFont.h"
#include "Z2AudioLib/Z2Creature.h"
#include "d/d_com_inf_game.h"
#include "global.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_main.h"
#include "m_Do/m_Do_mtx.h"
#include <cstdio>
mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) {
cXyz* pnt_array = mPoints;
for (int i = 0; i < 8; i++) {
*(pnt_array)++ = *(i_points)++;
}
DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8);
mColor = i_color;
}
void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) {
GXSetArray(GX_VA_POS, pos, sizeof(cXyz));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP,
GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, color);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_BACK);
GXSetClipMode(GX_CLIP_ENABLE);
GXLoadPosMtxImm(mtx, 0);
GXSetCurrentMtx(0);
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 14);
GXPosition1x8(4);
GXPosition1x8(6);
GXPosition1x8(5);
GXPosition1x8(7);
GXPosition1x8(3);
GXPosition1x8(6);
GXPosition1x8(2);
GXPosition1x8(4);
GXPosition1x8(0);
GXPosition1x8(5);
GXPosition1x8(1);
GXPosition1x8(3);
GXPosition1x8(0);
GXPosition1x8(2);
GXEnd();
}
void mDoExt_cube8pPacket::draw() {
drawCube(j3dSys.getViewMtx(), mPoints, mColor);
}
mDoExt_cubePacket::mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) {
mPosition = i_position;
mSize = i_size;
mAngle = i_angle;
mColor = i_color;
}
void mDoExt_cubePacket::draw() {
static cXyz l_pos[8] = {
cXyz(-1.0f, 1.0f, -1.0f), cXyz(1.0f, 1.0f, -1.0f), cXyz(-1.0f, 1.0f, 1.0f),
cXyz(1.0f, 1.0f, 1.0f), cXyz(-1.0f, -1.0f, -1.0f), cXyz(1.0f, -1.0f, -1.0f),
cXyz(-1.0f, -1.0f, 1.0f), cXyz(1.0f, -1.0f, 1.0f),
};
mDoMtx_stack_c::transS(mPosition.x, mPosition.y, mPosition.z);
mDoMtx_stack_c::XYZrotM(mAngle.x, mAngle.y, mAngle.z);
mDoMtx_stack_c::scaleM(mSize.x, mSize.y, mSize.z);
mDoMtx_stack_c::revConcat(j3dSys.getViewMtx());
drawCube(mDoMtx_stack_c::get(), l_pos, mColor);
}
mDoExt_quadPacket::mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) {
cXyz* pnt_array = mPoints;
for (int i = 0; i < 4; i++) {
*(pnt_array)++ = *(i_points)++;
}
DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4);
mColor = i_color;
mClipZ = i_clipZ;
}
void mDoExt_quadPacket::draw() {
GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP,
GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_BACK);
GXSetClipMode(GX_CLIP_ENABLE);
GXLoadPosMtxImm(j3dSys.getViewMtx(), 0);
GXSetCurrentMtx(0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition1x8(0);
GXPosition1x8(1);
GXPosition1x8(2);
GXPosition1x8(3);
GXEnd();
}
mDoExt_trianglePacket::mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) {
cXyz* pnt_array = mPoints;
for (int i = 0; i < 3; i++) {
*(pnt_array)++ = *(i_points)++;
}
DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3);
mColor = i_color;
mClipZ = i_clipZ;
}
void mDoExt_trianglePacket::draw() {
j3dSys.reinitGX();
GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXLoadPosMtxImm(j3dSys.getViewMtx(), 0);
GXSetCurrentMtx(0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetZCompLoc(GX_ENABLE);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetFogRangeAdj(GX_DISABLE, 0, NULL);
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_ENABLE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetNumIndStages(0);
GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
GXPosition1x8(0);
GXPosition1x8(1);
GXPosition1x8(2);
GXEnd();
J3DShape::resetVcdVatCache();
}
mDoExt_linePacket::mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) {
mStart = i_start;
mEnd = i_end;
mColor = i_color;
mClipZ = i_clipZ;
mWidth = i_width;
}
void mDoExt_linePacket::draw() {
j3dSys.reinitGX();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXLoadPosMtxImm(j3dSys.getViewMtx(), 0);
GXSetCurrentMtx(0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetZCompLoc(GX_ENABLE);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetFogRangeAdj(GX_DISABLE, 0, NULL);
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_ENABLE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetNumIndStages(0);
GXSetLineWidth(mWidth, GX_TO_ZERO);
GXBegin(GX_LINES, GX_VTXFMT0, 2);
GXPosition3f32(mStart.x, mStart.y, mStart.z);
GXPosition3f32(mEnd.x, mEnd.y, mEnd.z);
GXEnd();
J3DShape::resetVcdVatCache();
}
mDoExt_ArrowPacket::mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) {
mStart = i_position;
mEnd = param_1;
mColor = i_color;
mClipZ = i_clipZ;
mLineWidth = i_lineWidth;
}
void mDoExt_ArrowPacket::draw() {
Mtx sp28;
cXyz sp18;
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_NONE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetLineWidth(mLineWidth, GX_TO_ZERO);
sp18 = mEnd - mStart;
MtxTrans(mStart.x, mStart.y, mStart.z, 0);
cMtx_YrotM(*calc_mtx, sp18.atan2sX_Z());
cMtx_XrotM(*calc_mtx, cM_atan2s(JMAFastSqrt(SQUARE(sp18.x) + SQUARE(sp18.z)), sp18.y));
cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, sp28);
GXLoadPosMtxImm(sp28, 0);
GXSetCurrentMtx(0);
GXBegin(GX_LINES, GX_VTXFMT0, 2);
GXPosition3f32(0.0f, 0.0f, 0.0f);
GXPosition3f32(0.0f, sp18.abs(), 0.0f);
GXEnd();
f32 var_f29 = sp18.abs();
f32 var_f31 = var_f29 * 0.1f;
f32 var_f30 = var_f29 * 0.8f;
GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6);
GXPosition3f32(0.0f, var_f29, 0.0f);
GXPosition3f32(0.0f, var_f30, var_f31);
GXPosition3f32(var_f31, var_f30, 0.0f);
GXPosition3f32(0.0f, var_f30, -var_f31);
GXPosition3f32(-var_f31, var_f30, 0.0f);
GXPosition3f32(0.0f, var_f30, var_f31);
GXEnd();
}
mDoExt_pointPacket::mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) {
mPosition = i_position;
mColor = i_color;
mClipZ = i_clipZ;
mLineWidth = i_lineWidth;
}
void mDoExt_pointPacket::draw() {
j3dSys.reinitGX();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_NONE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetPointSize(mLineWidth, GX_TO_ZERO);
GXLoadPosMtxImm(j3dSys.getViewMtx(), 0);
GXSetCurrentMtx(0);
GXBegin(GX_POINTS, GX_VTXFMT0, 1);
GXPosition3f32(mPosition.x, mPosition.y, mPosition.z);
GXEnd();
j3dSys.reinitGX();
J3DShape::resetVcdVatCache();
}
mDoExt_circlePacket::mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) {
mPosition = i_position;
mRadius = i_radius;
mColor = i_color;
mClipZ = i_clipZ;
mLineWidth = i_lineWidth;
}
void mDoExt_circlePacket::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_NONE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetLineWidth(mLineWidth, GX_TO_ZERO);
GXLoadPosMtxImm(j3dSys.getViewMtx(), 0);
GXSetCurrentMtx(0);
cXyz sp38;
cXyz sp44;
int numEdges = 36;
sp38.y = sp44.y = mPosition.y;
GXBegin(GX_LINES, GX_VTXFMT0, numEdges * 2);
for (int i = 0; i < numEdges; i++) {
sp38.x = cM_fcos((i * 6.2831855f) / numEdges) * mRadius;
sp38.z = cM_fsin((i * 6.2831855f) / numEdges) * mRadius;
sp44.x = cM_fcos(((i + 1) * 6.2831855f) / numEdges) * mRadius;
sp44.z = cM_fsin(((i + 1) * 6.2831855f) / numEdges) * mRadius;
sp38.x += mPosition.x;
sp38.z += mPosition.z;
sp44.x += mPosition.x;
sp44.z += mPosition.z;
GXPosition3f32(sp38.x, sp38.y, sp38.z);
GXPosition3f32(sp44.x, sp44.y, sp44.z);
}
GXEnd();
}
mDoExt_spherePacket::mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) {
mPosition = i_position;
mSize = i_size;
mColor = i_color;
mClipZ = i_clipZ;
}
void mDoExt_spherePacket::draw() {
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_BACK);
GXSetClipMode(GX_CLIP_ENABLE);
mDoMtx_stack_c::copy(j3dSys.getViewMtx());
mDoMtx_stack_c::transM(mPosition.x, mPosition.y, mPosition.z);
mDoMtx_stack_c::scaleM(mSize, mSize, mSize);
GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0);
mDoMtx_stack_c::inverseTranspose();
GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0);
GXSetCurrentMtx(0);
GXDrawSphere(8, 8);
}
mDoExt_cylinderPacket::mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) {
mPosition = i_position;
mRadius = i_radius;
mHeight = i_height;
mColor = i_color;
mClipZ = i_clipZ;
}
void mDoExt_cylinderPacket::draw() {
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, 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_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_BACK);
GXSetClipMode(GX_CLIP_ENABLE);
f32 var_f31 = mHeight * 0.5f;
mDoMtx_stack_c::copy(j3dSys.getViewMtx());
mDoMtx_stack_c::transM(mPosition.x, mPosition.y + var_f31, mPosition.z);
mDoMtx_stack_c::scaleM(mRadius, var_f31, mRadius);
mDoMtx_stack_c::XrotM(0x4000);
GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0);
mDoMtx_stack_c::inverseTranspose();
GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0);
GXSetCurrentMtx(0);
GXDrawCylinder(8);
}
mDoExt_cylinderMPacket::mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) {
cMtx_copy(i_mtx, mMatrix);
mColor = i_color;
mClipZ = i_clipZ;
}
void mDoExt_cylinderMPacket::draw() {
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, mColor);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV);
if (mClipZ) {
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
} else {
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
}
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetCullMode(GX_CULL_BACK);
GXSetClipMode(GX_CLIP_ENABLE);
cMtx_concat(j3dSys.getViewMtx(), mMatrix, mMatrix);
GXLoadPosMtxImm(mMatrix, 0);
cMtx_inverseTranspose(mMatrix, mMatrix);
GXLoadNrmMtxImm(mMatrix, 0);
GXSetCurrentMtx(0);
GXDrawCylinder(8);
}
+1 -1
View File
@@ -3006,7 +3006,7 @@ void mDoExt_3DlineMatSortPacket::draw() {
J3DShape::resetVcdVatCache();
}
#if DEBUG
#if DEBUG || !__MWERKS__
mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) {
cXyz* pnt_array = mPoints;