Repository URL to install this package:
|
Version:
1.0.0 ▾
|
using System;
using Fluctio.FluctioSim.Core.MujocoExtensions.States;
using Mujoco;
namespace Fluctio.FluctioSim.Core.MujocoExtensions.MujocoDataProxy
{
public abstract class ComponentData
{
#region Data abstract properties
protected abstract unsafe double* PosPointer { get; }
protected abstract unsafe double* VelPointer { get; }
protected abstract unsafe double* AccPointer { get; }
protected abstract int PosOffset { get; }
protected abstract int DofOffset { get; }
protected abstract int PosSize { get; }
protected abstract int DofSize { get; }
#endregion
#region Span properties
protected unsafe Span<double> PosData => new(PosPointer + PosOffset, PosSize);
protected unsafe Span<double> VelData => new(VelPointer + DofOffset, DofSize);
protected unsafe Span<double> AccData => new(AccPointer + DofOffset, DofSize);
#endregion
#region State functions
public ComponentState GetState()
{
return new ComponentState()
{
Pos = PosData.ToArray(),
Vel = VelData.ToArray(),
Acc = AccData.ToArray(),
};
}
public void SetState(ComponentState state, bool doSyncState = false)
{
state.Pos.CopyTo(PosData);
state.Vel.CopyTo(VelData);
state.Acc.CopyTo(AccData);
MujocoComponentsExtensions.SyncState(doSyncState);
}
#endregion
}
public abstract class ComponentData<TComponent> : ComponentData
where TComponent: MjComponent
{
public TComponent Component { get; private set; }
protected ComponentData(TComponent component)
{
Component = component;
}
}
}