using System; using Unity.Mathematics; using Svelto.ECS; using GamecraftModdingAPI.Utility; namespace GamecraftModdingAPI.Blocks { /// /// Common block placement operations. /// The functionality in this class is for build mode. /// public static class Placement { private static PlacementEngine placementEngine = new PlacementEngine(); /// /// Place a new block at the given position. If scaled, position means the center of the block. The default block size is 0.2 in terms of position. /// Place blocks next to each other to connect them. /// The placed block will be a complete block with a placement grid and collision which will be saved along with the game. /// /// The block's type /// The block's color /// The block color's darkness (0-9) - 0 is default color /// The block's position in the grid - default block size is 0.2 /// The block's rotation in degrees /// The block's uniform scale - default scale is 1 (with 0.2 width) /// The block's non-uniform scale - 0 means is used /// The player who placed the block /// The placed block's ID or null if failed public static EGID? PlaceBlock(BlockIDs block, float3 position, float3 rotation = default, BlockColors color = BlockColors.Default, byte darkness = 0, int uscale = 1, float3 scale = default, uint playerId = 0) { if (placementEngine.IsInGame && GameState.IsBuildMode()) { try { return placementEngine.PlaceBlock(block, color, darkness, position, uscale, scale, playerId, rotation); } catch (Exception e) { Logging.MetaDebugLog(e); } } return null; } public static void Init() { GameEngineManager.AddGameEngine(placementEngine); } } }