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
83 lines
2.5 KiB
C#
83 lines
2.5 KiB
C#
using System;
|
|
|
|
using RobocraftX.Blocks;
|
|
using Svelto.ECS;
|
|
using Unity.Mathematics;
|
|
|
|
using GamecraftModdingAPI.Utility;
|
|
using RobocraftX.Common;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
public class Piston : Block
|
|
{
|
|
/// <summary>
|
|
/// Places a new piston.
|
|
/// Any valid piston type is accepted.
|
|
/// This re-implements Block.PlaceNew(...)
|
|
/// </summary>
|
|
public static new Piston PlaceNew(BlockIDs block, float3 position,
|
|
float3 rotation = default, BlockColors color = BlockColors.Default, byte darkness = 0,
|
|
int uscale = 1, float3 scale = default, Player player = null)
|
|
{
|
|
if (!(block == BlockIDs.ServoPiston || block == BlockIDs.StepperPiston || block == BlockIDs.PneumaticPiston))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {typeof(Piston).Name} block");
|
|
}
|
|
if (PlacementEngine.IsInGame && GameState.IsBuildMode())
|
|
{
|
|
EGID id = PlacementEngine.PlaceBlock(block, color, darkness,
|
|
position, uscale, scale, player, rotation);
|
|
return new Piston(id);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public Piston(EGID id) : base(id)
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<PistonReadOnlyStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
public Piston(uint id) : base(new EGID(id, CommonExclusiveGroups.BUILD_PISTON_BLOCK_GROUP))
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<PistonReadOnlyStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
// custom piston properties
|
|
|
|
/// <summary>
|
|
/// The piston's max extension distance.
|
|
/// </summary>
|
|
public float MaximumExtension
|
|
{
|
|
get => BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(Id).maxDeviation;
|
|
|
|
set
|
|
{
|
|
ref PistonReadOnlyStruct piston = ref BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(Id);
|
|
piston.maxDeviation = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The piston's max extension force.
|
|
/// </summary>
|
|
public float MaximumForce
|
|
{
|
|
get => BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(Id).maxForce;
|
|
|
|
set
|
|
{
|
|
ref PistonReadOnlyStruct piston = ref BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(Id);
|
|
piston.maxForce = value;
|
|
}
|
|
}
|
|
}
|
|
}
|