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
119 lines
3.3 KiB
C#
119 lines
3.3 KiB
C#
using System;
|
|
|
|
using RobocraftX.Blocks;
|
|
using RobocraftX.Common;
|
|
using Gamecraft.Blocks.TimerBlock;
|
|
using Svelto.ECS;
|
|
using Unity.Mathematics;
|
|
|
|
using GamecraftModdingAPI;
|
|
using GamecraftModdingAPI.Utility;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
public class Timer : Block
|
|
{
|
|
/// <summary>
|
|
/// Places a new timer block.
|
|
/// </summary>
|
|
public static Timer PlaceNew(float3 position,
|
|
float3 rotation = default, BlockColors color = BlockColors.Default, byte darkness = 0,
|
|
int uscale = 1, float3 scale = default, Player player = null)
|
|
{
|
|
if (PlacementEngine.IsInGame && GameState.IsBuildMode())
|
|
{
|
|
EGID id = PlacementEngine.PlaceBlock(BlockIDs.Timer, color, darkness,
|
|
position, uscale, scale, player, rotation);
|
|
return new Timer(id);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public Timer(EGID id) : base(id)
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<TimerBlockDataStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
public Timer(uint id) : base(new EGID(id, CommonExclusiveGroups.BUILD_TIMER_BLOCK_GROUP))
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<TimerBlockDataStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
// custom timer properties
|
|
|
|
/// <summary>
|
|
/// The player-specified start time.
|
|
/// </summary>
|
|
public float Start
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id).startTime;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref TimerBlockDataStruct tbds = ref BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id);
|
|
tbds.startTime = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The player-specified end time.
|
|
/// </summary>
|
|
public float End
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id).endTime;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref TimerBlockDataStruct tbds = ref BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id);
|
|
tbds.endTime = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether to display time with millisecond precision.
|
|
/// </summary>
|
|
public bool DisplayMilliseconds
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id).outputFormatHasMS;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref TimerBlockDataStruct tbds = ref BlockEngine.GetBlockInfo<TimerBlockDataStruct>(Id);
|
|
tbds.outputFormatHasMS = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Current time (as of the last video frame), in milliseconds.
|
|
/// </summary>
|
|
public int CurrentTime
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<TimerBlockLabelCacheEntityStruct>(Id).timeLastRenderFrameMS;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref TimerBlockLabelCacheEntityStruct tblces = ref BlockEngine.GetBlockInfo<TimerBlockLabelCacheEntityStruct>(Id);
|
|
tblces.timeLastRenderFrameMS = value;
|
|
}
|
|
}
|
|
}
|
|
}
|