summaryrefslogtreecommitdiff
path: root/src/wm_player.cpp
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2011-03-12 23:17:12 +0100
committerTreeki <treeki@gmail.com>2011-03-12 23:17:12 +0100
commit7d4e4c0b34a613dd3c0220475ae4e448197522c1 (patch)
tree4f5cee367de3fdef4f9a7c84af59ffe76a2bb1c3 /src/wm_player.cpp
downloadkamek-7d4e4c0b34a613dd3c0220475ae4e448197522c1.tar.gz
kamek-7d4e4c0b34a613dd3c0220475ae4e448197522c1.zip
initial commit. now I can start playing with stuff!
Diffstat (limited to 'src/wm_player.cpp')
-rw-r--r--src/wm_player.cpp192
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;
+}
+