Castle Territory Service
The Castle Territory Service provides functionality for managing and querying castle territories (plots) in the game world. It handles territory ownership, block coordinates, and castle heart relationships.
Key Features
- Territory block coordinate mapping and lookups
- Castle heart entity tracking per territory
- Position-to-territory conversion utilities
- Territory alignment management
Usage Examples
// Get territory for an entity's position
Entity entity = /* ... */;
if (castleTerritoryService.TryGetCastleTerritory(entity, out var territoryEntity))
{
// Entity is within a territory
}
// Check territory index at a position
float3 position = /* ... */;
int territoryIndex = castleTerritoryService.GetTerritoryIndex(position);
// Get castle heart for a territory
Entity heart = castleTerritoryService.GetHeartForTerritory(territoryIndex);
Territory Alignment
Territories can have different alignments that determine their relationship to players:
Friendly
- Territory controlled by the player or alliesEnemy
- Territory controlled by hostile forcesNeutral
- Territory not aligned with any factionNone
- Territory with no assigned alignment
Position Conversion
The service provides utilities for converting between world positions and territory coordinates:
// Convert world position to grid position
float3 gridPos = CastleTerritoryService.ConvertPosToGrid(worldPos);
// Convert world position to block coordinate
int2 blockCoord = CastleTerritoryService.ConvertPosToBlockCoord(worldPos);
Implementation Details
The service maintains dictionaries mapping block coordinates to territory indices and entities. It initializes by loading all castle territories and their blocks on creation.
Territory blocks use a fixed size of 10 units and positions are converted to a grid system for consistent territory mapping.