Netcode Bootstrap
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
||||
using Rukhanka.Toolbox;
|
||||
using Unity.Entities;
|
||||
using FixedStringName = Unity.Collections.FixedString512Bytes;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka
|
||||
{
|
||||
public readonly struct AnimatorStateQueryAspect
|
||||
{
|
||||
readonly DynamicBuffer<AnimatorControllerLayerComponent> layersArr;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public AnimatorStateQueryAspect(DynamicBuffer<AnimatorControllerLayerComponent> layers)
|
||||
{
|
||||
layersArr = layers;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public struct RuntimeStateInfo
|
||||
{
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
public FixedStringName name;
|
||||
#endif
|
||||
public uint hash;
|
||||
public float normalizedTime;
|
||||
}
|
||||
|
||||
public struct RuntimeTransitionInfo
|
||||
{
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
public FixedStringName name;
|
||||
#endif
|
||||
public uint hash;
|
||||
public float normalizedTime;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public RuntimeStateInfo GetLayerCurrentStateInfo(int layerIndex)
|
||||
{
|
||||
if (layersArr.Length <= layerIndex)
|
||||
return default;
|
||||
|
||||
var layerRuntimeData = layersArr[layerIndex];
|
||||
ref var layerBlob = ref layerRuntimeData.controller.Value.layers[layerIndex];
|
||||
var curStateID = layerRuntimeData.rtd.srcState.id;
|
||||
|
||||
if (curStateID < 0 || curStateID >= layerBlob.states.Length)
|
||||
return default;
|
||||
|
||||
var rv = new RuntimeStateInfo()
|
||||
{
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
name = layerBlob.states[curStateID].name.ToFixedString(),
|
||||
#endif
|
||||
hash = layerBlob.states[curStateID].hash,
|
||||
normalizedTime = layerRuntimeData.rtd.srcState.normalizedDuration,
|
||||
};
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public RuntimeTransitionInfo GetLayerCurrentTransitionInfo(int layerIndex)
|
||||
{
|
||||
if (layersArr.Length <= layerIndex)
|
||||
return default;
|
||||
|
||||
var layerRuntimeData = layersArr[layerIndex];
|
||||
ref var layerBlob = ref layerRuntimeData.controller.Value.layers[layerIndex];
|
||||
var curTransitionID = layerRuntimeData.rtd.activeTransition.id;
|
||||
var curStateID = layerRuntimeData.rtd.srcState.id;
|
||||
|
||||
if (curTransitionID < 0 || curStateID < 0 || curStateID >= layerBlob.states.Length)
|
||||
return default;
|
||||
|
||||
var rv = new RuntimeTransitionInfo()
|
||||
{
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
name = layerBlob.states[curStateID].transitions[curTransitionID].name.ToFixedString(),
|
||||
#endif
|
||||
hash = layerBlob.states[curStateID].transitions[curTransitionID].hash,
|
||||
normalizedTime = layerRuntimeData.rtd.activeTransition.normalizedDuration
|
||||
};
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public bool IsInTransition(int layerIndex)
|
||||
{
|
||||
if (layersArr.Length <= layerIndex)
|
||||
return default;
|
||||
|
||||
var layerRuntimeData = layersArr[layerIndex];
|
||||
var rv = layerRuntimeData.rtd.activeTransition.id >= 0;
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user