From 2aa6c935e2996c001079922863bcc4e62b6b0f61 Mon Sep 17 00:00:00 2001 From: Stephen Simpson Date: Fri, 14 Oct 2011 17:02:24 -0500 Subject: moved setNewCollisionRect to player.h so multiple actors can call it updated MG with attempted fixes for anmChr changed banm_c's _setUpdateRate and others to public for anmChr --- src/bossMegaGoomba.cpp | 26 ++++++++++++++++++++++---- src/player.cpp | 24 ++++++++++++++++++++++++ src/player.h | 1 + 3 files changed, 47 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index e836afb..da66d16 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -44,7 +44,10 @@ class daMegaGoomba_c : public dEn_c { float JumpTime; bool takeHit(char count); + + void bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2); + void dieFall_Begin(); void dieFall_Execute(); static daMegaGoomba_c *build(); @@ -167,8 +170,17 @@ void daMegaGoomba_c::_vf120(ActivePhysics *apThis, ActivePhysics *apOther) { OSR void daMegaGoomba_c::_vf110(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("_vf110:\n"); } void daMegaGoomba_c::_vf108(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("_vf108:\n"); } +void daMegaGoomba_c::bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2) { + nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr(name); + this->animationChr.bind(&this->bodyModel, anmChr, unk); + this->bodyModel.bindAnim(&this->animationChr, unk2); + this->animationChr.setUpdateRate(1.0); +} - +void daMegaGoomba_c::dieFall_Begin() { + this->bindAnimChr_and_setUpdateRate("split", 0, 0.0); + dSprite_c::dieFall_Begin(); +} //TODO make this real perty like void daMegaGoomba_c::dieFall_Execute() { @@ -215,6 +227,7 @@ void daMegaGoomba_c::setupBodyModel() { bool ret; nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); ret = this->animationChr.setup(mdl, anmChr, &this->allocator, 0); + this->bodyModel.bindAnim(&this->animationChr, 0.0); nw4r::g3d::ResAnmTexPat anmPat = this->resFile.GetResAnmTexPat("walk"); this->resTexPat = anmPat; @@ -508,9 +521,11 @@ void daMegaGoomba_c::beginState_Walk() { //SETUP WALK ANIMATION// nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); - this->animationChr.bind(&this->bodyModel, anmChr, 0); - this->bodyModel.bindAnim(&this->animationChr, 2.0); - /*this->animationChr._setUpdateRate(2.0); FIXME*/ + this->animationChr.bind(&this->bodyModel, anmChr, 1); + this->bodyModel.bindAnim(&this->animationChr, 0.0); + this->animationChr.setUpdateRate(1.0); + //OSReport("Current anmChr frame: %f\n", this->animationChr.getCurrentFrame()); + //OSReport("Is animation done? %d\n", this->animationChr.isAnimationDone()); this->bodyModel.bindAnim(&this->animationPat, 0.0); this->animationPat.setUpdateRateForEntry(1.0, 0); this->animationPat.setEntryByte34(0, 0); @@ -527,6 +542,9 @@ void daMegaGoomba_c::executeState_Walk() { Vec vctr; ConvertMatrixToTranslationVector(&mtx, &vctr); */ + this->animationChr.setCurrentFrame( this->animationChr.getCurrentFrame() + 1.0 ); + if(this->animationChr.getCurrentFrame() > 400.0) + this->animationChr.setCurrentFrame(1.0); //HandleAcceleration(this); //HandleXSpeed(this); diff --git a/src/player.cpp b/src/player.cpp index 75224b9..d70c19c 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -33,3 +33,27 @@ char NearestPlayer(dStageActor_c* actor) { return nearest; } +void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale) { + float amtX = scale->x; + float amtY = scale->y; + + ActivePhysics::Info info; + info.xDistToCenter = 0.0; + info.yDistToCenter = 3.0 * amtY; + info.xDistToEdge = 4.0 * amtX; + info.yDistToEdge = 4.0 * amtY; + + info.category1 = actor->aPhysics.info.category1; + info.category2 = actor->aPhysics.info.category2; + info.bitfield1 = actor->aPhysics.info.bitfield1; + info.bitfield2 = actor->aPhysics.info.bitfield2; + info.unkShort1C = actor->aPhysics.info.unkShort1C; + info.callback = actor->aPhysics.info.callback; + + //OSReport("Making new Physics Class and adding to the list\n"); + actor->aPhysics.removeFromList(); + actor->aPhysics.initWithStruct(actor, &info); + actor->aPhysics.addToList(); +} + + diff --git a/src/player.h b/src/player.h index d225083..4e036ae 100644 --- a/src/player.h +++ b/src/player.h @@ -6,6 +6,7 @@ extern "C" dStageActor_c* GetSpecificPlayerActor(int number); char NearestPlayer(dStageActor_c* actor); +void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale); #endif -- cgit v1.2.3