public void RemoveInitialUnit(IntVector2 tileCoords, UnitDataReference unitDataReference) { TileMetadata.TileMetadata tileMetadata = GetTileMetadata(tileCoords); tileMetadata.units.RemoveAll(x => x.UnitIndex == unitDataReference.UnitIndex); _unitRemovedSubject.OnNext(Tuple.Create(tileCoords, unitDataReference)); ClearTileMetadataIfNecessary(tileCoords); }
private void HandleUnitPlacedAtTile(IUnit unit, IntVector2 tileCoords) { uint?unitIndex = _unitDataIndexResolver.ResolveUnitIndex(unit.UnitData); if (unitIndex == null) { _logger.LogError(LoggedFeature.Units, "Error adding unit with name: {0}. Index not resolved.", unit.UnitData.Name); return; } var unitDataReference = new UnitDataReference(unitIndex.Value, unit.UnitData.UnitType); _mapSectionData.AddInitialUnit(tileCoords, unitDataReference); }
private void SpawnUnit(UnitDataReference unitDataReference, IntVector2 tileCoords) { IUnitData unitData = _unitDataIndexResolver.ResolveUnitData(unitDataReference.UnitType, unitDataReference.UnitIndex); if (unitData == null) { _logger.LogError(LoggedFeature.Units, "UnitData reference not found: {0}", unitDataReference); return; } UnitCommandData unitCommandData = _unitCommandDataFactory.Create(unitData); SpawnUnitData spawnUnitData = new SpawnUnitData(unitCommandData, tileCoords, isInitialSpawn: true); _commandQueue.Enqueue <SpawnUnitCommand, SpawnUnitData>(spawnUnitData, CommandSource.Game); }
public void Remove() { uint?unitIndex = _unitDataIndexResolver.ResolveUnitIndex(_unit.UnitData); if (unitIndex == null) { _logger.LogError(LoggedFeature.Units, "Error removing unit with name: {0}. Index not resolved.", _unit.UnitData.Name); return; } var unitDataReference = new UnitDataReference(unitIndex.Value, _unit.UnitData.UnitType); _mapSectionData.RemoveInitialUnit(_tileCoords, unitDataReference); _commandQueue.Enqueue <DespawnUnitCommand, DespawnUnitData>(new DespawnUnitData(_unit.UnitId), CommandSource.Game); }
public void HandleDrag(IntVector2 tileCoords) { uint?unitIndex = _unitDataIndexResolver.ResolveUnitIndex(_unit.UnitData); if (unitIndex == null) { _logger.LogError(LoggedFeature.Units, "Error dragging unit with name: {0}. Index not resolved.", _unit.UnitData.Name); return; } var unitDataReference = new UnitDataReference(unitIndex.Value, _unit.UnitData.UnitType); _mapSectionData.RemoveInitialUnit(_tileCoords, unitDataReference); var tileDistance = tileCoords - _tileCoords; _tileCoords = tileCoords; _commandQueue.Enqueue <MoveUnitCommand, MoveUnitData>(new MoveUnitData(_unit.UnitId, tileDistance), CommandSource.Game); _mapSectionData.AddInitialUnit(_tileCoords, unitDataReference); }
public UnitCommandData(SerializationInfo info, StreamingContext context) { unitDataReference = (UnitDataReference)info.GetValue("unitDataReference", typeof(UnitDataReference)); unitId = (UnitId)info.GetValue("unitId", typeof(UnitId)); pets = (UnitCommandData[])info.GetValue("pets", typeof(UnitCommandData[])); }
public UnitCommandData(UnitId unitId, uint unitIndex, UnitType unitType, UnitCommandData[] pets) { this.unitId = unitId; this.unitDataReference = new UnitDataReference(unitIndex, unitType); this.pets = pets; }
public void AddInitialUnit(IntVector2 tileCoords, UnitDataReference unitDataReference) { TileMetadata.TileMetadata tileMetadata = GetTileMetadata(tileCoords); tileMetadata.units.Add(unitDataReference); _unitAddedSubject.OnNext(Tuple.Create(tileCoords, unitDataReference)); }