Beispiel #1
0
 public void MaskPlayer(PlayerInfo player)
 {
     UnitPiece[] pieces = new UnitPiece[player.Pieces.Count];
     player.Pieces.CopyTo(pieces, 0);
     for (int i = 0; i < pieces.Length; i++)
     {
         BoardPosition boardPosition = UnitManager.GetPositionForUnitPiece(pieces[i]);
         Transform     transform     = BoardManager.GetTransformForPosition(boardPosition);
         Vector3       coverPosition = transform.position;
         coverPosition.z = GOLayer.COVER_LAYER;
         GameObject cover = covers[i];
         if (cover.activeInHierarchy)
         {
             for (int j = i + 1; j < covers.Count; j++)
             {
                 cover = covers[j];
                 if (!cover.activeInHierarchy)
                 {
                     break;
                 }
             }
         }
         cover.transform.position = coverPosition;
         cover.SetActive(true);
         coverBoardPositions.Add(boardPosition, cover);
     }
 }
Beispiel #2
0
    public void RemoveUnit(Point position)
    {
        UnitPiece unit = unitGrid[position.x, position.y];

        initiativeOrder.Remove(unit);
        if (unit.unit.faction == Faction.Player)
        {
            fallenUnits.Add(unit.identifier);
            army.Remove(unit);
        }
        else
        {
            monsters.Remove(unit);
        }
        unitGrid[position.x, position.y] = null;
        unit.Die();

        // Player has lost all units
        if (army.Count == 0)
        {
            StartCoroutine(combatManager.EndCombat(false));
        }

        // No enemies left
        else if (monsters.Count == 0)
        {
            StartCoroutine(combatManager.EndCombat(true));
        }
    }
Beispiel #3
0
 public UnitBattleResultEvent(UnitPiece attacker, UnitPiece defender, BoardPosition attackerPosition, BoardPosition defenderPosition, BattleResult result) : base(attacker)
 {
     this.defender         = defender;
     this.result           = result;
     this.attackerPosition = attackerPosition;
     this.defenderPosition = defenderPosition;
 }
Beispiel #4
0
    public override void Perform(CombatMap map, Point trigger)
    {
        owner.Energy(-cost);
        UnitPiece target = map.unitManager.GetUnit(trigger);

        target.Damage(owner, Random.Range(damage, maxDamage + 1));
    }
Beispiel #5
0
    TargetType IsValidTarget(CombatMap map, Point point)
    {
        switch (canTarget)
        {
        case Target.anything:
            return(TargetType.Valid);

        case Target.creature:
            if (map.unitManager.GetUnit(point) != null)
            {
                return(TargetType.Valid);
            }
            return(TargetType.NotValid);

        case Target.enemy:
            UnitPiece unit = map.unitManager.GetUnit(point);
            if (unit != null && unit.unit.IsEnemy(owner))
            {
                return(TargetType.Valid);
            }
            return(TargetType.NotValid);

        case Target.ally:
            unit = map.unitManager.GetUnit(point);
            if (unit != null && unit.unit.IsFriendly(owner))
            {
                return(TargetType.Valid);
            }
            return(TargetType.NotValid);
        }

        return(TargetType.NotValid);
    }
Beispiel #6
0
 public void HandleBattle(UnitPiece attacker, BoardPosition attackerPosition, UnitPiece defender, BoardPosition defenderPosition)
 {
     BattleResult result = UnitUtilities.ResolveBattle(attacker.Rank, defender.Rank);
     // Based on result, update players
     switch (result)
     {
         case BattleResult.Success:
             {
                 // Remove from defender owner
                 defender.Owner.Pieces.Remove(defender);
                 break;
             }
         case BattleResult.Fail:
             {
                 // Remove from attacker owner
                 attacker.Owner.Pieces.Remove(attacker);
                 break;
             }
         case BattleResult.Split:
             {
                 //Remove both
                 attacker.Owner.Pieces.Remove(attacker);
                 defender.Owner.Pieces.Remove(defender);
                 break;
             }
         default:
             {
                 break;
             }
     }
     EventManager.Raise(new UnitBattleResultEvent(attacker, defender, attackerPosition, defenderPosition, result));
     turnComplete = true;
 }
Beispiel #7
0
 public void MaskPlayer(PlayerInfo player)
 {
     UnitPiece[] pieces = new UnitPiece[player.Pieces.Count];
     player.Pieces.CopyTo(pieces, 0);
     for (int i = 0; i < pieces.Length; i++)
     {
         BoardPosition boardPosition = UnitManager.GetPositionForUnitPiece(pieces[i]);
         Transform transform = BoardManager.GetTransformForPosition(boardPosition);
         Vector3 coverPosition = transform.position;
         coverPosition.z = GOLayer.COVER_LAYER;
         GameObject cover = covers[i];
         if (cover.activeInHierarchy)
         {
             for (int j = i + 1; j < covers.Count; j++)
             {
                 cover = covers[j];
                 if (!cover.activeInHierarchy)
                 {
                     break;
                 }
             }
         }
         cover.transform.position = coverPosition;
         cover.SetActive(true);
         coverBoardPositions.Add(boardPosition, cover);
     }
 }
