summaryrefslogtreecommitdiff
path: root/src/koopatlas/subplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/koopatlas/subplayer.cpp')
-rw-r--r--src/koopatlas/subplayer.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/koopatlas/subplayer.cpp b/src/koopatlas/subplayer.cpp
new file mode 100644
index 0000000..8f70299
--- /dev/null
+++ b/src/koopatlas/subplayer.cpp
@@ -0,0 +1,116 @@
+#include "koopatlas/player.h"
+#include "koopatlas/subplayer.h"
+
+daWMSubPlayer_c *daWMSubPlayer_c::instance;
+
+int daWMSubPlayer_c::onCreate() {
+
+ this->modelHandler = new dPlayerModelHandler_c(settings);
+ // loadModel(u8 player_id, int powerup_id, int unk);
+ this->modelHandler->loadModel(settings, 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();
+
+ hammerSuit.setup(this->modelHandler);
+
+ pos = (Vec){0.0f,0.0f,3000.0f};
+ rot = (S16Vec){0x1800,0,0};
+ scale = (Vec){1.6f,1.6f,1.6f};
+
+ step = false;
+ timer = 0;
+
+ return true;
+}
+
+int daWMSubPlayer_c::onDelete() {
+ delete modelHandler;
+
+ return true;
+}
+
+
+void daWMSubPlayer_c::update(daWMPlayer_c::state_s *st) {
+ this->modelHandler->update();
+
+ startAnimation(st->anim, st->animFrame, st->animUnk, st->animUpdateRate);
+
+ pos = st->pos;
+ scale = st->scale;
+ rot = st->rot;
+
+ mMtx myMatrix;
+ myMatrix.scale(scale.x, scale.y, scale.z);
+ myMatrix.applyTranslation(pos.x, pos.y + st->jumpOffset, pos.z);
+ myMatrix.applyRotationX(&rot.x);
+ myMatrix.applyRotationY(&rot.y);
+ // Z is unused for now
+ modelHandler->setMatrix(myMatrix);
+
+ if (st->repeatedEffect) {
+ Vec effPos = {pos.x, pos.y, 3300.0f};
+ effect.spawn(st->repeatedEffect, 0, &effPos, &rot, &scale);
+ }
+
+ if (st->repeatedSound) {
+ timer++;
+
+ if (timer == 12) {
+ if (step) { MapSoundPlayer(SoundRelatedClass, st->repeatedSound, 1); step = false; }
+ else { MapSoundPlayer(SoundRelatedClass, st->repeatedSound+1, 1); step = true; }
+ timer = 0;
+ }
+
+ if (timer > 12) { timer = 0; }
+ }
+
+ if (st->nowEffect) {
+ SpawnEffect(st->nowEffect, 0, &pos, 0, &scale);
+ }
+
+ if (st->nowSound != SE_NULL) {
+ nw4r::snd::SoundHandle something;
+ PlaySoundWithFunctionB4(SoundRelatedClass, &something, st->nowSound, 1);
+
+ if (st->nowSound == SE_PLY_JUMP) {
+ nw4r::snd::SoundHandle something2;
+ PlaySoundWithFunctionB4(SoundRelatedClass, &something2, SE_VOC_MA_CS_JUMP, 1);
+ }
+ }
+}
+
+int daWMSubPlayer_c::onDraw() {
+ if (!visible)
+ return true;
+
+ this->modelHandler->draw();
+ hammerSuit.draw();
+
+ return true;
+}
+
+
+void daWMSubPlayer_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);
+}
+
+
+
+daWMSubPlayer_c *daWMSubPlayer_c::build() {
+
+ void *buffer = AllocFromGameHeap1(sizeof(daWMSubPlayer_c));
+ daWMSubPlayer_c *c = new(buffer) daWMSubPlayer_c;
+
+
+ instance = c;
+ return c;
+}
+