NorbiPeti
f403feb298
Removed BlockIdentifiers.OWNED_BLOCKS as the original got replaced with an array Added the correct group for each supported functional block Removed EntityFactory property from IEntitySerializer as it is provided on deserialization
72 lines
2.6 KiB
C#
72 lines
2.6 KiB
C#
using RobocraftX.Common;
|
|
using RobocraftX.UECS;
|
|
using Svelto.ECS;
|
|
using Svelto.ECS.EntityStructs;
|
|
using Unity.Mathematics;
|
|
using UnityEngine;
|
|
|
|
using GamecraftModdingAPI.Utility;
|
|
using GamecraftModdingAPI.Engines;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
/// <summary>
|
|
/// Engine which executes block movement actions
|
|
/// </summary>
|
|
public class RotationEngine : IApiEngine
|
|
{
|
|
public string Name { get; } = "GamecraftModdingAPIRotationGameEngine";
|
|
|
|
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
|
|
|
|
public float3 RotateBlock(EGID blockID, Vector3 vector)
|
|
{
|
|
ref RotationEntityStruct rotStruct = ref this.entitiesDB.QueryEntity<RotationEntityStruct>(blockID);
|
|
ref GridRotationStruct gridStruct = ref this.entitiesDB.QueryEntity<GridRotationStruct>(blockID);
|
|
ref LocalTransformEntityStruct transStruct = ref this.entitiesDB.QueryEntity<LocalTransformEntityStruct>(blockID);
|
|
ref UECSPhysicsEntityStruct phyStruct = ref this.entitiesDB.QueryEntity<UECSPhysicsEntityStruct>(blockID);
|
|
// main (persistent) position
|
|
Quaternion newRotation = (Quaternion)rotStruct.rotation;
|
|
newRotation.eulerAngles += vector;
|
|
rotStruct.rotation = (quaternion)newRotation;
|
|
// placement grid rotation
|
|
Quaternion newGridRotation = (Quaternion)gridStruct.rotation;
|
|
newGridRotation.eulerAngles += vector;
|
|
gridStruct.rotation = (quaternion)newGridRotation;
|
|
// rendered position
|
|
Quaternion newTransRotation = (Quaternion)rotStruct.rotation;
|
|
newTransRotation.eulerAngles += vector;
|
|
transStruct.rotation = newTransRotation;
|
|
// collision position
|
|
FullGameFields._physicsWorld.EntityManager.SetComponentData(phyStruct.uecsEntity, new Unity.Transforms.Rotation
|
|
{
|
|
Value = rotStruct.rotation
|
|
});
|
|
entitiesDB.QueryEntity<GridConnectionsEntityStruct>(blockID).isProcessed = false;
|
|
return ((Quaternion)rotStruct.rotation).eulerAngles;
|
|
|
|
}
|
|
|
|
public float3 GetRotation(EGID blockID)
|
|
{
|
|
ref RotationEntityStruct rotStruct = ref entitiesDB.QueryEntity<RotationEntityStruct>(blockID);
|
|
return ((Quaternion) rotStruct.rotation).eulerAngles;
|
|
}
|
|
}
|
|
}
|