// Player Unit Creation Functions
    public PlayerUnit CreatePlayerUnit(PlayerUnitRank rank, UnitClass unitClass)
    {
        // Create player unit object
        Transform  playerUnitPrefab = GetPlayerUnitPrefabFromUnitClass(unitClass);
        PlayerUnit playerUnit       = Instantiate(playerUnitPrefab, playerUnitSpawnLocation).GetComponent <PlayerUnit>();

        // Initialize player unit data
        PlayerUnitData playerUnitData = unitFactory.CreatePlayerUnitData(rank, unitClass);

        playerUnit.InitializePlayerUnitGameObject(playerUnitData);

        // Prevent Stacking on Spawn
        MovePlayerUnitToOffset(playerUnit);

        // Check Achievement on every player unit creation
        GameEngine.GetInstance().achievementManager.CheckAchievementsForPlayerUnitCreation();

        // Display message
        MessageType msgType = MessageType.INFO;

        if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.S || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.X)
        {
            msgType = MessageType.POSITIVE;
        }
        GameEngine.GetInstance().messageQueue.PushMessage("[" + playerUnit.GetPlayerUnitData().GetRank() + " Rank Unit] " + Utils.CleanEnumString(playerUnit.GetPlayerUnitData().GetUnitClass().ToString()), msgType);

        // Sound Effect
        GameEngine.GetInstance().audioManager.PlayAudio(AudioManager.PLAYER_UNIT_CREATION_SOUND);

        return(playerUnit);
    }
