Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
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;
		}
		
	}
}