diff options
Diffstat (limited to 'src/wm_player.cpp')
-rw-r--r-- | src/wm_player.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/wm_player.cpp b/src/wm_player.cpp new file mode 100644 index 0000000..39dc0a5 --- /dev/null +++ b/src/wm_player.cpp @@ -0,0 +1,192 @@ +#include "worldmap.h" + +daWMPlayer_c *daWMPlayer_c::instance; + +int daWMPlayer_c::onCreate() { + OSReport("* dWMPlayer_c created\n"); + + OSReport("Init handler...\n"); + this->modelHandler = new dPlayerModelHandler_c(0); + this->modelHandler->loadModel(0, 3, 2); + this->modelHandler->mdlClass->startAnimation(0, 1.2, 10.0, 0.0); + this->modelHandler->setSRT((Vec){0.0,100.0,-100.0}, (S16Vec){0,0,0}, (Vec){2.0,2.0,2.0}); + this->modelHandler->draw(); + OSReport("Init done!\n"); + + pos = (Vec){0.0f,0.0f,0.0f}; + rot = (S16Vec){0,0,0}; + scale = (Vec){1.5f,1.5f,1.5f}; + + current_param = 0; + + /*//#define BRRES_NAME "fruits_kusa_gake" + //#define MODEL_NAME "fruits_kusa_gake_S" + + #define BRRES_NAME "bgB_4502" + #define MODEL_NAME BRRES_NAME + + OSReport("Loading nw4r model\n"); + //LoadFile(&this->nw4rMdlFH, "/Object/" BRRES_NAME ".arc"); + LoadFile(&this->nw4rMdlFH, "/Object/CrapMap.arc"); + OSReport("Loaded. Reading arc\n"); + ARCHandle arc; + ARCFileInfo keyinfo; + ARCInitHandle(this->nw4rMdlFH.filePtr, &arc); + //bool arcres = ARCOpen(&arc, "g3d/" BRRES_NAME ".brres", &keyinfo); + bool arcres = ARCOpen(&arc, "g3d/model.brres", &keyinfo); + OSReport(arcres ? "Success\n" : "Fail\n"); + + OSReport("Getting nw4r model\n"); + //void *brres = DVD_GetFile(GetDVDClass2(), "fruits_kusa_gake", "g3d/fruits_kusa_gake.brres"); + + OSReport("Done. Constructing model\n"); + void *brres = ARCGetStartAddrInMem(&keyinfo); + OSReport("brres @ %p\n", brres); + nw4r::g3d::ResFile resfile(brres); + OSReport(resfile.CheckRevision() ? "Success\n" : "Fail\n"); + resfile.Init(); + OSReport(resfile.Bind(resfile) ? "Success\n" : "Fail\n"); + //void *mdl = resfile.GetResMdl(MODEL_NAME); + void *mdl = resfile.GetResMdl("CrapMap"); + OSReport("MDL @ %p, %d\n", mdl, 1099); + //this->nw4rMdlTest = nw4r::g3d::ConstructScnMdl(mdl, 0x20, 1); + //this->nw4rMdlTest = nw4r::g3d::ConstructScnMdlSimple(mdl, 1); + OSReport(this->allocator.link(-1, GameHeaps[0], 0, 0x20) ? "Success\n" : "Fail\n"); + OSReport(this->nw4rMdl.setup(&mdl, &this->allocator, 0, 1, 0) ? "Success\n" : "Fail\n"); + //this->nw4rMdl.sub_80064BF0(); + //this->nw4rMdl.oneSetupType(); + OSReport("Unlink returned %d\n", this->allocator.unlink()); + OSReport("Done!\n"); + + Mtx asdf; + MTXIdentity(asdf); + this->nw4rMdl.setDrawMatrix(asdf); + + ARCClose(&keyinfo);*/ + + return true; +} + +int daWMPlayer_c::onDelete() { + delete modelHandler; + OSReport("* dWMPlayer_c deleted\n"); + + return true; +} + + +int daWMPlayer_c::onExecute() { + this->modelHandler->update(); + this->modelHandler->setSRT(this->pos, this->rot, this->scale); + +#ifdef MARIO_OPTIONS + // Before we leave, do the debug movement stuff + int heldButtons = Remocon_GetButtons(GetActiveRemocon()); + int nowPressed = Remocon_GetPressed(GetActiveRemocon()); + char buf[100]; + bool updated = false; + + if (nowPressed & WPAD_LEFT) { + current_param--; + updated = true; + } + + if (nowPressed & WPAD_RIGHT) { + current_param++; + updated = true; + } + + if (current_param < 0) + current_param = 8; + + if (current_param > 8) + current_param = 0; + + float pos_mod = 0.0f; + short rot_mod = 0.0f; + float scale_mod = 0.0f; + if (nowPressed & WPAD_ONE) { + pos_mod -= 5.0f; + rot_mod -= 0x1000; + scale_mod -= 0.1f; + updated = true; + } else if (nowPressed & WPAD_TWO) { + pos_mod += 5.0f; + rot_mod += 0x1000; + scale_mod += 0.1f; + updated = true; + } + + if (!updated) return true; + + if (current_param == 0) { + pos.x += pos_mod; + sprintf(buf, "X position: %f", pos.x); + } else if (current_param == 1) { + pos.y += pos_mod; + sprintf(buf, "Y position: %f", pos.y); + } else if (current_param == 2) { + pos.z += pos_mod; + sprintf(buf, "Z position: %f", pos.z); + } else if (current_param == 3) { + rot.x += rot_mod; + sprintf(buf, "X rotation: 0x%04x", rot.x); + } else if (current_param == 4) { + rot.y += rot_mod; + sprintf(buf, "Y rotation: 0x%04x", rot.y); + } else if (current_param == 5) { + rot.z += rot_mod; + sprintf(buf, "Z rotation: 0x%04x", rot.z); + } else if (current_param == 6) { + scale.x += scale_mod; + sprintf(buf, "X scale: %f", scale.x); + } else if (current_param == 7) { + scale.y += scale_mod; + sprintf(buf, "Y scale: %f", scale.y); + } else if (current_param == 8) { + scale.z += scale_mod; + sprintf(buf, "Z scale: %f", scale.z); + } + + dScNewerWorldMap_c::instance->SetTitle(buf); +#endif + + return true; +} + +int daWMPlayer_c::onDraw() { + this->modelHandler->draw(); + + //OSReport("Adding to scene\n"); + //this->nw4rMdl.scheduleForDrawing(); + //OSReport("done\n"); + + return true; +} + + +void daWMPlayer_c::startAnimation(int id, float frame, float unk, float updateRate) { + if (id == currentAnim && frame == currentFrame && unk == currentUnk && updateRate == currentUpdateRate) + return; + + currentAnim = id; + currentFrame = frame; + currentUnk = unk; + currentUpdateRate = updateRate; + this->modelHandler->mdlClass->startAnimation(id, frame, unk, updateRate); +} + + + +daWMPlayer_c *daWMPlayer_c::build() { + OSReport("Creating WMPlayer\n"); + + void *buffer = AllocFromGameHeap1(sizeof(daWMPlayer_c)); + daWMPlayer_c *c = new(buffer) daWMPlayer_c; + + OSReport("Created WMPlayer @ %p\n", c); + + instance = c; + return c; +} + |