first commit
This commit is contained in:
132
NitroxClient/GameLogic/ExosuitModuleEvent.cs
Normal file
132
NitroxClient/GameLogic/ExosuitModuleEvent.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using NitroxClient.Communication.Abstract;
|
||||
using NitroxModel_Subnautica.DataStructures;
|
||||
using NitroxModel.DataStructures;
|
||||
using NitroxModel_Subnautica.Packets;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NitroxClient.GameLogic;
|
||||
|
||||
public class ExosuitModuleEvent
|
||||
{
|
||||
private static readonly int useToolAnimation = Animator.StringToHash("use_tool");
|
||||
private static readonly int bashAnimation = Animator.StringToHash("bash");
|
||||
|
||||
private readonly IPacketSender packetSender;
|
||||
|
||||
public ExosuitModuleEvent(IPacketSender packetSender)
|
||||
{
|
||||
this.packetSender = packetSender;
|
||||
}
|
||||
|
||||
public void BroadcastClawUse(ExosuitClawArm clawArm, float cooldown)
|
||||
{
|
||||
ExosuitArmAction action;
|
||||
|
||||
// If cooldown of claw arm matches pickup cooldown, the exosuit arm performed a pickup action
|
||||
if (cooldown == clawArm.cooldownPickup)
|
||||
{
|
||||
action = ExosuitArmAction.START_USE_TOOL;
|
||||
} // Else if it matches the punch cooldown, it has punched something (or nothing but water, who knows)
|
||||
else if (cooldown == clawArm.cooldownPunch)
|
||||
{
|
||||
action = ExosuitArmAction.ALT_HIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error("Cooldown time does not match pickup or punch time");
|
||||
return;
|
||||
}
|
||||
|
||||
BroadcastArmAction(TechType.ExosuitClawArmModule, clawArm, action, null, null);
|
||||
}
|
||||
|
||||
public static void UseClaw(ExosuitClawArm clawArm, ExosuitArmAction armAction)
|
||||
{
|
||||
switch (armAction)
|
||||
{
|
||||
case ExosuitArmAction.START_USE_TOOL:
|
||||
clawArm.animator.SetTrigger(useToolAnimation);
|
||||
break;
|
||||
case ExosuitArmAction.ALT_HIT:
|
||||
clawArm.animator.SetTrigger(bashAnimation);
|
||||
clawArm.fxControl.Play(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void UseDrill(ExosuitDrillArm drillArm, ExosuitArmAction armAction)
|
||||
{
|
||||
switch (armAction)
|
||||
{
|
||||
case ExosuitArmAction.START_USE_TOOL:
|
||||
drillArm.animator.SetBool(useToolAnimation, true);
|
||||
drillArm.loop.Play();
|
||||
break;
|
||||
case ExosuitArmAction.END_USE_TOOL:
|
||||
drillArm.animator.SetBool(useToolAnimation, false);
|
||||
drillArm.StopEffects();
|
||||
break;
|
||||
default:
|
||||
Log.Error($"Drill arm got an arm action he should not get: {armAction}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void BroadcastArmAction(TechType techType, IExosuitArm exosuitArm, ExosuitArmAction armAction, Vector3? opVector, Quaternion? opRotation)
|
||||
{
|
||||
if (exosuitArm.GetGameObject().TryGetIdOrWarn(out NitroxId id))
|
||||
{
|
||||
ExosuitArmActionPacket packet = new(techType, id, armAction, opVector?.ToDto(), opRotation?.ToDto());
|
||||
packetSender.Send(packet);
|
||||
}
|
||||
}
|
||||
|
||||
public void BroadcastArmAction(TechType techType, IExosuitArm exosuitArm, ExosuitArmAction armAction)
|
||||
{
|
||||
if (exosuitArm.GetGameObject().TryGetIdOrWarn(out NitroxId id))
|
||||
{
|
||||
ExosuitArmActionPacket packet = new(techType, id, armAction, null, null);
|
||||
packetSender.Send(packet);
|
||||
}
|
||||
}
|
||||
|
||||
public static void UseGrappling(ExosuitGrapplingArm grapplingArm, ExosuitArmAction armAction, Vector3? opHitVector)
|
||||
{
|
||||
switch (armAction)
|
||||
{
|
||||
case ExosuitArmAction.END_USE_TOOL:
|
||||
grapplingArm.animator.SetBool(useToolAnimation, false);
|
||||
grapplingArm.ResetHook();
|
||||
break;
|
||||
case ExosuitArmAction.START_USE_TOOL:
|
||||
{
|
||||
grapplingArm.animator.SetBool(useToolAnimation, true);
|
||||
if (!grapplingArm.rope.isLaunching)
|
||||
{
|
||||
grapplingArm.rope.LaunchHook(35f);
|
||||
}
|
||||
|
||||
GrapplingHook hook = grapplingArm.hook;
|
||||
|
||||
hook.transform.parent = null;
|
||||
hook.transform.position = grapplingArm.front.transform.position;
|
||||
hook.SetFlying(true);
|
||||
Exosuit componentInParent = grapplingArm.GetComponentInParent<Exosuit>();
|
||||
|
||||
if (!opHitVector.HasValue)
|
||||
{
|
||||
Log.Error("No vector given that contains the hook direction");
|
||||
return;
|
||||
}
|
||||
|
||||
hook.rb.velocity = opHitVector.Value;
|
||||
Utils.PlayFMODAsset(grapplingArm.shootSound, grapplingArm.front, 15f);
|
||||
grapplingArm.grapplingStartPos = componentInParent.transform.position;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
Log.Error($"Grappling arm got an arm action he should not get: {armAction}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user