mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-20 15:41:01 +00:00
fix #653
This commit is contained in:
parent
9960fff0eb
commit
1ff5ad1236
@ -15,6 +15,14 @@ namespace QSB.Animation.Player;
|
||||
[UsedInUnityProject]
|
||||
public class AnimationSync : PlayerSyncObject
|
||||
{
|
||||
public static int DropHeldItem = Animator.StringToHash("DropHeldItem");
|
||||
public static int HoldLantern = Animator.StringToHash("HoldLantern");
|
||||
public static int HoldSharedStone = Animator.StringToHash("HoldSharedStone");
|
||||
public static int HoldScroll = Animator.StringToHash("HoldScroll");
|
||||
public static int HoldWarpCore = Animator.StringToHash("HoldWarpCore");
|
||||
public static int HoldAdvWarpCore = Animator.StringToHash("HoldAdvWarpCore");
|
||||
public static int HoldItem = Animator.StringToHash("HoldItem");
|
||||
|
||||
private RuntimeAnimatorController _suitedAnimController;
|
||||
private AnimatorOverrideController _unsuitedAnimController;
|
||||
private GameObject _suitedGraphics;
|
||||
@ -209,4 +217,20 @@ public class AnimationSync : PlayerSyncObject
|
||||
Mirror.RebuildFloatParams();
|
||||
NetworkAnimator.Invoke("Awake");
|
||||
}
|
||||
|
||||
public void PickUpItem(int animHash)
|
||||
{
|
||||
VisibleAnimator.SetTrigger(animHash);
|
||||
VisibleAnimator.SetLayerWeight(2, 1);
|
||||
InvisibleAnimator.SetTrigger(animHash);
|
||||
InvisibleAnimator.SetLayerWeight(2, 1);
|
||||
}
|
||||
|
||||
public void DropItem()
|
||||
{
|
||||
VisibleAnimator.SetTrigger(DropHeldItem);
|
||||
VisibleAnimator.SetLayerWeight(2, 1);
|
||||
InvisibleAnimator.SetTrigger(DropHeldItem);
|
||||
InvisibleAnimator.SetLayerWeight(2, 1);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ public class AnimatorMirror : MonoBehaviour
|
||||
private Animator _to;
|
||||
private NetworkAnimator _networkAnimator;
|
||||
|
||||
private readonly Dictionary<string, AnimFloatParam> _floatParams = new();
|
||||
private readonly Dictionary<int, AnimFloatParam> _floatParams = new();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the Animator Mirror
|
||||
@ -82,36 +82,38 @@ public class AnimatorMirror : MonoBehaviour
|
||||
switch (fromParam.type)
|
||||
{
|
||||
case AnimatorControllerParameterType.Float:
|
||||
_floatParams[fromParam.name].Target = _from.GetFloat(fromParam.name);
|
||||
_floatParams[fromParam.nameHash].Target = _from.GetFloat(fromParam.nameHash);
|
||||
break;
|
||||
|
||||
case AnimatorControllerParameterType.Int:
|
||||
_to.SetInteger(fromParam.name, _from.GetInteger(fromParam.name));
|
||||
_to.SetInteger(fromParam.nameHash, _from.GetInteger(fromParam.nameHash));
|
||||
break;
|
||||
|
||||
case AnimatorControllerParameterType.Bool:
|
||||
_to.SetBool(fromParam.name, _from.GetBool(fromParam.name));
|
||||
_to.SetBool(fromParam.nameHash, _from.GetBool(fromParam.nameHash));
|
||||
break;
|
||||
|
||||
case AnimatorControllerParameterType.Trigger:
|
||||
if (_from.GetBool(fromParam.name) && !_to.GetBool(fromParam.name))
|
||||
if (_from.GetBool(fromParam.nameHash) && !_to.GetBool(fromParam.nameHash))
|
||||
{
|
||||
if (_networkAnimator != null)
|
||||
{
|
||||
_networkAnimator.SetTrigger(fromParam.name);
|
||||
DebugLog.DebugWrite($"Set {fromParam.name} on netanim");
|
||||
_networkAnimator.SetTrigger(fromParam.nameHash);
|
||||
}
|
||||
|
||||
_to.SetTrigger(fromParam.name);
|
||||
_to.SetTrigger(fromParam.nameHash);
|
||||
}
|
||||
|
||||
if (!_from.GetBool(fromParam.name) && _to.GetBool(fromParam.name))
|
||||
if (!_from.GetBool(fromParam.nameHash) && _to.GetBool(fromParam.nameHash))
|
||||
{
|
||||
if (_networkAnimator != null)
|
||||
{
|
||||
_networkAnimator.ResetTrigger(fromParam.name);
|
||||
DebugLog.DebugWrite($"Reset {fromParam.name} on netanim");
|
||||
_networkAnimator.ResetTrigger(fromParam.nameHash);
|
||||
}
|
||||
|
||||
_to.ResetTrigger(fromParam.name);
|
||||
_to.ResetTrigger(fromParam.nameHash);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -142,7 +144,7 @@ public class AnimatorMirror : MonoBehaviour
|
||||
_floatParams.Clear();
|
||||
foreach (var param in _from.parameters.Where(p => p.type == AnimatorControllerParameterType.Float))
|
||||
{
|
||||
_floatParams.Add(param.name, new AnimFloatParam());
|
||||
_floatParams.Add(param.nameHash, new AnimFloatParam());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
63
QSB/Animation/Player/Patches/PlayerAnimControllerPatches.cs
Normal file
63
QSB/Animation/Player/Patches/PlayerAnimControllerPatches.cs
Normal file
@ -0,0 +1,63 @@
|
||||
using HarmonyLib;
|
||||
using QSB.Patches;
|
||||
|
||||
namespace QSB.Animation.Player.Patches;
|
||||
|
||||
[HarmonyPatch(typeof(PlayerAnimController))]
|
||||
public class PlayerAnimControllerPatches : QSBPatch
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnModStart;
|
||||
|
||||
/*
|
||||
* These patches preserve layer weights between animatorcontroller changes.
|
||||
* No idea if this is intended Unity behaviour,
|
||||
* but when changing the controller the layer weights get
|
||||
* reset back to 0 - even if their default is not 0.
|
||||
*/
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(nameof(PlayerAnimController.OnPutOnSuit))]
|
||||
public static bool OnPutOnSuit(PlayerAnimController __instance)
|
||||
{
|
||||
var layerCount = __instance._animator.layerCount;
|
||||
var layerWeights = new float[layerCount];
|
||||
for (var i = 0; i < layerCount; i++)
|
||||
{
|
||||
layerWeights[i] = __instance._animator.GetLayerWeight(i);
|
||||
}
|
||||
|
||||
__instance._animator.runtimeAnimatorController = __instance._baseAnimController;
|
||||
__instance._unsuitedGroup.SetActive(false);
|
||||
__instance._suitedGroup.SetActive(!PlayerState.InMapView());
|
||||
|
||||
for (var i = 0; i < layerCount; i++)
|
||||
{
|
||||
__instance._animator.SetLayerWeight(i, layerWeights[i]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(nameof(PlayerAnimController.OnRemoveSuit))]
|
||||
public static bool OnRemoveSuit(PlayerAnimController __instance)
|
||||
{
|
||||
var layerCount = __instance._animator.layerCount;
|
||||
var layerWeights = new float[layerCount];
|
||||
for (var i = 0; i < layerCount; i++)
|
||||
{
|
||||
layerWeights[i] = __instance._animator.GetLayerWeight(i);
|
||||
}
|
||||
|
||||
__instance._animator.runtimeAnimatorController = __instance._unsuitedAnimOverride;
|
||||
__instance._unsuitedGroup.SetActive(!PlayerState.InMapView());
|
||||
__instance._suitedGroup.SetActive(false);
|
||||
|
||||
for (var i = 0; i < layerCount; i++)
|
||||
{
|
||||
__instance._animator.SetLayerWeight(i, layerWeights[i]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
@ -1,4 +1,5 @@
|
||||
using QSB.CampfireSync.WorldObjects;
|
||||
using QSB.Animation.Player;
|
||||
using QSB.CampfireSync.WorldObjects;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
@ -23,7 +24,7 @@ public class BurnSlideReelMessage : QSBWorldObjectMessage<QSBSlideReelItem, int>
|
||||
campfire._burnedSlideReelSocket,
|
||||
campfire._sector, null);
|
||||
fromPlayer.HeldItem = null;
|
||||
fromPlayer.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
fromPlayer.AnimationSync.DropItem();
|
||||
WorldObject.AttachedObject.Burn();
|
||||
campfire.SetDropSlideReelMode(false);
|
||||
campfire._hasBurnedSlideReel = true;
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.ItemSync.WorldObjects;
|
||||
using QSB.Animation.Player;
|
||||
using QSB.ItemSync.WorldObjects;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
@ -69,6 +70,6 @@ public class DropItemMessage : QSBWorldObjectMessage<IQSBItem,
|
||||
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = null;
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
player.AnimationSync.DropItem();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Animation.Player;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
using QSB.Utility;
|
||||
@ -39,27 +40,27 @@ public class MoveToCarryMessage : QSBWorldObjectMessage<IQSBItem, uint>
|
||||
switch (itemType)
|
||||
{
|
||||
case ItemType.Scroll:
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldScroll");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldScroll);
|
||||
break;
|
||||
case ItemType.WarpCore:
|
||||
if (((QSBWarpCoreItem)WorldObject).IsVesselCoreType())
|
||||
{
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldAdvWarpCore");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldAdvWarpCore);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldWarpCore");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldWarpCore);
|
||||
}
|
||||
|
||||
break;
|
||||
case ItemType.SharedStone:
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldSharedStone");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldSharedStone);
|
||||
break;
|
||||
case ItemType.ConversationStone:
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldItem");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldItem);
|
||||
break;
|
||||
case ItemType.Lantern:
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("HoldLantern");
|
||||
player.AnimationSync.PickUpItem(AnimationSync.HoldLantern);
|
||||
break;
|
||||
case ItemType.SlideReel:
|
||||
case ItemType.DreamLantern:
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Animation.Player;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
@ -29,7 +30,7 @@ public class SocketItemMessage : QSBWorldObjectMessage<IQSBItem, (SocketMessageT
|
||||
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = null;
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
player.AnimationSync.DropItem();
|
||||
return;
|
||||
}
|
||||
case SocketMessageType.StartUnsocket:
|
||||
|
@ -13,6 +13,7 @@ using System;
|
||||
using System.Linq;
|
||||
using QSB.Menus;
|
||||
using UnityEngine;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace QSB.Utility;
|
||||
|
||||
@ -186,31 +187,73 @@ public class DebugGUI : MonoBehaviour, IAddComponentOnStart
|
||||
WriteLine(2, $"Ready : {player.IsReady}");
|
||||
WriteLine(2, $"Suited Up : {player.SuitedUp}");
|
||||
WriteLine(2, $"In Suited Up State : {player.AnimationSync?.InSuitedUpState}");
|
||||
WriteLine(2, $"InDreamWorld : {player.InDreamWorld}");
|
||||
//WriteLine(2, $"InDreamWorld : {player.InDreamWorld}");
|
||||
|
||||
if (player.IsReady && QSBWorldSync.AllObjectsReady)
|
||||
{
|
||||
WriteLine(2, $"Illuminated : {player.LightSensor?.IsIlluminated()}");
|
||||
var singleLightSensor = (SingleLightSensor)player.LightSensor;
|
||||
// will be null for remote player light sensors
|
||||
if (singleLightSensor?._lightSources != null)
|
||||
/*if (singleLightSensor?._lightSources != null)
|
||||
{
|
||||
foreach (var item in singleLightSensor._lightSources)
|
||||
{
|
||||
WriteLine(2, $"- {item.GetLightSourceType()}");
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
var networkTransform = player.TransformSync;
|
||||
var referenceSector = networkTransform.ReferenceSector;
|
||||
var referenceTransform = networkTransform.ReferenceTransform;
|
||||
|
||||
WriteLine(2, $" - Ref. Sector : {(referenceSector == null ? "NULL" : referenceSector.Name)}", referenceSector == null ? Color.red : Color.white);
|
||||
WriteLine(2, $" - Ref. Transform : {(referenceTransform == null ? "NULL" : referenceTransform.name)}", referenceTransform == null ? Color.red : Color.white);
|
||||
WriteLine(2, $" - Local Position : {player.Body.transform.localPosition}");
|
||||
WriteLine(2, $" - Position : {player.Body.transform.position}");
|
||||
//WriteLine(2, $" - Ref. Sector : {(referenceSector == null ? "NULL" : referenceSector.Name)}", referenceSector == null ? Color.red : Color.white);
|
||||
//WriteLine(2, $" - Ref. Transform : {(referenceTransform == null ? "NULL" : referenceTransform.name)}", referenceTransform == null ? Color.red : Color.white);
|
||||
//WriteLine(2, $" - Local Position : {player.Body.transform.localPosition}");
|
||||
//WriteLine(2, $" - Position : {player.Body.transform.position}");
|
||||
|
||||
WriteLine(2, $" - Entangled Object: {(player.EntangledObject == null ? "NULL" : player.EntangledObject.Name)}");
|
||||
//WriteLine(2, $" - Entangled Object: {(player.EntangledObject == null ? "NULL" : player.EntangledObject.Name)}");
|
||||
|
||||
var visibleAnimator = player.AnimationSync.VisibleAnimator;
|
||||
var invisibleAnimator = player.AnimationSync.InvisibleAnimator;
|
||||
foreach (var param in visibleAnimator.parameters)
|
||||
{
|
||||
object value = null;
|
||||
switch (param.type)
|
||||
{
|
||||
case AnimatorControllerParameterType.Bool:
|
||||
value = visibleAnimator.GetBool(param.nameHash);
|
||||
break;
|
||||
case AnimatorControllerParameterType.Float:
|
||||
value = visibleAnimator.GetFloat(param.nameHash);
|
||||
break;
|
||||
case AnimatorControllerParameterType.Int:
|
||||
value = visibleAnimator.GetInteger(param.nameHash);
|
||||
break;
|
||||
case AnimatorControllerParameterType.Trigger:
|
||||
value = visibleAnimator.GetBool(param.nameHash);
|
||||
break;
|
||||
}
|
||||
|
||||
//WriteLine(2, $" - {param.name} | {param.type} | {value}");
|
||||
}
|
||||
|
||||
WriteLine(2, $" - VISIBLE ANIMATOR");
|
||||
for (var i = 0; i < visibleAnimator.layerCount; i++)
|
||||
{
|
||||
var layerName = visibleAnimator.GetLayerName(i);
|
||||
var weight = visibleAnimator.GetLayerWeight(i);
|
||||
WriteLine(2, $" - {layerName} : {weight}");
|
||||
|
||||
//var currentState = visibleAnimator.GetCurrentAnimatorStateInfo(i);
|
||||
//WriteLine(2, $" - Hash: {currentState.fullPathHash}");
|
||||
//WriteLine(2, $" - Speed: {currentState.speed}");
|
||||
WriteLine(2, $" - Clips:");
|
||||
foreach (var item in visibleAnimator.GetCurrentAnimatorClipInfo(i))
|
||||
{
|
||||
WriteLine(2, $" - Clip name: {item.clip.name}");
|
||||
//WriteLine(2, $" - Weight: {item.weight}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user