Beispiel #8
0
 public void RemoveFromLocation(UnitPiece u, BasePiece b)
 {
     if (unitsInOrbit.ContainsKey(b))
     {
         unitsInOrbit[b].Remove(u);
     }
     b.UnitsInOrbit.Remove(u);
 }
 public UnitBattleResultEvent(UnitPiece attacker, UnitPiece defender, BoardPosition attackerPosition, BoardPosition defenderPosition, BattleResult result)
     : base(attacker)
 {
     this.defender = defender;
     this.result = result;
     this.attackerPosition = attackerPosition;
     this.defenderPosition = defenderPosition;
 }
Beispiel #10
0
 public void AddToLocation(UnitPiece u, BasePiece b)
 {
     if (!unitsInOrbit.ContainsKey(b))
     {
         unitsInOrbit.Add(b, new List <UnitPiece>());
     }
     unitsInOrbit[b].Add(u);
     b.UnitsInOrbit.Add(u);
 }
Beispiel #11
0
    private void SpawnUnit(Vector3 position)
    {
        GameObject obj = Object.Instantiate(GameManager.manager.unitObject, position, Quaternion.identity);

        obj.layer = owner.data.layer;
        UnitPiece unit = new UnitPiece(owner, obj);

        owner.AddUnit(unit);
    }
Beispiel #12
0
    public void PerformAction()
    {
        //Debug.Log("AI Action");
        // Collect units
        List <UnitPiece> army     = unitManager.army;
        List <UnitPiece> monsters = unitManager.monsters;

        // Can best attack somebody?
        UnitPiece piece = unitManager.selectedUnit;

        Action[] actions    = piece.unit.actions;
        int      bestAction = -1;
        Point    targetTile = new Point(-1, -1);

        for (int i = 0; i < actions.Length; i++)
        {
            if (actions[i] == null || !actions[i].CanUse())
            {
                continue;
            }

            List <TargetTile> targets = piece.unit.actions[i].GetTargets(map, false);

            if (targets.Count > 0)
            {
                // Do something
                if (bestAction == -1)
                {
                    bestAction = i;
                    targetTile = targets[Random.Range(0, targets.Count)].point;
                }

                // Prefer hostile actions
                else if (actions[i].IsHostile() && !actions[bestAction].IsHostile())
                {
                    bestAction = i;
                    targetTile = targets[Random.Range(0, targets.Count)].point;
                }

                // Prefer expensive actions
                else if (actions[i].IsHostile() == actions[bestAction].IsHostile() && actions[i].cost > actions[bestAction].cost)
                {
                    bestAction = i;
                    targetTile = targets[Random.Range(0, targets.Count)].point;
                }
            }
        }

        if (bestAction >= 0)
        {
            unitManager.SelectAction(bestAction);
            unitManager.PerformAction(targetTile);
            return;
        }

        combatManager.EndTurn();
    }
Beispiel #13
0
    public UnitPiece GetUnitPieceForPosition(BoardPosition position)
    {
        UnitPiece piece = default(UnitPiece);

        if (!pieces.TryGetValue(position, out piece))
        {
            piece = UnitPiece.UNKNOWN;
        }
        return(piece);
    }
Beispiel #14
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit[] hits = Physics.RaycastAll(mainCamera.ScreenPointToRay(Input.mousePosition), 50, mask);

        bool          selectable = false;
        BoardPosition position   = BoardPosition.OFF_BOARD;
        UnitPiece     unit       = UnitPiece.UNKNOWN;
        Vector3       tileVector = Vector3.zero;

        if (hits.Length == 0)
        {
            hoverCube.SetActive(false);
        }
        else
        {
            // Find the board first
            foreach (RaycastHit hit in hits)
            {
                if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Board"))
                {
                    position   = BoardManager.GetPositionForGO(hit.transform.gameObject);
                    selectable = BoardManager.PositionIsSelectable(position);
                    tileVector = hit.transform.position;
                    if (selectable && !action)
                    {
                        MoveHover(hit.transform.position);
                    }
                    else
                    {
                        hoverCube.SetActive(false);
                    }
                    break;
                }
            }
            // Because there's no order to raycast hit result, check if we hit a piece
            foreach (RaycastHit hit in hits)
            {
                if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Pieces"))
                {
                    unit = UnitManager.GetUnitPieceForPosition(position);
                    break;
                }
            }
        }

        //Handle input based on game mode
        if (GameManager.CurrentMode.Equals(GameMode.PlayerOneSetup) || GameManager.CurrentMode.Equals(GameMode.PlayerTwoSetup))
        {
            HandleSetup(hits, selectable, position, unit, tileVector);
        }
        if (!action && (GameManager.CurrentMode.Equals(GameMode.PlayerOne) || GameManager.CurrentMode.Equals(GameMode.PlayerTwo)))
        {
            HandleGame(hits, selectable, position, unit, tileVector);
        }
    }
