/// <summary> /// Initializes a new instance of the <see cref="UsingMicroHIDEnergyEventArgs"/> class. /// </summary> /// <param name="player"><inheritdoc cref="Player"/></param> /// <param name="microHIDitem"><inheritdoc cref="MicroHID"/></param> /// <param name="currentState"><inheritdoc cref="CurrentState"/></param> /// <param name="drain"><inheritdoc cref="Drain"/></param> /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param> public UsingMicroHIDEnergyEventArgs(Player player, MicroHIDItem microHIDitem, HidState currentState, float drain, bool isAllowed = true) { Player = player; MicroHID = (MicroHid)Item.Get(microHIDitem); CurrentState = currentState; Drain = drain; IsAllowed = isAllowed; }
/// <summary> /// Initializes a new instance of the <see cref="ChangingMicroHIDStateEventArgs"/> class. /// </summary> /// <param name="player"><inheritdoc cref="Player"/></param> /// <param name="microHID"><inheritdoc cref="MicroHID"/></param> /// <param name="oldState"><inheritdoc cref="OldState"/></param> /// <param name="newState"><inheritdoc cref="NewState"/></param> /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param> public ChangingMicroHIDStateEventArgs(Player player, MicroHIDItem microHID, HidState oldState, HidState newState, bool isAllowed = true) { Player = player; MicroHID = (MicroHid)Item.Get(microHID); OldState = oldState; NewState = newState; IsAllowed = isAllowed; }
/// <summary> /// Initializes a new instance of the <see cref="MicroHid"/> class. /// </summary> /// <param name="itemBase">The base <see cref="MicroHIDItem"/> class.</param> public MicroHid(MicroHIDItem itemBase) : base(itemBase) { Base = itemBase; }
private static bool Execute(MicroHIDItem __instance) { try { var state = __instance.State; var energyToByte = __instance.EnergyToByte; var num = 0f; var allow = true; var owner = __instance.Owner.GetPlayer(); var item = __instance.GetSynapseItem(); var itemstate = ItemState.Initiating; switch (state) { case HidState.Firing: itemstate = ItemState.Finalizing; break; case HidState.Idle: itemstate = ItemState.Stopping; break; case HidState.PoweringDown: itemstate = ItemState.Stopping; break; case HidState.PoweringUp: itemstate = ItemState.Initiating; break; case HidState.Primed: itemstate = ItemState.Finalizing; break; } Server.Get.Events.Player.InvokePlayerItemUseEvent(owner, item, itemstate, ref allow); if (!allow) { state = HidState.Idle; } Server.Get.Events.Player.InvokeMicroUse(owner, item, ref state); switch (state) { case HidState.Idle: if (__instance.RemainingEnergy > 0f && __instance.UserInput != HidUserInput.None) { __instance.State = HidState.PoweringUp; __instance._stopwatch.Restart(); } break; case HidState.PoweringUp: if ((__instance.UserInput == HidUserInput.None && __instance._stopwatch.Elapsed.TotalSeconds >= 0.35) || __instance.RemainingEnergy <= 0f) { __instance.State = HidState.PoweringDown; __instance._stopwatch.Restart(); } else if (__instance._stopwatch.Elapsed.TotalSeconds >= 5.95) { __instance.State = ((__instance.UserInput == HidUserInput.Fire) ? HidState.Firing : HidState.Primed); __instance._stopwatch.Restart(); } num = __instance._energyConsumtionCurve.Evaluate((float)(__instance._stopwatch.Elapsed.TotalSeconds / 5.95)); break; case HidState.PoweringDown: if (__instance._stopwatch.Elapsed.TotalSeconds >= 3.1) { __instance.State = HidState.Idle; __instance._stopwatch.Stop(); __instance._stopwatch.Reset(); } break; case HidState.Primed: if ((__instance.UserInput != HidUserInput.Prime && __instance._stopwatch.Elapsed.TotalSeconds >= 0.34999999403953552) || __instance.RemainingEnergy <= 0f) { __instance.State = ((__instance.UserInput == HidUserInput.Fire && __instance.RemainingEnergy > 0f) ? HidState.Firing : HidState.PoweringDown); __instance._stopwatch.Restart(); } else { num = __instance._energyConsumtionCurve.Evaluate(1f); } break; case HidState.Firing: if (__instance._stopwatch.Elapsed.TotalSeconds > 1.7000000476837158) { num = 0.13f; __instance.Fire(); if (__instance.RemainingEnergy == 0f || (__instance.UserInput != HidUserInput.Fire && __instance._stopwatch.Elapsed.TotalSeconds >= 2.05)) { __instance.State = ((__instance.RemainingEnergy > 0f && __instance.UserInput == HidUserInput.Prime) ? HidState.Primed : HidState.PoweringDown); __instance._stopwatch.Restart(); } } else { num = __instance._energyConsumtionCurve.Evaluate(1f); } break; } if (state != __instance.State) { __instance.ServerSendStatus(HidStatusMessageType.State, (byte)__instance.State); } if (num > 0f) { __instance.RemainingEnergy = Mathf.Clamp01(__instance.RemainingEnergy - num * Time.deltaTime); if (energyToByte != __instance.EnergyToByte) { __instance.ServerSendStatus(HidStatusMessageType.EnergySync, __instance.EnergyToByte); } } return(false); } catch (Exception e) { Logger.Get.Error($"Synapse-Event: PlayerUseMicro failed!!\n{e}"); return(true); } }