コード例 #1
0
ファイル: UnitObject.cs プロジェクト: popcron/civclone
    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();
    }
コード例 #2
0
ファイル: CanvasLayerInGame.cs プロジェクト: popcron/civclone
    private void Awake()
    {
        instance = this;

        unitPanel.SetActive(false);
        unitAction.gameObject.SetActive(false);

        cityPanel.SetActive(false);
        cityAction.gameObject.SetActive(false);
    }
コード例 #3
0
ファイル: GameManager.cs プロジェクト: popcron/civclone
    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();
    }
コード例 #4
0
ファイル: UnitObject.cs プロジェクト: popcron/civclone
 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();
         }
     }
 }
コード例 #5
0
ファイル: GameManager.cs プロジェクト: popcron/civclone
    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;
    }
コード例 #6
0
ファイル: CanvasLayerInGame.cs プロジェクト: popcron/civclone
    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);
        }
    }
コード例 #7
0
ファイル: CanvasLayerInGame.cs プロジェクト: popcron/civclone
 private void OnEnable()
 {
     instance = this;
 }
コード例 #8
0
ファイル: GameManager.cs プロジェクト: popcron/civclone
    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;
    }