Beispiel #15
0
    public void HandleGameModeChange(GameModeChangedEvent e)
    {
        if (!flagAtEnd.ContainsKey(GameManager.PlayerOne))
        {
            flagAtEnd.Add(GameManager.PlayerOne, 0);
        }
        if (!flagAtEnd.ContainsKey(GameManager.PlayerTwo))
        {
            flagAtEnd.Add(GameManager.PlayerTwo, 0);
        }

        if (e.Current.Equals(GameMode.PlayerTransition))
        {
            moveWithoutChallengeCount++;
            moveCount++;
        }
        else if (e.Current.Equals(GameMode.PlayerOne) || e.Current.Equals(GameMode.PlayerTwo))
        {
            bool draw = false;
            //Check no challenge rule
            if (NoChallengeRule && moveWithoutChallengeCount >= MoveWithoutChallengeLimit)
            {
                draw = true;
                win  = true;
            }
            if (!draw)
            {
                //Check for flag
                for (int i = 0; i < 9; i++)
                {
                    UnitPiece piece = UnitManager.GetUnitPieceForPosition(new BoardPosition(0, i));
                    if (piece.Rank.Equals(UnitRank.Flag) && piece.Owner.Equals(GameManager.PlayerTwo))
                    {
                        flagAtEnd[piece.Owner]++;
                    }

                    piece = UnitManager.GetUnitPieceForPosition(new BoardPosition(7, i));
                    if (piece.Rank.Equals(UnitRank.Flag) && piece.Owner.Equals(GameManager.PlayerOne))
                    {
                        flagAtEnd[piece.Owner]++;
                    }
                }
                foreach (KeyValuePair <PlayerInfo, int> pair in flagAtEnd)
                {
                    if (pair.Value >= 1)
                    {
                        //Meets win condition
                        win    = true;
                        winner = pair.Key;
                    }
                }
            }
        }
    }
Beispiel #16
0
    public override void Perform(CombatMap map, Point trigger)
    {
        owner.Energy(-cost);
        //owner.Armor(value);
        UnitPiece target = map.unitManager.GetUnit(trigger);

        if (target != null)
        {
            target.Effect(attribute, Random.Range(value, maxValue + 1));
        }
    }
Beispiel #17
0
 void SetDestination(Vector2 destination)
 {
     GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
     foreach (var u in playerUnits)
     {
         UnitPiece unit = u.GetComponent <Collider>().owner as UnitPiece;
         if (unit.GetIsSelected())
         {
             unit.SetDestination(destination);
             unit.SetIsSelected(false);
         }
     }
 }
Beispiel #18
0
    public void AddPiece(BoardPosition position, UnitRank rank)
    {
        //Check for existing piece, remove it if needed.
        //Debug.Log("atteming to add " + UnitUtilities.ReadableRank(rank) + " at " + position.ToString());
        bool equal = false;

        if (pieces.ContainsKey(position))
        {
            UnitPiece existing;
            if (pieces.TryGetValue(position, out existing))
            {
                if (existing.Rank.Equals(rank))
                {
                    //We're not going to remove then add the same exact piece to the same position
                    equal = true;
                }
                else
                {
                    RemovePiece(position);
                }
            }
        }
        if (!equal)
        {
            Transform target = BoardManager.GetTransformForPosition(position);
            if (!EqualityComparer <Transform> .Default.Equals(target, default(Transform)))
            {
                GameObject plane = Instantiate(UnitPlane);
                UnitPiece  piece = GeneratePiece(rank, plane);
                if (piece.Owner != null)
                {
                    piece.Piece.transform.SetParent(piece.Owner.Holder.transform);
                    plane.name  = UnitUtilities.ReadableRank(rank);
                    plane.layer = LayerMask.NameToLayer("Pieces");
                    Vector3 planePos = target.position;
                    planePos.z = GOLayer.UNIT_LAYER;
                    plane.transform.position = planePos;
                    Renderer r = plane.GetComponent <Renderer>();
                    r.material = MaterialManager.GetRankMaterial(rank);
                    pieces.Add(position, piece);
                    EventManager.Raise(new UnitPlacedEvent(position, piece));
                }
                else
                {
                    piece.Destroy();
                    Destroy(plane);
                }
            }
        }
    }
