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
65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
using RobocraftX.Common;
|
|
using RobocraftX.UECS;
|
|
using Svelto.ECS;
|
|
using Svelto.ECS.EntityStructs;
|
|
using Unity.Transforms;
|
|
using Unity.Mathematics;
|
|
|
|
using GamecraftModdingAPI.Utility;
|
|
using GamecraftModdingAPI.Engines;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
/// <summary>
|
|
/// Engine which executes block movement actions
|
|
/// </summary>
|
|
public class MovementEngine : IApiEngine
|
|
{
|
|
public string Name { get; } = "GamecraftModdingAPIMovementGameEngine";
|
|
|
|
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 Movement static class
|
|
|
|
public float3 MoveBlock(EGID blockID, float3 vector)
|
|
{
|
|
ref PositionEntityStruct posStruct = ref this.entitiesDB.QueryEntity<PositionEntityStruct>(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
|
|
posStruct.position = vector;
|
|
// placement grid position
|
|
gridStruct.position = vector;
|
|
// rendered position
|
|
transStruct.position = vector;
|
|
// collision position
|
|
FullGameFields._physicsWorld.EntityManager.SetComponentData(phyStruct.uecsEntity, new Translation
|
|
{
|
|
Value = posStruct.position
|
|
});
|
|
entitiesDB.QueryEntity<GridConnectionsEntityStruct>(blockID).isProcessed = false;
|
|
return posStruct.position;
|
|
}
|
|
|
|
public float3 GetPosition(EGID blockID)
|
|
{
|
|
ref PositionEntityStruct posStruct = ref this.entitiesDB.QueryEntity<PositionEntityStruct>(blockID);
|
|
return posStruct.position;
|
|
}
|
|
}
|
|
}
|