Beispiel #2
0
    /*
     * If this projectile collides with an enemy unit, inflict damage to it.
     */
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (targetUnit == null)
        {
            return;
            // throw new GameplayException("Target unit is NULL!");
        }

        if (collision.gameObject == targetUnit.gameObject)
        {
            EnemyUnit enemyUnit = targetUnit.GetComponent <EnemyUnit>();

            // Projectile landing audio
            GameEngine.GetInstance().audioManager.PlayProjectileLandingSound(origin.GetPlayerUnitData().GetUnitClass(), origin.GetPlayerUnitData().GetRank());

            if (origin.GetPlayerUnitData().GetAttackType() == AttackType.SPLASH)
            {
                InflictSplashDamage(enemyUnit, this.attackDamage, splashDamageCircle);  // this won't deal damage to the actual target, so deal with the actual target as normal
                StartCoroutine(WaitTimeBeforeInflictingDamage(enemyUnit, this.attackDamage, SPLASH_CIRCLE_APPEARANCE_TIME));
            }
            else if (origin.GetPlayerUnitData().GetAttackType() == AttackType.LARGE_SPLASH)
            {
                InflictSplashDamage(enemyUnit, this.attackDamage, largeSplashDamageCircle);
                StartCoroutine(WaitTimeBeforeInflictingDamage(enemyUnit, this.attackDamage, SPLASH_CIRCLE_APPEARANCE_TIME));
            }
            else
            {
                InflictDamage(enemyUnit, this.attackDamage);
                Destroy(this.gameObject);
            }
        }
    }
    public override bool CheckCondition()
    {
        int numInfantry = 0;
        int numMech     = 0;
        int numLaser    = 0;
        int numPsionic  = 0;
        int numAcid     = 0;
        int numBlade    = 0;
        int numMagic    = 0;
        int numFlame    = 0;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit = g.GetComponent <PlayerUnit>();

            if (playerUnit.GetPlayerUnitData().GetRank() != PlayerUnitRank.A)
            {
                continue;
            }

            UnitClass playerUnitclass = playerUnit.GetPlayerUnitData().GetUnitClass();
            if (playerUnitclass == UnitClass.INFANTRY)
            {
                numInfantry += 1;
            }
            else if (playerUnitclass == UnitClass.MECH)
            {
                numMech += 1;
            }
            else if (playerUnitclass == UnitClass.LASER)
            {
                numLaser += 1;
            }
            else if (playerUnitclass == UnitClass.PSIONIC)
            {
                numPsionic += 1;
            }
            else if (playerUnitclass == UnitClass.ACID)
            {
                numAcid += 1;
            }
            else if (playerUnitclass == UnitClass.BLADE)
            {
                numBlade += 1;
            }
            else if (playerUnitclass == UnitClass.MAGIC)
            {
                numMagic += 1;
            }
            else if (playerUnitclass == UnitClass.FLAME)
            {
                numFlame += 1;
            }
        }

        return((numInfantry >= 5) || (numMech >= 5) || (numLaser >= 5) || (numPsionic >= 5) ||
               (numAcid >= 5) || (numBlade >= 5) || (numMagic >= 5) || (numFlame >= 5));
    }
    public override bool CheckCondition()
    {
        bool hasInfantry = false;
        bool hasMech     = false;
        bool hasLaser    = false;
        bool hasPsionic  = false;
        bool hasAcid     = false;
        bool hasBlade    = false;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit = g.GetComponent <PlayerUnit>();

            if (playerUnit.GetPlayerUnitData().GetRank() != PlayerUnitRank.D)
            {
                continue;
            }

            UnitClass unitClass = playerUnit.GetPlayerUnitData().GetUnitClass();
            if (unitClass == UnitClass.INFANTRY)
            {
                hasInfantry = true;
            }
            else if (unitClass == UnitClass.MECH)
            {
                hasMech = true;
            }
            else if (unitClass == UnitClass.LASER)
            {
                hasLaser = true;
            }
            else if (unitClass == UnitClass.PSIONIC)
            {
                hasPsionic = true;
            }
            else if (unitClass == UnitClass.ACID)
            {
                hasAcid = true;
            }
            else if (unitClass == UnitClass.BLADE)
            {
                hasBlade = true;
            }
        }

        return(hasInfantry && hasMech && hasLaser && hasPsionic && hasAcid && hasBlade);
    }
    public override bool CheckCondition()
    {
        int targetCount = 0;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit = g.GetComponent <PlayerUnit>();
            if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.B && playerUnit.GetPlayerUnitData().GetUnitClass() == this.targetClass)
            {
                targetCount += 1;
            }
        }

        return(targetCount >= 3);
    }
    private bool CheckXCombo(PlayerUnit playerUnit)
    {
        if (GameEngine.GetInstance().hasXUnit)
        {
            return(false);
        }
        if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.D || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.C || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.X)
        {
            return(false);
        }
        UnitClass targetUnitClass = playerUnit.GetPlayerUnitData().GetUnitClass();

        PlayerUnit bUnit = null;
        PlayerUnit aUnit = null;
        PlayerUnit sUnit = null;

        foreach (PlayerUnit p in unitsOnMixer)
        {
            PlayerUnitRank playerUnitRank  = p.GetPlayerUnitData().GetRank();
            UnitClass      playerUnitClass = p.GetPlayerUnitData().GetUnitClass();

            if (bUnit == null && playerUnitRank == PlayerUnitRank.B && playerUnitClass == targetUnitClass)
            {
                bUnit = p;
            }
            else if (aUnit == null && playerUnitRank == PlayerUnitRank.A && playerUnitClass == targetUnitClass)
            {
                aUnit = p;
            }
            else if (sUnit == null && playerUnitRank == PlayerUnitRank.S && playerUnitClass == targetUnitClass)
            {
                sUnit = p;
            }
        }
        if (bUnit != null && aUnit != null && sUnit != null)
        {
            RemoveUnitSafely(bUnit);
            RemoveUnitSafely(aUnit);
            RemoveUnitSafely(sUnit);

            PlayerUnit newPlayerUnit          = GameEngine.GetInstance().unitSpawner.CreatePlayerUnit(PlayerUnitRank.X, targetUnitClass);
            GameEngine.GetInstance().hasXUnit = true;
            return(true);
        }
        return(false);
    }
 private bool CheckAllCCombo(PlayerUnit playerUnit)
 {
     if (playerUnit.GetPlayerUnitData().GetRank() != PlayerUnitRank.C)
     {
         return(false);
     }
     return(CheckAllCCombo());
 }
 private PlayerUnit GetMatchingUnitType(PlayerUnit playerUnit)
 {
     if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.S || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.X)
     {
         return(null);
     }
     foreach (PlayerUnit p in unitsOnMixer)
     {
         if (playerUnit.name != p.name &&
             playerUnit.GetPlayerUnitData().GetUnitClass() == p.GetPlayerUnitData().GetUnitClass() &&
             playerUnit.GetPlayerUnitData().GetRank() == p.GetPlayerUnitData().GetRank())
         {
             return(p);
         }
     }
     return(null);
 }
