mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-10-09 16:46:09 +00:00
no message
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
|
||||
namespace HPJ.Simulation.Map
|
||||
{
|
||||
public class AgentMap
|
||||
{
|
||||
/// <summary>
|
||||
/// Base map related to this map
|
||||
/// </summary>
|
||||
public Map Base { get; protected set; }
|
||||
/// <summary>
|
||||
/// Tile that descripe the agent ownership
|
||||
/// </summary>
|
||||
public ushort[,] Tiles { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the agent map based on the base map
|
||||
/// </summary>
|
||||
/// <param name="baseMap"></param>
|
||||
public AgentMap(Map baseMap)
|
||||
{
|
||||
Base = baseMap;
|
||||
|
||||
Tiles = new ushort[baseMap.Settings.MapWidth, baseMap.Settings.MapHeight];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disowns this tile so other agents can claim it or to know its availible
|
||||
/// </summary>
|
||||
/// <param name="ownedTile"></param>
|
||||
public void DisownTile(IntVector2 ownedTile, ushort ID)
|
||||
{
|
||||
if (ownedTile.x < 0 || ownedTile.y < 0 || ownedTile.x >= Base.Settings.MapWidth || ownedTile.y >= Base.Settings.MapHeight)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Tiles[ownedTile.x, ownedTile.y] == ID)
|
||||
{
|
||||
Tiles[ownedTile.x, ownedTile.y] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to claim a tile for a specified ID
|
||||
/// </summary>
|
||||
/// <param name="newTilePosition"></param>
|
||||
/// <param name="ID"></param>
|
||||
/// <returns></returns>
|
||||
public bool ClaimTile(IntVector2 newTilePosition, ushort ID)
|
||||
{
|
||||
if (newTilePosition.x < 0 || newTilePosition.y < 0 || newTilePosition.x >= Base.Settings.MapWidth || newTilePosition.y >= Base.Settings.MapHeight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Tiles[newTilePosition.x, newTilePosition.y] == 0)
|
||||
{
|
||||
Tiles[newTilePosition.x, newTilePosition.y] = ID;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool IsBlocked(int x, int y, ushort CompareID)
|
||||
{
|
||||
return Tiles[x, y] != 0 && Tiles[x, y] != CompareID;
|
||||
}
|
||||
|
||||
public bool ValidTileForAgent(ushort simNavigationAgentID, int x, int y)
|
||||
{
|
||||
if (Tiles[x, y] == 0 || Tiles[x, y] == simNavigationAgentID)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user