using System;
using Robust.Shared.GameObjects;
using Robust.Shared.Network.Messages;
namespace Robust.Server.Placement
{
[NotContentImplementable]
public interface IPlacementManager
{
///
/// Initializes this manager into a usable state.
///
void Initialize();
///
/// Handles placement related client messages.
///
void HandleNetMessage(MsgPlacement msg);
void HandlePlacementRequest(MsgPlacement msg);
///
/// Places mob in entity placement mode with given settings.
///
void SendPlacementBegin(EntityUid mob, int range, string objectType, string alignOption);
///
/// Places mob in tile placement mode with given settings.
///
void SendPlacementBeginTile(EntityUid mob, int range, string tileType, string alignOption);
///
/// Cancels object placement mode for given mob.
///
void SendPlacementCancel(EntityUid mob);
///
/// Gives Mob permission to place entity and places it in object placement mode.
///
void StartBuilding(EntityUid mob, int range, string objectType, string alignOption);
///
/// Gives Mob permission to place tile and places it in object placement mode.
///
void StartBuildingTile(EntityUid mob, int range, string tileType, string alignOption);
///
/// Revokes open placement Permission and cancels object placement mode.
///
void CancelBuilding(EntityUid mob);
///
/// Gives a mob a permission to place a given Entity.
///
void AssignBuildPermission(EntityUid mob, int range, string objectType, string alignOption);
///
/// Gives a mob a permission to place a given Tile.
///
void AssignBuildPermissionTile(EntityUid mob, int range, string tileType, string alignOption);
///
/// Removes all building Permissions for given mob.
///
void RevokeAllBuildPermissions(EntityUid mob);
Func? AllowPlacementFunc { get; set; }
}
}