public void PerformAction(Task task) { Debug.Log("Perform Action"); if (task.loseTurn) { moves = 0; } for (int i = 0; i < task.actions.Count; i++) { switch (task.actions[i].type) { case Task.ActionType.CreateImprovement: GameManager.PlaceImprovement(task.actions[i].value, Tile, this); break; case Task.ActionType.DestroySelf: Destroy(gameObject); break; case Task.ActionType.ClaimTerritory: ClaimTile(); break; } } CanvasLayerInGame.RefreshSelectedTile(); }
private void Awake() { instance = this; unitPanel.SetActive(false); unitAction.gameObject.SetActive(false); cityPanel.SetActive(false); cityAction.gameObject.SetActive(false); }
public static void Play() { Config.GameSave = new ConfigGameSave { nation = Config.GameSave.nation, map = Config.GameSave.map }; MapManager.Load(Config.GameSave.map); WorldManager.Generate(MapManager.LoadedMap); CanvasManager.Layer = "InGame"; CameraManager.Focus(); CanvasLayerInGame.RefreshSelectedTile(); CanvasPanelMap.Refresh(); }
private void OnDestroy() { if (Application.isPlaying) { if (City) { City.Remove(this); } if (tile) { tile.Exit(this); } if (Config.Temporary != null && Config.Temporary.selectedUnit == this) { Config.Temporary.selectedUnit = null; CanvasLayerInGame.RefreshSelectedTile(); } } }
public void NextTurn() { var turnWaiters = FindObjectsOfType <MonoBehaviour>(); for (int i = 0; i < turnWaiters.Length; i++) { if (turnWaiters[i] is ITurnWaiter) { ((ITurnWaiter)turnWaiters[i]).NewTurn(); } } CanvasLayerInGame.RefreshSelectedTile(); Config.GameSave.turn++; Config.GameSave.science += Config.GameSave.sciencePerTurn; Config.GameSave.gold += Config.GameSave.goldPerTurn; Config.GameSave.faith += Config.GameSave.faithPerTurn; Config.GameSave.culture += Config.GameSave.culturePerTurn; }
public static void RefreshSelectedTile() { if (!instance) { instance = FindObjectOfType <CanvasLayerInGame>(); } if (!Config.Temporary.selectedTile) { return; } if (instance.lastSelectedTile != Config.Temporary.selectedTile) { instance.selectedIndex = 0; instance.lastSelectedTile = Config.Temporary.selectedTile; } else { instance.selectedIndex++; if (instance.selectedIndex >= Config.Temporary.selectedTile.Units.Count + Config.Temporary.selectedTile.Improvements.Count) { instance.selectedIndex = 0; } } if (Config.Temporary.selectedTile.Units.Count + Config.Temporary.selectedTile.Improvements.Count > 0) { if (Config.Temporary.selectedTile.Units.Count > instance.selectedIndex) { //unit interface Config.Temporary.selectedImprovement = null; Config.Temporary.selectedUnit = Config.Temporary.selectedTile.Units[instance.selectedIndex]; instance.unitPanel.SetActive(true); instance.cityPanel.SetActive(false); instance.unitPanelName.text = Config.Temporary.selectedUnit.Unit.name; CanvasButtonAction[] buttons = instance.unitPanel.transform.GetComponentsInChildren <CanvasButtonAction>(); for (int i = 0; i < buttons.Length; i++) { if (buttons[i] != instance.unitAction) { Destroy(buttons[i].gameObject); } } for (int i = 0; i < Config.Temporary.selectedUnit.Unit.tasks.Count; i++) { CanvasButtonAction newButton = Instantiate(instance.unitAction.gameObject).GetComponent <CanvasButtonAction>(); newButton.transform.SetParent(instance.unitPanel.transform); newButton.gameObject.SetActive(true); newButton.RectTransform.anchoredPosition = new Vector2(0, i * 30); newButton.RectTransform.sizeDelta = new Vector2(0, 30); newButton.Initialize(Config.Temporary.selectedUnit.Unit.tasks[i], Config.Temporary.selectedUnit); } } else if (Config.Temporary.selectedTile.Improvements.Count > instance.selectedIndex - Config.Temporary.selectedTile.Units.Count) { Config.Temporary.selectedUnit = null; Config.Temporary.selectedImprovement = Config.Temporary.selectedTile.Improvements[instance.selectedIndex - Config.Temporary.selectedTile.Units.Count]; bool isCity = Config.Temporary.selectedImprovement is ImprovementObjectCapital || Config.Temporary.selectedImprovement is ImprovementObjectCity; if (isCity) { instance.unitPanel.SetActive(false); instance.cityPanel.SetActive(true); instance.cityPanelName.text = ((ImprovementObjectCity)Config.Temporary.selectedImprovement).cityName; } else { instance.unitPanel.SetActive(true); instance.cityPanel.SetActive(false); instance.unitPanelName.text = Config.Temporary.selectedImprovement.Improvement.name; } if (isCity) { //city interface CanvasButtonAction[] buttons = instance.cityPanel.transform.GetComponentsInChildren <CanvasButtonAction>(); for (int i = 0; i < buttons.Length; i++) { if (buttons[i] != instance.cityAction) { Destroy(buttons[i].gameObject); } } for (int i = 0; i < GameManager.Units.Count; i++) { CanvasButtonAction newButton = Instantiate(instance.cityAction.gameObject).GetComponent <CanvasButtonAction>(); newButton.transform.SetParent(instance.cityPanel.transform); newButton.gameObject.SetActive(true); Task.Action action = new Task.Action { type = Task.ActionType.ProduceUnit, value = GameManager.Units[i].name }; Task task = ScriptableObject.CreateInstance <Task>(); task.loseTurn = false; task.friendlyName = "Build " + GameManager.Units[i].name; task.actions.Add(action); newButton.RectTransform.anchoredPosition = new Vector2(0, i * -30); newButton.RectTransform.sizeDelta = new Vector2(0, 30); newButton.Initialize(task, Config.Temporary.selectedImprovement); } } else { //improvement interface CanvasButtonAction[] buttons = instance.unitPanel.transform.GetComponentsInChildren <CanvasButtonAction>(); for (int i = 0; i < buttons.Length; i++) { if (buttons[i] != instance.unitAction) { Destroy(buttons[i].gameObject); } } for (int i = 0; i < Config.Temporary.selectedImprovement.Improvement.tasks.Count; i++) { CanvasButtonAction newButton = Instantiate(instance.unitAction.gameObject).GetComponent <CanvasButtonAction>(); newButton.transform.SetParent(instance.unitPanel.transform); newButton.gameObject.SetActive(true); newButton.RectTransform.anchoredPosition = new Vector2(0, i * 30); newButton.RectTransform.sizeDelta = new Vector2(0, 30); newButton.Initialize(Config.Temporary.selectedImprovement.Improvement.tasks[i], Config.Temporary.selectedImprovement); } } } } else { Config.Temporary.selectedUnit = null; Config.Temporary.selectedImprovement = null; instance.unitPanel.SetActive(false); instance.cityPanel.SetActive(false); } }
private void OnEnable() { instance = this; }
private void HandleInput() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); TileObject tile = null; if (Physics.Raycast(ray, out hit)) { MousePosition = hit.point + Camera.main.transform.forward * 0.1f; HexCoordinate coordinates = HexCoordinate.FromPosition(MousePosition); int index = coordinates.X + coordinates.Z * Config.GameSave.width + coordinates.Z / 2; if (WorldManager.Tiles.Length > index && index >= 0) { tile = WorldManager.Tiles[index]; } else { tile = null; } } else { MousePosition = Vector3.zero; tile = null; } if (Input.GetMouseButtonUp(0) && !CameraManager.Dragging) { Config.Temporary.selectedTile = tile; CanvasLayerInGame.RefreshSelectedTile(); } if (Config.Temporary.selectedUnit) { if (Input.GetMouseButtonDown(1)) { path = WorldPathfinding.FindPath(Config.Temporary.selectedTile, tile).ToList(); } if (Input.GetMouseButton(1)) { if (tile) { Gizmos.DrawTile(tile.transform.position + Vector3.up * 0.05f, WorldManager.InnerRadius, Color.white); } if (lastTile != tile && tile) { var newPath = WorldPathfinding.FindPath(Config.Temporary.selectedTile, tile); if (newPath != null) { path = newPath.ToList(); } } if (path != null && tile) { for (int i = 0; i < path.Count; i++) { float size = (Mathf.Sin((Time.time + i * 0.2f) * 3f) + 5f) / 8f; Color color = Color.yellow; if (path.Count - i > Config.Temporary.selectedUnit.Moves + 1) { color = Color.red; } Gizmos.DrawTile(path[i].transform.position + Vector3.up * 0.05f, WorldManager.InnerRadius * size, color); } } } if (Input.GetMouseButtonUp(1)) { if (tile) { int movesToSub = 0; for (int i = 0; i < path.Count; i++) { if (i <= Config.Temporary.selectedUnit.Moves) { movesToSub++; Config.Temporary.selectedUnit.Tile = path[(path.Count - 1) - i]; Config.Temporary.selectedTile = path[(path.Count - 1) - i]; } } Config.Temporary.selectedUnit.Moves -= movesToSub - 1; CanvasLayerInGame.RefreshSelectedTile(); } } } lastTile = tile; }