Beispiel #19
0
    public BoardPosition GetPositionForUnitPiece(UnitPiece piece)
    {
        BoardPosition position = BoardPosition.OFF_BOARD;

        foreach (KeyValuePair <BoardPosition, UnitPiece> pair in pieces)
        {
            if (pair.Value.Equals(piece))
            {
                position = pair.Key;
                break;
            }
        }

        return(position);
    }
Beispiel #20
0
 public void EndTurn()
 {
     if (selectedUnit != null)
     {
         initiativeOrder.Remove(selectedUnit);
         initiativeOrder.Add(selectedUnit);
         selectedUnit.EndTurn();
         if (!actionPerformed)
         {
             selectedUnit.Effect(Attribute.Energy, 1);
         }
         selectedUnit = null;
     }
     hasMoved        = false;
     actionPerformed = false;
 }
Beispiel #21
0
    private UnitPiece GeneratePiece(UnitRank rank, GameObject plane)
    {
        UnitPiece piece = new UnitPiece(rank, plane);

        if (GameManager.CurrentMode == GameMode.PlayerOneSetup)
        {
            piece.Owner = GameManager.PlayerOne;
            playerOnePlacementUnits[rank] -= 1;
        }
        else if (GameManager.CurrentMode == GameMode.PlayerTwoSetup)
        {
            piece.Owner = GameManager.PlayerTwo;
            playerTwoPlacementUnits[rank] -= 1;
        }
        return(piece);
    }
Beispiel #22
0
 public void PerformAction(UnitPiece piece, Action action, Point tile, bool free = false)
 {
     if (!free)
     {
         piece.unit.hasActionLeft = false;
     }
     action.Perform(mapManager, tile);
     piece.PerformingAction(action);
     piece.Animation(action.type);
     if (action.type == ActionType.Attack)
     {
         Unit target = GetUnit(tile).unit;
         if (!target.IsAlive())
         {
             RemoveUnit(tile);
         }
     }
 }
Beispiel #23
0
    /*==================================================================
    *  ROUNDS
    * ================================================================*/

    public IEnumerator NewRound(bool firstRound = false)
    {
        isActive = true;

        int index = 0;

        while (index < initiativeOrder.Count)
        {
            UnitPiece piece = initiativeOrder[index];
            StartCoroutine(piece.NewRound(mapManager, firstRound));

            while (piece.isActive)
            {
                yield return(null);
            }
            index++;
        }
        isActive = false;
    }
Beispiel #24
0
    public void SelectUnit(Point tile, Faction faction)
    {
        UnitPiece unit = unitGrid[tile.x, tile.y];

        // Unit clicked
        if (unit != null && unit.unit.hasActionLeft)
        {
            // Friendly clicked
            if (unit.unit.faction == faction && !hasMoved)
            {
                selectedUnit    = unit;
                startingTile    = tile;
                hasMoved        = false;
                actionPerformed = false;
                ShowMovement();
                combatManager.UnitSelected(selectedUnit.unit);
            }
        }
    }
Beispiel #25
0
    /*==================================================================
    *  UNITS
    * ================================================================*/

    public void AddUnit(Point position, Unit unitData, Faction faction, int identifier = -1)
    {
        UnitPiece unit = Instantiate(unitPrefab, transform);

        unit.identifier = identifier;
        unit.SetUnit(unitData);
        unit.unit.faction = faction;
        unitGrid[position.x, position.y] = unit;

        if (faction == Faction.Player)
        {
            army.Add(unit);
        }
        else
        {
            unit.spriteRenderer.flipX = true;
            monsters.Add(unit);
        }
        initiativeOrder.Add(unit);
        unit.MoveTo(mapManager, position, -1);
    }
Beispiel #26
0
    public void WalkTo(Point tile, Faction faction, float speed = 3f)
    {
        if (PerformAction(tile))
        {
            return;
        }

        if (hasMoved)
        {
            return;
        }
        UnitPiece unit = unitGrid[tile.x, tile.y];

        // Already selected unit clicked
        if (selectedUnit == unit)
        {
            UnselectUnit();
        }

        else if (unit == null)
        {
            foreach (Point move in moves)
            {
                if (move == tile)
                {
                    hasMoved = true;
                    Move(selectedUnit, tile);
                    selectedUnit.MoveTo(mapManager, move, speed);
                    mapManager.RemoveMarkings();
                    combatManager.MoveDone();
                }
            }
        }

        else if (unit.unit.faction == faction)
        {
            SelectUnit(tile, faction);
        }
    }
