Example #1
0
 /**
  * Add a ladder to this dam and set a flag so we can apply ladder effects later
  *
  * @param damLadder The Ladder being added to the dam
  */
 public void AddLadder(DamLadder damLadder)
 {
     // Set crossing rates for fish to ones supplied by the ladder
     smallCrossingRate  = defaultCrossingRate + damLadder.smallCrossingRate;
     mediumCrossingRate = defaultCrossingRate + damLadder.mediumCrossingRate;
     largeCrossingRate  = defaultCrossingRate + damLadder.largeCrossingRate;
 }
Example #2
0
    /**
     * Attach a ladder to the dam at this location (if there is one)
     *
     * @param damLadder The dam ladder being placed in the level
     */
    public void AttachLadder(DamLadder damLadder)
    {
        // Can only attach if there is a dam here with no ladder
        if (!inUse || currentDam == null || HasLadder)
        {
            return;
        }

        // Put the ladder in the correct location and parent it to the current dam
        Transform transform2;

        (transform2 = damLadder.transform).SetParent(currentDam.transform);
        var transform1 = ladderMeshRenderer.transform;

        transform2.localPosition = transform1.localPosition;
        transform2.localRotation = transform1.localRotation;
        transform2.localScale    = transform1.localScale;

        // Tell the dam that a ladder is being attached
        currentDam.AddLadder(damLadder);

        // This dam location now has a ladder attached to it
        HasLadder = true;

        placementTurn = GameManager.Instance.Turn;
    }
Example #3
0
    /**
     * Add a ladder to this dam
     *
     * Set a flag so we can apply ladder effects later
     */
    public void AddLadder(DamLadder damLadder)
    {
        // set crossing rates for fish to ones supplied by the ladder
        smallCrossingRate  = damLadder.smallCrossingRate;
        mediumCrossingRate = damLadder.mediumCrossingRate;
        largeCrossingRate  = damLadder.largeCrossingRate;

        // set flag so we know we have a ladder
        hasLadder = true;
    }
    /**
     * Attach a ladder to the dam at this location (if there is one)
     */
    public void AttachLadder(DamLadder damLadder)
    {
        // can only attach if there is a dam here with no ladder
        if (inUse && currentDam != null && !HasLadder)
        {
            // put the ladder in the correct location and parent it to the current dam
            damLadder.transform.SetParent(currentDam.transform);
            damLadder.transform.localPosition = ladderMeshRenderer.transform.localPosition;
            damLadder.transform.localRotation = ladderMeshRenderer.transform.localRotation;
            damLadder.transform.localScale    = ladderMeshRenderer.transform.localScale;

            // tell the dam that a ladder is being attached
            currentDam.AddLadder(damLadder);

            // this dam location now has a ladder attached to it
            HasLadder = true;
        }
    }
