private bool CanExecute(UnitAction action, World.Maps.HexPoint focus) { switch (action) { case UnitAction.Found: if (Game.GetCityAt(focus) != null) return false; foreach( HexPoint pt in focus.Neighbors ) if (Game.GetCityAt(pt) != null) return false; return true; case UnitAction.BuildRoad: if (road == null) road = Provider.GetImprovement("Road"); return !Game.Map[focus].Improvements.Contains(road); case UnitAction.BuildFarm: if (road == null) road = Provider.GetImprovement("Farm"); return !Game.Map[focus].Improvements.Contains(farm); } return false; }
public void UpdateImprovements() { if (farm == null) farm = Provider.GetImprovement("Farm"); _roadMesh.Clear(); _farmMesh.Clear(); // now the tiles for (int i = 0; i < _map.Width; i++) { for (int j = 0; j < _map.Height; j++) { if (_map[i, j] == null) continue; int roadTileIndex = _map.GetRoadTileIndex(i, j); if (roadTileIndex != -1) _roadMesh.AddObject(new HexagonMeshItem8X8(MapData.GetWorldPosition(i, j), roadTileIndex), false); if( _map[i,j].Improvements.Contains(farm) ) _farmMesh.AddObject(new HexagonMeshItem8X8(MapData.GetWorldPosition(i, j), 1), false); } } _roadMesh.UpdateBuffers(); _farmMesh.UpdateBuffers(); }
public void Execute(UnitAction _action) { switch (_action) { case UnitAction.Idle: break; case UnitAction.Found: Found(); break; case UnitAction.Move: SelectTarget(); break; case UnitAction.BuildRoad: if (road == null) road = Provider.GetImprovement("Road"); Build(road); break; case UnitAction.BuildFarm: if (farm == null) farm = Provider.GetImprovement("Farm"); Build(farm); break; default: throw new Exception("No handle for " + _action); } UpdateUnitAction(); }
public void Build(Improvement imp) { if (imp == null) throw new NullReferenceException(); _currentWork = imp; _currentWorkProgress = 0; }
public bool CanBuildRoad() { if (road == null) road = Provider.GetImprovement("Road"); return CanBuild(road); }
public bool CanBuild(Improvement imp) { if (MainWindow.Game == null) return false; if (MainWindow.Game.Map == null) return false; if (Map[Point].Improvements.Contains(imp)) return false; if (!imp.Terrains.Contains(Map[Point].Terrain)) return false; if (Map[Point].Features.Count > 0) { bool hasFeature = false; foreach (Feature feature in Map[Point].Features) hasFeature |= imp.FeatureNames.Contains(feature.Name); if (!hasFeature) return false; } if (!string.IsNullOrEmpty(imp.RequiredTech)) { if (!Player.Technologies.Contains(Provider.GetTech(imp.RequiredTech))) return false; } // look at road map return true; }