Beispiel #27
0
    public void HandleBattle(UnitPiece attacker, BoardPosition attackerPosition, UnitPiece defender, BoardPosition defenderPosition)
    {
        BattleResult result = UnitUtilities.ResolveBattle(attacker.Rank, defender.Rank);

        // Based on result, update players
        switch (result)
        {
        case BattleResult.Success:
        {
            // Remove from defender owner
            defender.Owner.Pieces.Remove(defender);
            break;
        }

        case BattleResult.Fail:
        {
            // Remove from attacker owner
            attacker.Owner.Pieces.Remove(attacker);
            break;
        }

        case BattleResult.Split:
        {
            //Remove both
            attacker.Owner.Pieces.Remove(attacker);
            defender.Owner.Pieces.Remove(defender);
            break;
        }

        default:
        {
            break;
        }
        }
        EventManager.Raise(new UnitBattleResultEvent(attacker, defender, attackerPosition, defenderPosition, result));
        turnComplete = true;
    }
Beispiel #28
0
    private void ValidateNextPosition(BoardPosition position)
    {
        bool add    = false;
        bool exists = BoardManager.PositionExists(position);

        if (exists)
        {
            UnitPiece existing = UnitManager.GetUnitPieceForPosition(position);
            if (!existing.Equals(UnitPiece.UNKNOWN))
            {
                bool owner = false;
                if (GameManager.CurrentMode.Equals(GameMode.PlayerOne))
                {
                    owner = existing.Owner.Equals(GameManager.PlayerOne);
                }
                else if (GameManager.CurrentMode.Equals(GameMode.PlayerTwo))
                {
                    owner = existing.Owner.Equals(GameManager.PlayerTwo);
                }
                if (!owner)
                {
                    //We're not the owner
                    add = true;
                }
            }
            else
            {
                // Unoccupied space
                add = true;
            }
        }
        if (add)
        {
            validPositions.Add(position);
        }
    }
Beispiel #29
0
 public void SetUnit(UnitPiece piece)
 {
     gameObject.SetActive(true);
     //unitImage = image;
 }
Beispiel #30
0
 public UnitSelectedEvent(UnitPiece unit)
     : base(unit)
 {
 }
Beispiel #31
0
 public UnitRemovedEvent(BoardPosition position, UnitPiece unit) : base(unit)
 {
     this.position = position;
 }
Beispiel #32
0
 void selectEnemyUnit()
 {
     if (Input.GetMouseButtonDown (1) || Input.GetMouseButtonDown(0)) {
         if (originRaycast.collider != null && originRaycast.collider.CompareTag ("UnitPiece")) {
             if (originRaycast.collider.gameObject.GetComponent<UnitPiece>().ownership.Equals(GameManager.opposingPlayer)) {
                 selectedEnemy = originRaycast.collider.gameObject.GetComponent<UnitPiece> ();
                 if (checkAdjacentRaycast(selectedUnit.transform.position, selectedEnemy.transform.position)) {
                     selectedEnemy.GetComponent<SpriteRenderer> ().material = selectedMaterial;
                     enemySelected = true;
                 } else {
                     selectedEnemy = null;
                 }
             }
         }
     }
 }
Beispiel #33
0
 public void Move(UnitPiece unit, Point tile)
 {
     unitGrid[unit.unit.position.x, unit.unit.position.y] = null;
     unitGrid[tile.x, tile.y] = unit;
 }
