Files
firestorm/Gameleap/code/mw4/Code/MW4/MechAnimationState.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

352 lines
8.9 KiB
C++

//===========================================================================//
// File: AnimationState.cpp
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 02/23/999 JSE Inital coding
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Microsoft Corp. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "MW4Headers.hpp"
#include "Vehicle.hpp"
#include "MechAnimationState.hpp"
#include "Mech.hpp"
//#############################################################################
//########################## AnimationStateEngine ########################
//#############################################################################
MechAnimationStateEngine::ClassData*
MechAnimationStateEngine::DefaultData = NULL;
const StateEngine::StateEntry
MechAnimationStateEngine::StateEntries[]=
{
STATE_ENTRY(MechAnimationStateEngine, Stand),
STATE_ENTRY(MechAnimationStateEngine, StandHalf),
STATE_ENTRY(MechAnimationStateEngine, Stand_1_8_th),
STATE_ENTRY(MechAnimationStateEngine, Stand_2_8_th),
STATE_ENTRY(MechAnimationStateEngine, Stand_3_8_th),
STATE_ENTRY(MechAnimationStateEngine, Stand_5_8_th),
STATE_ENTRY(MechAnimationStateEngine, Stand_6_8_th),
STATE_ENTRY(MechAnimationStateEngine, Stand_7_8_th),
STATE_ENTRY(MechAnimationStateEngine, Forward),
STATE_ENTRY(MechAnimationStateEngine, Backward),
STATE_ENTRY(MechAnimationStateEngine, TurnLeft),
STATE_ENTRY(MechAnimationStateEngine, TurnRight),
STATE_ENTRY(MechAnimationStateEngine, LGimpTurnRight),
STATE_ENTRY(MechAnimationStateEngine, RGimpTurnRight),
STATE_ENTRY(MechAnimationStateEngine, LGimpTurnLeft),
STATE_ENTRY(MechAnimationStateEngine, RGimpTurnLeft),
STATE_ENTRY(MechAnimationStateEngine, GimpStandLeft),
STATE_ENTRY(MechAnimationStateEngine, GimpForwardLeft),
STATE_ENTRY(MechAnimationStateEngine, GimpForwardRight),
STATE_ENTRY(MechAnimationStateEngine, GimpStandRight),
STATE_ENTRY(MechAnimationStateEngine, FallForward),
STATE_ENTRY(MechAnimationStateEngine, FallBackward),
STATE_ENTRY(MechAnimationStateEngine, FallLeft),
STATE_ENTRY(MechAnimationStateEngine, FallRight),
STATE_ENTRY(MechAnimationStateEngine, FallCataclysmic),
STATE_ENTRY(MechAnimationStateEngine, PowerDown),
STATE_ENTRY(MechAnimationStateEngine, PowerDownCataclysmic),
STATE_ENTRY(MechAnimationStateEngine, Crouch),
STATE_ENTRY(MechAnimationStateEngine, Fly)
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::InitializeClass()
{
Check_Object(AnimationStateEngine::DefaultData);
Verify(!DefaultData);
DefaultData =
new ClassData(
MechAnimationStateEngineClassID,
"MechAnimationStateEngine",
AnimationStateEngine::DefaultData,
ELEMENTS(StateEntries),
StateEntries,
NULL,
NULL
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MechAnimationStateEngine*
MechAnimationStateEngine::Make(Vehicle *vehicle, const FactoryRequest *request)
{
Check_Object(request);
Check_Object(vehicle);
gos_PushCurrentHeap(Heap);
MechAnimationStateEngine* engine = new MechAnimationStateEngine(vehicle, DefaultData, request);
gos_PopCurrentHeap();
return engine;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::Save(FactoryRequest *request)
{
Check_Object(this);
Check_Object(request);
AnimationStateEngine::Save(request);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::Reuse(const FactoryRequest *request)
{
Check_Object(this);
Check_Object(request);
AnimationStateEngine::Reuse(request);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MechAnimationStateEngine::MechAnimationStateEngine(
Vehicle *vehicle,
ClassData *class_data,
const FactoryRequest *request
):
AnimationStateEngine(vehicle, class_data, request)
{
//can't castobject as it is in the object constructor that this happens
m_Mech = (Mech*) vehicle;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MechAnimationStateEngine::~MechAnimationStateEngine()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
int
MechAnimationStateEngine::RequestState(
int new_state,
bool run_minimal,
void* data
)
{
Verify(new_state < StateCount);
if (m_Mech->GetFastTransition())
{
if (new_state == StandState)
{
if (GetState() == ForwardState || GetState() == BackwardState)
{
if (statePlaying.GetCurrent() != NULL)
{
Scalar state_percentage = statePlaying.GetCurrent()->GetStatePercentage();
if (state_percentage < 0.5)
{
if (state_percentage < 0.125)
{
new_state = Stand_1_8_thState;
//SPEW(("jerryeds", "1/8"));
}
else if (state_percentage < 0.250)
{
new_state = Stand_2_8_thState;
//SPEW(("jerryeds", "2/8"));
}
else if (state_percentage < 0.375)
{
new_state = Stand_3_8_thState;
//SPEW(("jerryeds", "3/8"));
}
else
{
new_state = StandHalfState;
//SPEW(("jerryeds", "4/8"));
}
}
else
{
if (state_percentage < 0.625)
{
new_state = Stand_5_8_thState;
//SPEW(("jerryeds", "5/8"));
}
else if (state_percentage < 0.750)
{
new_state = Stand_6_8_thState;
//SPEW(("jerryeds", "6/8"));
}
else if (state_percentage < 0.875)
{
new_state = Stand_7_8_thState;
//SPEW(("jerryeds", "7/8"));
}
else
{
new_state = StandState;
//SPEW(("jerryeds", "8/8"));
}
}
}
}
}
}
else
{
if (new_state == StandState)
{
if (GetState() == ForwardState || GetState() == BackwardState)
{
if (statePlaying.GetCurrent() != NULL)
{
if (statePlaying.GetCurrent()->GetStatePercentage() > 0.95f || statePlaying.GetCurrent()->GetStatePercentage() < 0.45f)
{
//SPEWALWAYS(("jerryeds", "HALF STOP : %f", statePlaying.GetCurrent()->GetStatePercentage()));
new_state = StandHalfState;
}
}
}
}
}
int return_state = AnimationStateEngine::RequestState(new_state, run_minimal, data);
Mech *mech = Cast_Object( Mech *, vehicleParent);
switch(GetTransitionState())
{
case FallForwardState:
case FallBackwardState:
case FallLeftState:
case FallRightState:
case FallCataclysmicState:
case PowerDownState:
case PowerDownCataclysmicState:
case CrouchState:
mech->FadeUndampened();
break;
default:
mech->FadeDampened();
break;
}
return return_state;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::RunStates(Stuff::Scalar time_slice, bool run_minimal)
{
//SPEW(("jerryeds", "-------------"));
if(statePlaying.GetCurrent() != NULL)
{
switch(GetState())
{
case StandHalfState:
case Stand_1_8_thState:
case Stand_2_8_thState:
case Stand_3_8_thState:
case Stand_5_8_thState:
case Stand_6_8_thState:
case Stand_7_8_thState:
AnimationStateEngine::RequestState(StandState);
break;
}
}
#if 0
MW4Animation::AnimHierarchyIteratorManager::doTransitionBlend = true;
if (IsTransitioning())
{
if (GetState() == FlyState)
{
// turn off transition
// we only want to turn this off during the first
// phase of the land...
if (quedCurrentState)
{
MW4Animation::AnimHierarchyIteratorManager::doTransitionBlend = false;
}
}
}
#endif
AnimationStateEngine::RunStates(time_slice, run_minimal);
}
//#############################################################################
//########################## AnimationStateEngine #######################
//#############################################################################
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MechAnimationStateEngine::TestClass()
{
Verify(IsDerivedFrom(DefaultData));
}