73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using RobocraftX.Common;
|
|
using RobocraftX.DOTS;
|
|
using Svelto.ECS;
|
|
using Svelto.ECS.EntityStructs;
|
|
using Unity.Mathematics;
|
|
using UnityEngine;
|
|
|
|
using TechbloxModdingAPI.Engines;
|
|
using TechbloxModdingAPI.Utility;
|
|
|
|
namespace TechbloxModdingAPI.Blocks.Engines
|
|
{
|
|
/// <summary>
|
|
/// Engine which executes block movement actions
|
|
/// </summary>
|
|
public class RotationEngine : IApiEngine
|
|
{
|
|
public string Name { get; } = "TechbloxModdingAPIRotationGameEngine";
|
|
|
|
public EntitiesDB entitiesDB { set; private get; }
|
|
|
|
public bool isRemovable => false;
|
|
|
|
public bool IsInGame = false;
|
|
|
|
public void Dispose()
|
|
{
|
|
IsInGame = false;
|
|
}
|
|
|
|
public void Ready()
|
|
{
|
|
IsInGame = true;
|
|
}
|
|
|
|
// implementations for Rotation static class
|
|
|
|
internal float3 RotateBlock(Block block, Vector3 vector)
|
|
{
|
|
ref RotationEntityStruct rotStruct = ref this.entitiesDB.QueryEntityOrDefault<RotationEntityStruct>(block);
|
|
ref GridRotationStruct gridStruct = ref this.entitiesDB.QueryEntityOrDefault<GridRotationStruct>(block);
|
|
ref LocalTransformEntityStruct transStruct = ref this.entitiesDB.QueryEntityOrDefault<LocalTransformEntityStruct>(block);
|
|
ref DOTSPhysicsEntityStruct phyStruct = ref this.entitiesDB.QueryEntityOrDefault<DOTSPhysicsEntityStruct>(block);
|
|
// main (persistent) rotation
|
|
Quaternion newRotation = rotStruct.rotation;
|
|
newRotation.eulerAngles = vector;
|
|
rotStruct.rotation = newRotation;
|
|
// placement grid rotation
|
|
gridStruct.rotation = newRotation;
|
|
// rendered rotation
|
|
transStruct.rotation = newRotation;
|
|
// collision rotation
|
|
if (phyStruct.ID != default)
|
|
{ //It exists
|
|
FullGameFields._physicsWorld.EntityManager.SetComponentData(phyStruct.dotsEntity,
|
|
new Unity.Transforms.Rotation
|
|
{
|
|
Value = rotStruct.rotation
|
|
});
|
|
}
|
|
|
|
entitiesDB.QueryEntityOrDefault<GridConnectionsEntityStruct>(block).isProcessed = false;
|
|
return ((Quaternion)rotStruct.rotation).eulerAngles;
|
|
|
|
}
|
|
|
|
internal float3 GetRotation(Block block)
|
|
{
|
|
ref RotationEntityStruct rotStruct = ref entitiesDB.QueryEntityOrDefault<RotationEntityStruct>(block);
|
|
return ((Quaternion) rotStruct.rotation).eulerAngles;
|
|
}
|
|
}
|
|
}
|