Beispiel #34
0
    //text for the score
    void OnGUI()
    {
        Vector3 pos = new Vector3(0, 75);
        float buttonWidth = 150f;
        float buttonHeight = 25f;

        GUI.Box (new Rect (0, 25, buttonWidth, buttonHeight), "TURN: " + GameManager.currentPlayer.ToString());
        //make 4 buttons
        //make methods to toggle visiblity
        if (unitSelected) {
            GUI.Box (new Rect (pos.x, pos.y - 25, buttonWidth, buttonHeight), "HEALTH: " + selectedUnit.unitSize);

            if (curUnitState == UnitState.Start) {
                if (GUI.Button (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "Start Move")) {
                    curUnitState = UnitState.Move;
                }
                if (GUI.Button (new Rect (pos.x, pos.y + 25, buttonWidth, buttonHeight), "Cancel")) {
                    unitSelected = false;
                    selectedUnit.GetComponent<SpriteRenderer> ().material = defaultMaterial;
                    selectedUnit = null;
                }
            }
            if (curUnitState == UnitState.Move) {
                if (GUI.Button (new Rect (pos.x, pos.y + 25, buttonWidth, buttonHeight), "Next: Attack")) {
                    curUnitState = UnitState.Attack;
                }

                if (tileSelected) {
                    if (GUI.Button (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "Confirm")) {
                        selectedUnit.transform.position = new Vector3(selectedTile.transform.position.x, selectedTile.transform.position.y, selectedUnit.transform.position.z);
                        curUnitState = UnitState.Attack;
                        toggleTile();
                    }
                } else {
                    GUI.Box (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "Select tile to move to");
                }

            }
            if (curUnitState == UnitState.Attack) {
                if (GUI.Button (new Rect (pos.x, pos.y + 25, buttonWidth, buttonHeight), "Next: End")) {
                    curUnitState = UnitState.End;
                }
                if (enemySelected) {
                    if (GUI.Button (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "Confirm")) {
                        selectedEnemy.unitSize -= 5;
                        curUnitState = UnitState.End;
                        toggleEnemy();
                    }
                } else {
                    GUI.Box (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "Select enemy to attack");
                }
            }

            if (curUnitState == UnitState.End) {
                if (GUI.Button (new Rect (pos.x, pos.y, buttonWidth, buttonHeight), "End Unit Turn")) {
                    reset ();
                }
            }
        }

        if (GUI.Button (new Rect(0, 0, buttonWidth, buttonHeight), "End Turn")) {
            switchTurn();
            GameManager.updateUnits();
            GameManager.updateFactories();
        }

        /*
        if (unitSelected) {
            GUI.Label (new Rect (pos.x, pos.y - 25, 100, 100), "Health: " + selectedUnit.unitSize);
            if (GUI.Button (new Rect(pos.x, pos.y + 50, Screen.width/4, Screen.height/20), "Cancel")) {
                //print ("Clicked End Game");
                //selectedUnit.finishedAttack = true;
                movementPhase = false;
                attackPhase = false;
                unitSelected = false;
                tileSelected = false;
                startPhase = true;
                selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                //selectedTile.GetComponent<SpriteRenderer>().material = defaultMaterial;
            }
            if (!selectedUnit.finishedMovement) {
                if (GUI.Button (new Rect(pos.x, pos.y, Screen.width/4, Screen.height/20),"Start Move")) {
                    movementPhase = true;
                    unitSelected = false;
                    startPhase = false;
                    attackPhase = true;
                    selectedUnit.finishedMovement = true;
                }
            }
            if (!selectedUnit.finishedAttack) {
                if (GUI.Button (new Rect(pos.x, pos.y + 25, Screen.width/4, Screen.height/20),"Start Attack")) {
                    movementPhase = false;
                    unitSelected = false;
                    startPhase = false;
                    attackPhase = true;
                    selectedUnit.finishedAttack = true;
                }
            }

        }

        if (attackPhase) {
            if (selectedEnemy != null && checkAdjacentRaycast (selectedUnit.transform.position, selectedEnemy.transform.position)) {
                if (GUI.Button (new Rect(pos.x, pos.y, Screen.width/4, Screen.height/20), "Execute")) {
                    //print ("Clicked End Game");
                    selectedUnit.finishedAttack = true;
                    movementPhase = false;
                    unitSelected = false;
                    tileSelected = false;
                    attackPhase = false;
                    startPhase = true;
                    selectedEnemy.GetComponent<SpriteRenderer>().material = defaultMaterial;
                    selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                    if (selectedEnemy != null) {
                        Debug.Log("KILLL MEEEE PLS");
                        selectedEnemy.unitSize -= selectedUnit.unitSize / 2;
                    }
                }
            }
            if (GUI.Button (new Rect(pos.x, pos.y + 50, Screen.width/4, Screen.height/20), "Cancel")) {
                //print ("Clicked End Game");
                //selectedUnit.finishedAttack = true;
                movementPhase = false;
                attackPhase = true;
                unitSelected = false;
                tileSelected = false;
                startPhase = true;
                selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                selectedTile.GetComponent<SpriteRenderer>().material = defaultMaterial;
            }
        }

        if (movementPhase) {
            if (tileSelected) {
                if (GUI.Button (new Rect(pos.x, pos.y, Screen.width/4, Screen.height/20), "Execute")) {
                    //print ("Clicked End Game");
                    selectedUnit.finishedMovement = true;
                    movementPhase = false;
                    unitSelected = false;
                    tileSelected = false;
                    startPhase = true;
                    selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                    selectedTile.GetComponent<SpriteRenderer>().material = defaultMaterial;
                    selectedUnit.transform.position = new Vector3(selectedTile.transform.position.x, selectedTile.transform.position.y, selectedUnit.transform.position.z);
                }
                if (GUI.Button (new Rect(pos.x, pos.y + 50, Screen.width/4, Screen.height/20), "Cancel")) {
                    //print ("Clicked End Game");
                    //selectedUnit.finishedMovement = true;
                    movementPhase = true;
                    attackPhase = false;
                    unitSelected = false;
                    tileSelected = false;
                    startPhase = true;
                    selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                    selectedTile.GetComponent<SpriteRenderer>().material = defaultMaterial;
                }
            }
            if (GUI.Button (new Rect(pos.x, pos.y + 50, Screen.width/4, Screen.height/20), "Cancel")) {
                //print ("Clicked End Game");
                //selectedUnit.finishedMovement = true;
                movementPhase = true;
                attackPhase = false;
                unitSelected = false;
                tileSelected = false;
                startPhase = true;
                selectedUnit.GetComponent<SpriteRenderer>().material = defaultMaterial;
                selectedTile.GetComponent<SpriteRenderer>().material = defaultMaterial;
            }
        }
        */
    }
