#include "koopatlas/player.h" daWMPlayer_c *daWMPlayer_c::instance; int daWMPlayer_c::onCreate() { this->modelHandler = new dPlayerModelHandler_c(0); // loadModel(u8 player_id, int powerup_id, int unk); 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(); pos = (Vec){0.0f,0.0f,3000.0f}; rot = (S16Vec){0,0,0}; scale = (Vec){1.6f,1.6f,1.6f}; current_param = 0; hasEffect = false; hasSound = false; step = false; effectName = ""; soundName = 0; timer = 0; return true; } int daWMPlayer_c::onDelete() { delete modelHandler; return true; } int daWMPlayer_c::onExecute() { this->modelHandler->update(); this->modelHandler->setSRT(this->pos, this->rot, this->scale); if (hasEffect) { effect.spawn(effectName, 0, &pos, &rot, &scale); } if (hasSound) { timer++; if (timer == 12) { if (step) { MapSoundPlayer(SoundRelatedClass, soundName, 1); step = false; } else { MapSoundPlayer(SoundRelatedClass, soundName+1, 1); step = true; } timer = 0; } if (timer > 12) { timer = 0; } } // #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(); 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() { void *buffer = AllocFromGameHeap1(sizeof(daWMPlayer_c)); daWMPlayer_c *c = new(buffer) daWMPlayer_c; instance = c; return c; }