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
125 lines
3.7 KiB
C#
125 lines
3.7 KiB
C#
using System;
|
|
|
|
using RobocraftX.Blocks;
|
|
using RobocraftX.Common;
|
|
using Gamecraft.CharacterVulnerability;
|
|
using Svelto.ECS;
|
|
using Unity.Mathematics;
|
|
|
|
using GamecraftModdingAPI;
|
|
using GamecraftModdingAPI.Utility;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
public class SpawnPoint : Block
|
|
{
|
|
/// <summary>
|
|
/// Places a new spawn point.
|
|
/// Any valid spawn block type is accepted.
|
|
/// This re-implements Block.PlaceNew(...)
|
|
/// </summary>
|
|
public static new SpawnPoint 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.LargeSpawn || block == BlockIDs.SmallSpawn || block == BlockIDs.MediumSpawn || block == BlockIDs.PlayerSpawn))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {nameof(SpawnPoint)} block");
|
|
}
|
|
if (PlacementEngine.IsInGame && GameState.IsBuildMode())
|
|
{
|
|
EGID id = PlacementEngine.PlaceBlock(block, color, darkness,
|
|
position, uscale, scale, player, rotation);
|
|
return new SpawnPoint(id);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public SpawnPoint(EGID id) : base(id)
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<SpawnPointStatsEntityStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
public SpawnPoint(uint id) : base(new EGID(id, CommonExclusiveGroups.BUILD_SPAWNPOINT_BLOCK_GROUP))
|
|
{
|
|
if (!BlockEngine.GetBlockInfoExists<SpawnPointStatsEntityStruct>(this.Id))
|
|
{
|
|
throw new BlockTypeException($"Block is not a {this.GetType().Name} block");
|
|
}
|
|
}
|
|
|
|
// custom spawn point properties
|
|
|
|
/// <summary>
|
|
/// The lives the player spawns in with.
|
|
/// </summary>
|
|
public uint Lives
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id).lives;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref SpawnPointStatsEntityStruct spses = ref BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id);
|
|
spses.lives = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether the spawned player can take damage.
|
|
/// </summary>
|
|
public bool Damageable
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id).canTakeDamage;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref SpawnPointStatsEntityStruct spses = ref BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id);
|
|
spses.canTakeDamage = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether the game over screen will be displayed
|
|
/// </summary>
|
|
public bool GameOverEnabled
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id).gameOverScreen;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref SpawnPointStatsEntityStruct spses = ref BlockEngine.GetBlockInfo<SpawnPointStatsEntityStruct>(Id);
|
|
spses.gameOverScreen = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The team id for players who spawn here.
|
|
/// </summary>
|
|
public byte Team
|
|
{
|
|
get
|
|
{
|
|
return BlockEngine.GetBlockInfo<SpawnPointIdsEntityStruct>(Id).teamId;
|
|
}
|
|
|
|
set
|
|
{
|
|
ref SpawnPointIdsEntityStruct spses = ref BlockEngine.GetBlockInfo<SpawnPointIdsEntityStruct>(Id);
|
|
spses.teamId = value;
|
|
}
|
|
}
|
|
}
|
|
}
|