r2mods/ilspy_dump/ror2_csproj/EntityStates.Commando/MainState.cs

196 lines
4.4 KiB
C#

using RoR2;
using UnityEngine;
namespace EntityStates.Commando;
public class MainState : BaseState
{
private Animator modelAnimator;
private GenericSkill skill1;
private GenericSkill skill2;
private GenericSkill skill3;
private GenericSkill skill4;
private bool skill1InputRecieved;
private bool skill2InputRecieved;
private bool skill3InputRecieved;
private bool skill4InputRecieved;
private Vector3 previousPosition;
private Vector3 estimatedVelocity;
private static int isMovingParamHash = Animator.StringToHash("isMoving");
private static int walkSpeedParamHash = Animator.StringToHash("walkSpeed");
private static int forwardSpeedParamHash = Animator.StringToHash("forwardSpeed");
private static int rightSpeedParamHash = Animator.StringToHash("rightSpeed");
public override void OnEnter()
{
base.OnEnter();
GenericSkill[] components = base.gameObject.GetComponents<GenericSkill>();
for (int i = 0; i < components.Length; i++)
{
if (components[i].skillName == "FirePistol")
{
skill1 = components[i];
}
else if (components[i].skillName == "FireFMJ")
{
skill2 = components[i];
}
else if (components[i].skillName == "Roll")
{
skill3 = components[i];
}
else if (components[i].skillName == "FireBarrage")
{
skill4 = components[i];
}
}
modelAnimator = GetModelAnimator();
previousPosition = base.transform.position;
if ((bool)modelAnimator)
{
int layerIndex = modelAnimator.GetLayerIndex("Body");
modelAnimator.CrossFadeInFixedTime("Walk", 0.1f, layerIndex);
modelAnimator.Update(0f);
}
Transform modelTransform = GetModelTransform();
if ((bool)modelTransform)
{
AimAnimator component = modelTransform.GetComponent<AimAnimator>();
if ((bool)component)
{
component.enabled = true;
}
}
}
public override void OnExit()
{
Transform modelTransform = GetModelTransform();
if ((bool)modelTransform)
{
AimAnimator component = modelTransform.GetComponent<AimAnimator>();
if ((bool)component)
{
component.enabled = false;
}
}
if (base.isAuthority && (bool)base.characterMotor)
{
base.characterMotor.moveDirection = Vector3.zero;
}
base.OnExit();
}
public override void Update()
{
base.Update();
if (base.inputBank.skill1.down)
{
skill1InputRecieved = true;
}
if (base.inputBank.skill2.down)
{
skill2InputRecieved = true;
}
if (base.inputBank.skill3.down)
{
skill3InputRecieved = true;
}
if (base.inputBank.skill4.down)
{
skill4InputRecieved = true;
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
Vector3 position = base.transform.position;
float deltaTime = GetDeltaTime();
if (deltaTime != 0f)
{
estimatedVelocity = (position - previousPosition) / deltaTime;
}
if (base.isAuthority)
{
Vector3 moveVector = base.inputBank.moveVector;
if ((bool)base.characterMotor)
{
base.characterMotor.moveDirection = moveVector;
if (skill3InputRecieved)
{
if ((bool)skill3)
{
skill3.ExecuteIfReady();
}
skill3InputRecieved = false;
}
}
if ((bool)base.characterDirection)
{
if ((bool)base.characterBody && base.characterBody.shouldAim)
{
base.characterDirection.moveVector = base.inputBank.aimDirection;
}
else
{
base.characterDirection.moveVector = moveVector;
}
}
if (skill1InputRecieved)
{
if ((bool)skill1)
{
skill1.ExecuteIfReady();
}
skill1InputRecieved = false;
}
if (skill2InputRecieved)
{
if ((bool)skill2)
{
skill2.ExecuteIfReady();
}
skill2InputRecieved = false;
}
if (skill4InputRecieved)
{
if ((bool)skill4)
{
skill4.ExecuteIfReady();
}
skill4InputRecieved = false;
}
}
if ((bool)modelAnimator && (bool)base.characterDirection)
{
Vector3 lhs = estimatedVelocity;
lhs.y = 0f;
Vector3 forward = base.characterDirection.forward;
Vector3 rhs = Vector3.Cross(Vector3.up, forward);
float magnitude = lhs.magnitude;
float value = Vector3.Dot(lhs, forward);
float value2 = Vector3.Dot(lhs, rhs);
modelAnimator.SetBool(isMovingParamHash, magnitude != 0f);
modelAnimator.SetFloat(walkSpeedParamHash, magnitude);
modelAnimator.SetFloat(forwardSpeedParamHash, value, 0.2f, GetDeltaTime());
modelAnimator.SetFloat(rightSpeedParamHash, value2, 0.2f, GetDeltaTime());
}
previousPosition = position;
}
}