Beispiel #35
0
    //Fires a raycast from the mouse and returns data from any object it collides with.
    void rayCastCheck()
    {
        mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);

        Debug.DrawRay (new Vector3(mousePos.x, mousePos.y, -5), new Vector3 (0, 0, -1));
        if (Input.GetMouseButton (0) || Input.GetMouseButton(1)) {
            originRaycast = Physics2D.Raycast (new Vector3 (mousePos.x, mousePos.y, 0), new Vector3 (0, 0, -1), rayCastScale, layerMask);
            //northRaycast = Physics2D.Raycast (new Vector3 (mousePos.x, mousePos.y + 1, 0), new Vector3 (0, 0, -1), rayCastScale, layerMask);
            //southRaycast = Physics2D.Raycast (new Vector3 (mousePos.x, mousePos.y - 1, 0), new Vector3 (0, 0, -1), rayCastScale, layerMask);
            //westRaycast = Physics2D.Raycast (new Vector3 (mousePos.x - 1, mousePos.y, 0), new Vector3 (0, 0, -1), rayCastScale, layerMask);
            //eastRaycast = Physics2D.Raycast (new Vector3 (mousePos.x + 1, mousePos.y, 0), new Vector3 (0, 0, -1), rayCastScale, layerMask);
        }
        if (originRaycast.collider != null && originRaycast.collider.CompareTag ("Tile")) {
            selectedTile = originRaycast.collider.gameObject.GetComponent<Tile> ();
        }
        if (originRaycast.collider != null && originRaycast.collider.CompareTag ("UnitPiece") && !unitSelected) {
            if (originRaycast.collider.gameObject.GetComponent<UnitPiece>().ownership.Equals(GameManager.currentPlayer)) {
                selectedUnit = originRaycast.collider.gameObject.GetComponent<UnitPiece> ();
            }
        }
    }
Beispiel #36
0
 public void AddUnit(UnitPiece unit)
 {
     unitsToAdd.Add(unit);
 }
Beispiel #37
0
    private void HandleGame(RaycastHit[] hits, bool selectable, BoardPosition position, UnitPiece unit, Vector3 tileVector)
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (hits.Length == 0)
            {
                highlightCube.SetActive(false);
                previous = position;
            }
            else if (selectable && !unit.Equals(UnitPiece.UNKNOWN))
            {
                //We've selected a unit
                //Check if we're the owner
                bool owner = false;
                if (GameManager.CurrentMode.Equals(GameMode.PlayerOne))
                {
                    owner = unit.Owner.Equals(GameManager.PlayerOne);
                }
                else if (GameManager.CurrentMode.Equals(GameMode.PlayerTwo))
                {
                    owner = unit.Owner.Equals(GameManager.PlayerTwo);
                }

                if (owner)
                {
                    //If the previous position was off the board, this is our first selection
                    if (previous.Equals(BoardPosition.OFF_BOARD))
                    {
                        previous = position;
                        MoveHighlight(tileVector);

                        //Determine what the valid next positions are
                        ClearValid();
                        //Add current position, for deselection
                        validPositions.Add(position);
                        ValidateNextPosition(new BoardPosition(position.X - 1, position.Y));
                        ValidateNextPosition(new BoardPosition(position.X, position.Y - 1));
                        ValidateNextPosition(new BoardPosition(position.X + 1, position.Y));
                        ValidateNextPosition(new BoardPosition(position.X, position.Y + 1));
                        MoveValid();
                    }
                    else if (previous.Equals(position))
                    {
                        //We selected the same space, deselect
                        previous = BoardPosition.OFF_BOARD;
                        highlightCube.SetActive(false);
                        ClearValid();
                    }
                }
                else if (validPositions.Contains(position))
                {
                    //If our previous position contains a piece that we own, then we should do battle
                    UnitPiece previousPiece = UnitManager.GetUnitPieceForPosition(previous);
                    if (!previousPiece.Equals(UnitPiece.UNKNOWN))
                    {
                        bool previousOwner = false;
                        if (GameManager.CurrentMode.Equals(GameMode.PlayerOne))
                        {
                            previousOwner = previousPiece.Owner.Equals(GameManager.PlayerOne);
                        }
                        else if (GameManager.CurrentMode.Equals(GameMode.PlayerTwo))
                        {
                            previousOwner = previousPiece.Owner.Equals(GameManager.PlayerTwo);
                        }

                        if (previousOwner)
                        {
                            // instigate attack, with previous piece as attacker and current piece as defender
                            GameManager.HandleBattle(previousPiece, previous, unit, position);
                            previous = BoardPosition.OFF_BOARD;
                            highlightCube.SetActive(false);
                            ClearValid();
                        }
                    }
                }
            }
            else if (selectable && !position.Equals(BoardPosition.OFF_BOARD) && !previous.Equals(BoardPosition.OFF_BOARD))
            {
                //We've selected a place not off the board, the previous position was not off the board either, but there is no piece occupying the space
                if(validPositions.Contains(position))
                {
                    //Move the piece
                    UnitManager.MovePiece(previous, position);
                    ClearValid();
                    highlightCube.SetActive(false);
                    action = true;
                }
            }
        }
        else if (Input.GetMouseButtonDown(1))
        {
            //Just clear selection
            previous = BoardPosition.OFF_BOARD;
            highlightCube.SetActive(false);
            ClearValid();
        }
    }
