Exemplo n.º 1
0
    // overload for explicit unit types
    public HashSet <Node> GetPlaceableNodes(Card currentCard, Unit.UnitTypes unitType)
    {
        HashSet <Node> placeableNodes = new HashSet <Node>();
        List <Node>    allyNodes      = GetAllyUnitNodes(GameLoop.instance.GetCurrentPlayer().PlayerId);
        List <Node>    filteredNodes  = new List <Node>();

        foreach (Node node in allyNodes)
        {
            if (node.GetUnit().GetUnitType() == unitType)
            {
                filteredNodes.Add(node);
            }
        }

        foreach (Node node in filteredNodes)
        {
            Vector3 nodePos = node.unitInThisNode.transform.position;
            placeableNodes.UnionWith(Pathfinding.instance.GetNodesMinMaxRange(
                                         nodePos,
                                         false,
                                         currentCard.minRange,
                                         currentCard.maxRange));
        }

        return(placeableNodes);
    }
Exemplo n.º 2
0
    private void PickUpCard()
    {
        Destroy(cardHolder);
        cardHolder = new GameObject();
        cardHolder.transform.parent = transform;
        cardHolder.name             = "AI pick up options";

        List <Card> cards = new List <Card>();

        cards.Add(GenerateCard(cardHolder));
        cards.Add(GenerateCard(cardHolder));
        cards.Add(GenerateCard(cardHolder));
        cards.Add(GenerateCard(cardHolder));
        cards.Add(GenerateCard(cardHolder));

        foreach (Card card in cards)
        {
            if (card is UnitCard)
            {
                if (((UnitCard)card).UnitType == lastPickedUpType)
                {
                    continue;
                }

                if (((UnitCard)card).UnitType == Unit.UnitTypes.Priest && m_behaviour == BehaviourType.Aggressive)
                {
                    continue;
                }

                m_playerCards.Add(card);
                lastPickedUpType = ((UnitCard)card).UnitType;
                print("AI picked up " + card.name + " card");
                return;
            }
        }

        m_playerCards.Add(cards[Random.Range(0, cards.Count - 1)]);

        Debug.LogWarning("AI did not find any valuable cards");
    }
Exemplo n.º 3
0
    public void copyUnitCard(UnitCard copyCard)
    {
        UnitType = copyCard.UnitType;
        id       = copyCard.id;
        castType = copyCard.castType;
        name     = copyCard.name;
        cost     = copyCard.cost;
        minRange = copyCard.minRange;
        maxRange = copyCard.maxRange;

        indexInHand = copyCard.indexInHand;

        health         = copyCard.health;
        damage         = copyCard.damage;
        defence        = copyCard.defence;
        minAttackRange = copyCard.minAttackRange;
        maxAttackRange = copyCard.maxAttackRange;
        moveSpeed      = copyCard.moveSpeed;
        accuracy       = copyCard.accuracy;
        evasion        = copyCard.evasion;
        flying         = copyCard.flying;
    }
Exemplo n.º 4
0
 public ChemElementProperty(string title, string value, Unit.UnitTypes unitType)
 {
     Title    = title;
     Value    = value;
     UnitType = Unit.UnitFactory(unitType);
 }
Exemplo n.º 5
0
    public void CreateUnit(Unit.UnitTypes unit, Node positionNode)
    {
        Unit placedUnit = null;

        int playerId = GameLoop.instance.GetCurrentPlayer().PlayerId;

        if (unit == Unit.UnitTypes.Soldier)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/Soldier", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_soldier", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_soldier.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_soldier, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned a Soldier at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned a Soldier!", TurnManager.instance.color32_green);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_soldier_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_soldier_red;
            }
        }
        else if (unit == Unit.UnitTypes.Knight)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/Knight", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_knight", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_knight.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_knight, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned a Knight at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned a Knight!", TurnManager.instance.color32_green);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_knight_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_knight_red;
            }
        }
        else if (unit == Unit.UnitTypes.Assassin)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/Assassin", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_assassin", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_assassin.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_assassin, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned an Assassin at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned an Assassin!", TurnManager.instance.color32_green);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_assassin_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_assassin_red;
            }
        }
        else if (unit == Unit.UnitTypes.Priest)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/Priest", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_priest", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_priest.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_priest, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned a Priest at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned an Priest!", TurnManager.instance.color32_green);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_priest_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_priest_red;
            }
        }
        else if (unit == Unit.UnitTypes.Archer)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/Archer", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_archer", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_archer.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_archer, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned an Archer at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned an Archer!", TurnManager.instance.color32_green);
            Instantiate(anim_unit_archer, positionNode.worldPosition, Quaternion.identity);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_archer_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_archer_red;
            }
        }
        else if (unit == Unit.UnitTypes.DragonRider)
        {
            if (GameManager.instance.networked)
            {
                placedUnit = PhotonNetwork.Instantiate("Units/DragonRider", positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                PhotonNetwork.Instantiate("UnitAnimation/unit_dragonRider", positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            else
            {
                placedUnit = Instantiate(m_dragonRider.gameObject, positionNode.worldPosition, Quaternion.identity).GetComponent <Unit>();
                Instantiate(anim_unit_dragonRider, positionNode.worldPosition + Vector3.up, Quaternion.identity);
            }
            TurnManager.instance.updateGameHistory("Player " + playerId + " summoned a Dragon Rider at (" + positionNode.gridX + ", " + positionNode.gridY + ")!\n");
            TurnManager.instance.updateTurnUpdate("Succesfully summoned a Dragon Rider!", TurnManager.instance.color32_green);

            if (playerId == 0)
            {
                placedUnit.transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).GetComponent <Image>().color = new Color32(0, 0, 255, 255);
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_dragonRider_blue;
            }
            else
            {
                placedUnit.transform.GetComponentInChildren <SpriteRenderer>().sprite = sprite_dragonRider_red;
            }
        }

        // TODO everything below is only done on the player spawning the unit,
        // WARNING is probably breaking the use of spells after someone moves

        placedUnit.SetUnitPlayerID(playerId);

        positionNode.AddUnit(placedUnit);

        //hardcoded color for test

        /*
         * if (playerId == 0)
         *  placedUnit.transform.GetComponent<Renderer>().material.color = Color.blue;
         * else
         *  placedUnit.transform.GetComponent<Renderer>().material.color = Color.red;
         */

        GameLoop.instance.GetCurrentPlayer().AddUnit(placedUnit);

        placedUnit.CheckHostileTrapOrItemInNode(positionNode);

        TurnManager.instance.cardSuccessful = true;
    }