Example #5
0
    /*
     * Loads the game state of the turn in the list of saves to revert the game to
     */
    public static void LoadGame()
    {
        // The turn number from the Pause Menu UI slider that we want to revert the game to
        int turn = (int)GameManager.Instance.pauseMenu.turnSlider.value;

        // List counters for each kind of tower we are loading in
        int currentAngler  = 0;
        int currentRanger  = 0;
        int currentSealion = 0;
        int currentTower   = 0;

        // Clear all the existing towers
        foreach (TowerBase tower in GameManager.Instance.GetTowerList())
        {
            Destroy(tower.transform.parent.gameObject);
        }

        // Grab the save from turn - 1 as we start at turn 0, but the pause menu slider starts at 1
        Save loadSave = saves[turn - 1];

        // Loop through each saved tower and load them back into the scene appropriately
        foreach (int towerType in loadSave.towerTypes)
        {
            // NOTE: This can also be accomplished with a Swicth statement, but this seems more readable for little loss of performance
            // Angler
            if (towerType == 0)
            {
                GameObject  angler      = Instantiate(GameManager.Instance.GetTowerPrefabs()[0]);
                AnglerTower towerScript = angler.GetComponent <AnglerTower>();
                angler.transform.position   = new Vector3(loadSave.towerPositions[currentTower][0], loadSave.towerPositions[currentTower][1], loadSave.towerPositions[currentTower][2]);
                angler.transform.rotation   = Quaternion.Euler(loadSave.towerRotations[currentTower][0], loadSave.towerRotations[currentTower][1], loadSave.towerRotations[currentTower][2]);
                towerScript.turnPlaced      = loadSave.anglerPlaced[currentAngler];
                towerScript.fishCaught      = loadSave.caughtFish[currentAngler];
                towerScript.smallCatchRate  = loadSave.anglerCatchRates[currentAngler][0];
                towerScript.mediumCatchRate = loadSave.anglerCatchRates[currentAngler][1];
                towerScript.largeCatchRate  = loadSave.anglerCatchRates[currentAngler][2];
                currentTower++;
                currentAngler++;
            }
            // Ranger
            else if (towerType == 1)
            {
                GameObject  ranger      = Instantiate(GameManager.Instance.GetTowerPrefabs()[1]);
                RangerTower towerScript = ranger.GetComponent <RangerTower>();
                ranger.transform.position        = new Vector3(loadSave.towerPositions[currentTower][0], loadSave.towerPositions[currentTower][1], loadSave.towerPositions[currentTower][2]);
                ranger.transform.rotation        = Quaternion.Euler(loadSave.towerRotations[currentTower][0], loadSave.towerRotations[currentTower][1], loadSave.towerRotations[currentTower][2]);
                towerScript.turnPlaced           = loadSave.rangerPlaced[currentRanger];
                towerScript.slowdownEffectSmall  = loadSave.rangerRegulateRates[currentRanger][0];
                towerScript.slowdownEffectMedium = loadSave.rangerRegulateRates[currentRanger][1];
                towerScript.slowdownEffectLarge  = loadSave.rangerRegulateRates[currentRanger][2];
                currentTower++;
                currentRanger++;
            }
            // Sealion
            else if (towerType == 4)
            {
                GameObject   sealion     = Instantiate(GameManager.Instance.GetTowerPrefabs()[4]);
                SealionTower towerScript = sealion.GetComponent <SealionTower>();
                sealion.transform.position  = new Vector3(loadSave.towerPositions[currentTower][0], loadSave.towerPositions[currentTower][1], loadSave.towerPositions[currentTower][2]);
                sealion.transform.rotation  = Quaternion.Euler(loadSave.towerRotations[currentTower][0], loadSave.towerRotations[currentTower][1], loadSave.towerRotations[currentTower][2]);
                towerScript.turnPlaced      = loadSave.sealionAppeared[currentSealion];
                towerScript.maleCatchRate   = loadSave.sealionCatchRates[currentSealion][0];
                towerScript.femaleCatchRate = loadSave.sealionCatchRates[currentSealion][1];
                currentTower++;
                currentSealion++;
            }
            // Dam
            else if (towerType == 2)
            {
                GameObject dam         = Instantiate(GameManager.Instance.GetTowerPrefabs()[2]);
                Dam        towerScript = dam.GetComponent <Dam>();
                dam.transform.position = new Vector3(loadSave.towerPositions[currentTower][0], loadSave.towerPositions[currentTower][1], loadSave.towerPositions[currentTower][2]);
                dam.transform.rotation = Quaternion.Euler(loadSave.towerRotations[currentTower][0], loadSave.towerRotations[currentTower][1], loadSave.towerRotations[currentTower][2]);
                towerScript.turnPlaced = loadSave.damPlaced;
                currentTower++;
            }
            // Ladder
            else if (towerType == 3)
            {
                GameObject ladder      = Instantiate(GameManager.Instance.GetTowerPrefabs()[3]);
                DamLadder  towerScript = ladder.GetComponent <DamLadder>();
                ladder.transform.position = new Vector3(loadSave.towerPositions[currentTower][0], loadSave.towerPositions[currentTower][1], loadSave.towerPositions[currentTower][2]);
                ladder.transform.rotation = Quaternion.Euler(loadSave.towerRotations[currentTower][0], loadSave.towerRotations[currentTower][1], loadSave.towerRotations[currentTower][2]);
                towerScript.turnPlaced    = loadSave.ladderType;
                currentTower++;
            }
        }

        // Load in the generation of fish from this turn
        List <FishGenome> revertGeneration = new List <FishGenome>();

        /*
         * This is lengthy. The gist is we COULD just grab the list via GetFish in FishSchool, but then the save
         * would not be potentially serializable if we want that in the future. So instead, we are reconstructing the
         * appropriate generation based on the counts of small, medium, and large fish (both male and female) we saved
         * at the place stage of that turn.
         */

        // Small Male Fish
        FishGenePair[] SMgenes = new FishGenePair[FishGenome.Length];
        FishGenePair   sexPair;

        sexPair.momGene = FishGenome.X;
        sexPair.dadGene = FishGenome.Y;
        FishGenePair sizePair;

        sizePair.momGene = FishGenome.b;
        sizePair.dadGene = FishGenome.b;
        SMgenes[(int)FishGenome.GeneType.Sex]  = sexPair;
        SMgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome smallMGenome = new FishGenome(SMgenes);

        for (int i = 0; i < loadSave.smallMale; i++)
        {
            revertGeneration.Add(smallMGenome);
        }

        // Medium Male Fish
        FishGenePair[] MMgenes = new FishGenePair[FishGenome.Length];
        sizePair.momGene = FishGenome.b;
        sizePair.dadGene = FishGenome.B;
        MMgenes[(int)FishGenome.GeneType.Sex]  = sexPair;
        MMgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome mediumMGenome = new FishGenome(MMgenes);

        for (int i = 0; i < loadSave.mediumMale; i++)
        {
            revertGeneration.Add(mediumMGenome);
        }

        // Large Male Fish
        FishGenePair[] LMgenes = new FishGenePair[FishGenome.Length];
        sizePair.momGene = FishGenome.B;
        sizePair.dadGene = FishGenome.B;
        LMgenes[(int)FishGenome.GeneType.Sex]  = sexPair;
        LMgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome largeMGenome = new FishGenome(LMgenes);

        for (int i = 0; i < loadSave.largeMale; i++)
        {
            revertGeneration.Add(largeMGenome);
        }

        // Small Female Fish
        FishGenePair[] SFgenes = new FishGenePair[FishGenome.Length];
        sexPair.dadGene = FishGenome.X;
        SFgenes[(int)FishGenome.GeneType.Sex] = sexPair;
        sizePair.momGene = FishGenome.b;
        sizePair.dadGene = FishGenome.b;
        SFgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome smallFGenome = new FishGenome(SFgenes);

        for (int i = 0; i < loadSave.smallFemale; i++)
        {
            revertGeneration.Add(smallFGenome);
        }

        // Medium Female Fish
        FishGenePair[] MFgenes = new FishGenePair[FishGenome.Length];
        sizePair.momGene = FishGenome.B;
        sizePair.dadGene = FishGenome.b;
        MFgenes[(int)FishGenome.GeneType.Sex]  = sexPair;
        MFgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome mediumFGenome = new FishGenome(MFgenes);

        for (int i = 0; i < loadSave.mediumFemale; i++)
        {
            revertGeneration.Add(mediumFGenome);
        }

        // Large Female Fish
        FishGenePair[] LFgenes = new FishGenePair[FishGenome.Length];
        sizePair.momGene = FishGenome.B;
        sizePair.dadGene = FishGenome.B;
        LFgenes[(int)FishGenome.GeneType.Sex]  = sexPair;
        LFgenes[(int)FishGenome.GeneType.Size] = sizePair;
        FishGenome largeFGenome = new FishGenome(LFgenes);

        for (int i = 0; i < loadSave.largeFemale; i++)
        {
            revertGeneration.Add(largeFGenome);
        }
        FishGenomeUtilities.Shuffle(revertGeneration);
        GameManager.Instance.school.nextGenerationGenomes = revertGeneration;

        // Remove future turns we reverted over and set the UI slider in the pause menu appropriately
        GameManager.Instance.pauseMenu.turnSlider.maxValue = turn;
        GameManager.Instance.pauseMenu.turnSlider.value    = turn;
        GameManager.Instance.Turn = turn;
        GameManager.Instance.SetState(new PlaceState());
        currentSaveIndex = turn;
    }