Script:Files:script/player/player state machine husky.script
From Mod Wiki
/*********************************************************************** This script contains any player state machine specific code for the husky. ***********************************************************************/ #define HUSKY_SPEED_FAST 384.f #define HUSKY_STATE_IDLE 0 #define HUSKY_STATE_IDLE_FAST 1 #define HUSKY_STATE_LEAN_LEFT 2 #define HUSKY_STATE_LEAN_RIGHT 3 #define HUSKY_STATE_LEAN_LEFT_FAST 4 #define HUSKY_STATE_LEAN_RIGHT_FAST 5 object player { void Torso_VehicleHusky(); void Legs_VehicleHusky(); void Torso_VehicleHusky_Idle(); void Torso_VehicleHusky_IdleFast(); void Torso_VehicleHusky_LeanLeft(); void Torso_VehicleHusky_LeanRight(); void Torso_VehicleHusky_LeanLeftFast(); void Torso_VehicleHusky_LeanRightFast(); void Legs_VehicleHusky_Idle(); void Legs_VehicleHusky_IdleFast(); void Legs_VehicleHusky_LeanLeft(); void Legs_VehicleHusky_LeanRight(); void Legs_VehicleHusky_LeanLeftFast(); void Legs_VehicleHusky_LeanRightFast(); float HuskyCalcState(); }; float player::HuskyCalcState() { entity vehicle = getVehicle(); if ( vehicle != $null_entity ) { float speed = vehicle.getLinearVelocity() * vehicle.getWorldAxis( 0 ); if ( vehicle.vGetSteerScale() <= -0.4 ) { if ( speed > HUSKY_SPEED_FAST ) { return HUSKY_STATE_LEAN_LEFT_FAST; } return HUSKY_STATE_LEAN_LEFT; } if ( vehicle.vGetSteerScale() >= 0.4 ) { if ( speed > HUSKY_SPEED_FAST ) { return HUSKY_STATE_LEAN_RIGHT_FAST; } return HUSKY_STATE_LEAN_RIGHT; } if ( speed > HUSKY_SPEED_FAST ) { return HUSKY_STATE_IDLE_FAST; } } return HUSKY_STATE_IDLE; } void player::Torso_VehicleHusky() { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 6 ); } void player::Legs_VehicleHusky() { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 6 ); } void player::Torso_VehicleHusky_IdleFast() { playCycle( ANIMCHANNEL_TORSO, "husky_rider_stand_centre_idle" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT || newstate == HUSKY_STATE_LEAN_LEFT || newstate == HUSKY_STATE_IDLE ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 6 ); } if ( newstate == HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanLeftFast", 6 ); } if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanRightFast", 6 ); } sys.waitFrame(); } } void player::Torso_VehicleHusky_Idle() { playCycle( ANIMCHANNEL_TORSO, "husky_rider_centre_idle" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST || newstate == HUSKY_STATE_LEAN_LEFT_FAST || newstate == HUSKY_STATE_IDLE_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_IdleFast", 6 ); } if ( newstate == HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanLeft", 6 ); } if ( newstate == HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanRight", 6 ); } sys.waitFrame(); } } void player::Torso_VehicleHusky_LeanLeft() { playAnim( ANIMCHANNEL_TORSO, "husky_rider_turn_left" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanLeftFast", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Torso_VehicleHusky_LeanRight() { playAnim( ANIMCHANNEL_TORSO, "husky_rider_turn_right" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanRightFast", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Torso_VehicleHusky_LeanLeftFast() { playAnim( ANIMCHANNEL_TORSO, "husky_rider_stand_turn_left" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanLeft", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Torso_VehicleHusky_LeanRightFast() { playAnim( ANIMCHANNEL_TORSO, "husky_rider_stand_turn_right" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_LeanRight", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_TORSO, "Torso_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_IdleFast() { playCycle( ANIMCHANNEL_LEGS, "husky_rider_stand_centre_idle" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT || newstate == HUSKY_STATE_LEAN_LEFT || newstate == HUSKY_STATE_IDLE ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 6 ); } if ( newstate == HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanLeftFast", 6 ); } if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanRightFast", 6 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_Idle() { playCycle( ANIMCHANNEL_LEGS, "husky_rider_centre_idle" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST || newstate == HUSKY_STATE_LEAN_LEFT_FAST || newstate == HUSKY_STATE_IDLE_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_IdleFast", 6 ); } if ( newstate == HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanLeft", 6 ); } if ( newstate == HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanRight", 6 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_LeanLeft() { playAnim( ANIMCHANNEL_LEGS, "husky_rider_turn_left" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanLeftFast", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_LeanRight() { playAnim( ANIMCHANNEL_LEGS, "husky_rider_turn_right" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanRightFast", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_LeanLeftFast() { playAnim( ANIMCHANNEL_LEGS, "husky_rider_stand_turn_left" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_LEFT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanLeft", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_LEFT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } } void player::Legs_VehicleHusky_LeanRightFast() { playAnim( ANIMCHANNEL_LEGS, "husky_rider_stand_turn_right" ); while ( true ) { float newstate = HuskyCalcState(); if ( newstate == HUSKY_STATE_LEAN_RIGHT ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_LeanRight", 8 ); } else if ( newstate != HUSKY_STATE_LEAN_RIGHT_FAST ) { animState( ANIMCHANNEL_LEGS, "Legs_VehicleHusky_Idle", 8 ); } sys.waitFrame(); } }