Beispiel #9
0
    // ---------- Unit Selling ----------
    public void SellUnitButton()
    {
        sellUnitModal.gameObject.SetActive(true);

        PlayerUnit unitToSell = GameEngine.GetInstance().playerUnitSelected;

        if (IsRareUnit(unitToSell))
        {
            int tokenRefund = ComputeTokenRefund(unitToSell.GetPlayerUnitData().GetRank());
            sellUnitModalText.text = "Are you sure you want to sell this unit ?\n (You will receive " + tokenRefund + " tokens for selling a Rare " + unitToSell.GetPlayerUnitData().GetRank() + " rank unit)";
        }
        else
        {
            int gasRefund = ComputeGasRefund(unitToSell.GetPlayerUnitData().GetRank());
            sellUnitModalText.text = "Are you sure you want to sell this unit ?\n (You will receive " + gasRefund + " gas for selling a " + unitToSell.GetPlayerUnitData().GetRank() + " rank unit)";
        }

        GameEngine.GetInstance().audioManager.PlayAudio(AudioManager.BUTTON_CLICK_SOUND);
    }
Beispiel #10
0
    /*
     * Sell unit sequence.
     * If rare unit sold, check rare unit seller achievement.
     * Selling regular units gives gas, selling rare units gives tokens.
     * Destroy the player unit at the end and close its unit selection panel.
     */
    private void SellUnit(PlayerUnit unitToSell)
    {
        if (IsRareUnit(unitToSell))
        {
            int tokenRefund = ComputeTokenRefund(unitToSell.GetPlayerUnitData().GetRank());
            GameEngine.GetInstance().IncreaseTokenCount(tokenRefund);

            GameEngine.GetInstance().achievementManager.rareUnitsSold += 1;
            GameEngine.GetInstance().achievementManager.CheckAchievementsForUnitSelling();
        }
        else
        {
            int gasRefund = ComputeGasRefund(unitToSell.GetPlayerUnitData().GetRank());
            GameEngine.GetInstance().IncreaseGas(gasRefund);
        }

        Destroy(unitToSell.gameObject);
        GameEngine.GetInstance().unitSelectionPanel.CloseUnitSelectionPanelButton();
    }
