1#include "Game/MapObj/BigBubbleDrawer.hpp"
3BigBubbleDrawer::BigBubbleDrawer() {
4 mBubbleTexture =
nullptr;
5 mRainbowTexture =
nullptr;
7 mBubbleTexture =
new JUTTexture(MR::loadTexFromArc(
"BigBubble.arc",
"Bubble.bti"), 0);
8 mRainbowTexture =
new JUTTexture(MR::loadTexFromArc(
"BigBubble.arc",
"Rainbow.bti"), 0);
11void BigBubbleDrawer::setUpDraw()
const {
15void BigBubbleDrawer::setUpVertexFormat()
const {
16 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
17 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_POS_XY, GX_F32, 0);
18 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0);
20 GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
21 GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
22 GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
25void BigBubbleDrawer::setUpTexture()
const {
27 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1E, 0, 0x7D);
28 GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_NRM, 0x21, 0, 0x7D);
31 GXLoadTexMtxImm(mtx.toMtxPtr(), 0x1E, GX_MTX2x4);
33 const MtxPtr cameraMtx = MR::getCameraViewMtx();
34 mtx.setInline(cameraMtx);
36 mtx.mMtx[0][3] = sEnvMatTrans.x;
37 mtx.mMtx[1][3] = sEnvMatTrans.y;
38 mtx.mMtx[2][3] = sEnvMatTrans.z;
39 GXLoadTexMtxImm(mtx.toMtxPtr(), 0x21, GX_MTX3x4);
40 mRainbowTexture->load(GX_TEXMAP0);
41 mBubbleTexture->load(GX_TEXMAP1);
44void BigBubbleDrawer::setUpTevStage()
const {
46 GXSetTevColor(GX_TEVREG0, (GXColor&)sTevColor0);
47 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
48 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
49 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
50 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
51 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
52 GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
53 GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXA, GX_CC_CPREV);
54 GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
55 GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
56 GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
57 GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
58 GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_CPREV, GX_CC_C1, GX_CC_A1, GX_CC_ZERO);
59 GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
60 GXSetTevKAlphaSel(GX_TEVSTAGE2, GX_TEV_KASEL_7_8);
61 GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_APREV, GX_CA_KONST, GX_CA_A1, GX_CA_ZERO);
62 GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
65void BigBubbleDrawer::setUpPixelFormat()
const {
66 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
67 GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
71 GXSetZMode(1, GX_LEQUAL, 0);
73 GXSetCullMode(GX_CULL_BACK);
74 GXSetClipMode(GX_CLIP_ENABLE);
77void BigBubbleDrawer::setUpMaterial()
const {
80 GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
81 GXSetChanCtrl(GX_COLOR1A1, 0, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
85 GXLoadPosMtxImm(MR::getCameraViewMtx(), 0);
88 PSMTXIdentity(normalMtx);
89 GXLoadNrmMtxImm(normalMtx, 0);
91 MR::loadProjectionMtx();