Beispiel #38
0
 private void HandleSetup(RaycastHit[] hits, bool selectable, BoardPosition position, UnitPiece unit, Vector3 tileVector)
 {
     //Handle mouse click
     if (Input.GetMouseButtonDown(0))
     {
         if (hits.Length == 0)
         {
             highlightCube.SetActive(false);
         }
         else if (selectable && !placementRank.Equals(UnitRank.Unknown))
         {
             UnitManager.AddPiece(position, placementRank);
         }
     }
     else if (Input.GetMouseButtonDown(1))
     {
         //Remove existing piece
         if (!unit.Rank.Equals(UnitRank.Unknown))
         {
             UnitManager.RemovePiece(position);
         }
     }
 }
Beispiel #39
0
    public BoardPosition GetPositionForUnitPiece(UnitPiece piece)
    {
        BoardPosition position = BoardPosition.OFF_BOARD;

        foreach (KeyValuePair<BoardPosition, UnitPiece> pair in pieces)
        {
            if (pair.Value.Equals(piece))
            {
                position = pair.Key;
                break;
            }
        }

        return position;
    }
Beispiel #40
0
 public UnitRemovedEvent(BoardPosition position, UnitPiece unit)
     : base(unit)
 {
     this.position = position;
 }
Beispiel #41
0
 private UnitPiece GeneratePiece(UnitRank rank, GameObject plane)
 {
     UnitPiece piece = new UnitPiece(rank, plane);
     if (GameManager.CurrentMode == GameMode.PlayerOneSetup)
     {
         piece.Owner = GameManager.PlayerOne;
         playerOnePlacementUnits[rank] -= 1;
     }
     else if (GameManager.CurrentMode == GameMode.PlayerTwoSetup)
     {
         piece.Owner = GameManager.PlayerTwo;
         playerTwoPlacementUnits[rank] -= 1;
     }
     return piece;
 }
Beispiel #42
0
    public void PerformTurn()
    {
        // Debug.Log("AI Move");
        // Collect units
        List <UnitPiece> army     = unitManager.army;
        List <UnitPiece> monsters = unitManager.monsters;

        UnitPiece best         = null;
        int       bestDistance = int.MaxValue;
        Point     bestMove     = new Point();
        bool      adjacent     = false;

        foreach (UnitPiece monster in monsters)
        {
            if (!monster.unit.hasActionLeft)
            {
                continue;
            }

            foreach (UnitPiece soldier in army)
            {
                int d = Mathf.Abs(monster.unit.position.x - soldier.unit.position.x) + Mathf.Abs(monster.unit.position.y - soldier.unit.position.y);
                if (d == 1)
                {
                    best         = monster;
                    adjacent     = true;
                    bestDistance = 1;
                    break;
                }
            }
            if (adjacent)
            {
                break;
            }

            Point closest  = new Point();
            int   distance = int.MaxValue;

            foreach (Point point in monster.GetMoves(map))
            {
                foreach (UnitPiece soldier in army)
                {
                    int d = Mathf.Abs(point.x - soldier.unit.position.x) + Mathf.Abs(point.y - soldier.unit.position.y) + point.z;
                    if (d < distance)
                    {
                        distance = d;
                        closest  = point;
                    }
                }
            }

            if (distance < bestDistance)
            {
                bestDistance = distance;
                bestMove     = closest;
                best         = monster;
            }
        }

        map.unitManager.SelectUnit(best.unit.position, Faction.Monster);
        if (!adjacent)
        {
            map.unitManager.WalkTo(bestMove, Faction.Monster);
        }
        else
        {
            PerformAction();
        }
    }
Beispiel #43
0
 public UnitMovedEvent(BoardPosition from, BoardPosition to, UnitPiece piece)
     : base(piece)
 {
     this.from = from;
     this.to = to;
 }
Beispiel #44
0
 public UnitEvent(UnitPiece unit)
 {
     this.unit = unit;
 }