Beispiel #11
0
    private bool CheckABCDForClass(UnitClass unitClassToCheck)
    {
        bool hasA = false;
        bool hasB = false;
        bool hasC = false;
        bool hasD = false;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit     playerUnit      = g.GetComponent <PlayerUnit>();
            PlayerUnitRank playerUnitRank  = playerUnit.GetPlayerUnitData().GetRank();
            UnitClass      playerUnitClass = playerUnit.GetPlayerUnitData().GetUnitClass();

            if (playerUnitRank == PlayerUnitRank.S || playerUnitRank == PlayerUnitRank.X || playerUnitClass != unitClassToCheck)
            {
                continue;
            }
            if (playerUnitClass == UnitClass.MAGIC || playerUnitClass == UnitClass.FLAME)
            {
                continue;
            }

            if (playerUnitRank == PlayerUnitRank.D)
            {
                hasD = true;
            }
            else if (playerUnitRank == PlayerUnitRank.C)
            {
                hasC = true;
            }
            else if (playerUnitRank == PlayerUnitRank.B)
            {
                hasB = true;
            }
            else if (playerUnitRank == PlayerUnitRank.A)
            {
                hasA = true;
            }
        }

        return(hasA && hasB && hasC && hasD);
    }
    private bool CheckBCDCombo(PlayerUnit playerUnit)
    {
        if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.A || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.S || playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.X)
        {
            return(false);
        }
        UnitClass targetUnitClass = playerUnit.GetPlayerUnitData().GetUnitClass();

        PlayerUnit dUnit = null;
        PlayerUnit cUnit = null;
        PlayerUnit bUnit = null;

        foreach (PlayerUnit p in unitsOnMixer)
        {
            PlayerUnitRank playerUnitRank  = p.GetPlayerUnitData().GetRank();
            UnitClass      playerUnitClass = p.GetPlayerUnitData().GetUnitClass();

            if (dUnit == null && playerUnitRank == PlayerUnitRank.D && playerUnitClass == targetUnitClass)
            {
                dUnit = p;
            }
            else if (cUnit == null && playerUnitRank == PlayerUnitRank.C && playerUnitClass == targetUnitClass)
            {
                cUnit = p;
            }
            else if (bUnit == null && playerUnitRank == PlayerUnitRank.B && playerUnitClass == targetUnitClass)
            {
                bUnit = p;
            }
        }
        if (dUnit != null && cUnit != null && bUnit != null)
        {
            RemoveUnitSafely(dUnit);
            RemoveUnitSafely(cUnit);
            RemoveUnitSafely(bUnit);
            PlayerUnit newPlayerUnit = GameEngine.GetInstance().unitSpawner.CreateRandomAUnit();
            return(true);
        }
        return(false);
    }
    //---------- Unit Mixing Methods ----------
    private bool CheckMatchingUnit(PlayerUnit playerUnit)
    {
        PlayerUnit matchingPlayerUnit = null;

        matchingPlayerUnit = GetMatchingUnitType(playerUnit);
        if (matchingPlayerUnit != null)
        {
            PlayerUnitRank newUnitRank = GetNextTierRank(playerUnit.GetPlayerUnitData().GetRank());
            RemoveUnitSafely(playerUnit);
            RemoveUnitSafely(matchingPlayerUnit);
            PlayerUnit newPlayerUnit = GameEngine.GetInstance().unitSpawner.CreateRandomUnitOfRank(newUnitRank);
            return(true);
        }
        return(false);
    }
    public override bool CheckCondition()
    {
        int numRares = 0;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit      = g.GetComponent <PlayerUnit>();
            UnitClass  playerUnitClass = playerUnit.GetPlayerUnitData().GetUnitClass();
            if (playerUnitClass == UnitClass.MAGIC || playerUnitClass == UnitClass.FLAME)
            {
                numRares++;
            }
        }

        return(numRares >= 5);
    }
    private bool CheckRareACombo(PlayerUnit playerUnit)
    {
        if (playerUnit.GetPlayerUnitData().GetRank() != PlayerUnitRank.A)
        {
            return(false);
        }

        PlayerUnit magicUnit = null;
        PlayerUnit flameUnit = null;

        foreach (PlayerUnit p in unitsOnMixer)
        {
            PlayerUnitRank playerUnitRank  = p.GetPlayerUnitData().GetRank();
            UnitClass      playerUnitClass = p.GetPlayerUnitData().GetUnitClass();

            if (playerUnitRank == PlayerUnitRank.A && playerUnitClass == UnitClass.MAGIC)
            {
                magicUnit = p;
            }
            else if (playerUnitRank == PlayerUnitRank.A && playerUnitClass == UnitClass.FLAME)
            {
                flameUnit = p;
            }
        }

        if (magicUnit != null && flameUnit != null)
        {
            RemoveUnitSafely(magicUnit);
            RemoveUnitSafely(flameUnit);

            GameEngine.GetInstance().messageQueue.PushMessage("2 A Rank Choosers", MessageType.INFO);
            GameEngine.GetInstance().AddABonusTokens(2);
            return(true);
        }
        return(false);
    }
    public override bool CheckCondition()
    {
        if (GameEngine.GetInstance().hasXUnit)
        {
            return(false);
        }

        // TODO should we conside rare units?
        // Since can only have 1 X unit, we know which class we are looking for
        UnitClass classToLookFor = UnitClass.NONE;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit = g.GetComponent <PlayerUnit>();
            if (playerUnit.GetPlayerUnitData().GetRank() == PlayerUnitRank.X)
            {
                classToLookFor = playerUnit.GetPlayerUnitData().GetUnitClass();
                break;
            }
        }

        bool hasS = false;
        bool hasA = false;
        bool hasB = false;
        bool hasC = false;
        bool hasD = false;

        foreach (GameObject g in playerUnits)
        {
            PlayerUnit     playerUnit      = g.GetComponent <PlayerUnit>();
            PlayerUnitRank playerUnitRank  = playerUnit.GetPlayerUnitData().GetRank();
            UnitClass      playerUnitClass = playerUnit.GetPlayerUnitData().GetUnitClass();

            if (playerUnitClass != classToLookFor)
            {
                continue;
            }

            if (playerUnitRank == PlayerUnitRank.D)
            {
                hasD = true;
            }
            else if (playerUnitRank == PlayerUnitRank.C)
            {
                hasC = true;
            }
            else if (playerUnitRank == PlayerUnitRank.B)
            {
                hasB = true;
            }
            else if (playerUnitRank == PlayerUnitRank.A)
            {
                hasA = true;
            }
            else if (playerUnitRank == PlayerUnitRank.S)
            {
                hasS = true;
            }
        }

        return(hasS && hasA && hasB && hasC && hasD);
    }
    public override bool CheckCondition()
    {
        bool hasInfantry = false;
        bool hasMech     = false;
        bool hasLaser    = false;
        bool hasPsionic  = false;
        bool hasAcid     = false;
        bool hasBlade    = false;
        bool hasMagic    = false;
        bool hasFlame    = false;

        GameObject[] playerUnits = GameObject.FindGameObjectsWithTag("PlayerUnit");
        foreach (GameObject g in playerUnits)
        {
            PlayerUnit playerUnit = g.GetComponent <PlayerUnit>();

            if (playerUnit.GetPlayerUnitData().GetRank() != PlayerUnitRank.B)
            {
                continue;
            }

            UnitClass unitClass = playerUnit.GetPlayerUnitData().GetUnitClass();
            if (unitClass == UnitClass.INFANTRY)
            {
                hasInfantry = true;
            }
            else if (unitClass == UnitClass.MECH)
            {
                hasMech = true;
            }
            else if (unitClass == UnitClass.LASER)
            {
                hasLaser = true;
            }
            else if (unitClass == UnitClass.PSIONIC)
            {
                hasPsionic = true;
            }
            else if (unitClass == UnitClass.ACID)
            {
                hasAcid = true;
            }
            else if (unitClass == UnitClass.BLADE)
            {
                hasBlade = true;
            }
            else if (unitClass == UnitClass.MAGIC)
            {
                hasMagic = true;
            }
            else if (unitClass == UnitClass.FLAME)
            {
                hasFlame = true;
            }
        }

        int uniqueBTypes = (hasInfantry ? 1 : 0) + (hasMech ? 1 : 0) + (hasLaser ? 1 : 0) + (hasPsionic ? 1 : 0)
                           + (hasAcid ? 1 : 0) + (hasBlade ? 1 : 0) + (hasMagic ? 1 : 0) + (hasFlame ? 1 : 0);

        return(uniqueBTypes >= 7);
    }
Beispiel #18
0
 private bool IsRareUnit(PlayerUnit playerUnit)
 {
     return(playerUnit.GetPlayerUnitData().GetUnitClass() == UnitClass.MAGIC || playerUnit.GetPlayerUnitData().GetUnitClass() == UnitClass.FLAME);
 }