コード例 #1
0
ファイル: SpawnTable.cs プロジェクト: RyokaL/SH_Project
    public List <SpawnTableDetails> getTable(LevelStage diff)
    {
        switch (diff)
        {
        case LevelStage.Starter:
            return(StarterTable);

        case LevelStage.Easy:
            return(EasyTable);

        case LevelStage.Medium:
            return(MediumTable);

        case LevelStage.Hard:
            return(HardTable);

        case LevelStage.VeryHard:
            return(VeryHardTable);

        case LevelStage.Nightmare:
            return(NightmareTable);

        default:
            return(null);
        }
    }
コード例 #2
0
    void Update()
    {
        if (paused)
        {
            return;
        }

        if (levelActive && !allLevelsComplete && currentLevelIndex < levels.Count && currentStageIndex < levels[currentLevelIndex].Stages.Count)
        {
            currentStageTimePassed += Time.deltaTime;
            LevelStage currentStage = levels[currentLevelIndex].Stages[currentStageIndex];
            for (int i = currentStageEnemyNumber; i < currentStage.Enemies.Count; i++)
            {
                if (currentStage.SpawnTimings[i] <= currentStageTimePassed)
                {
                    SpawnEnemy(currentStage.Enemies[i], currentStage.SpawnLocations[i] + baseArenaSpawnLocation);
                    currentStageEnemyNumber++;
                }
                else
                {
                    break;
                }
            }
        }
    }
コード例 #3
0
    public static EnemyStats calcStats(EnemyMaxStats max, LevelStage diff, float time)
    {
        float health = max.minHealth + (int)(time / 30) * max.healthMod;

        if (health > max.maxHealth)
        {
            health = max.maxHealth;
        }

        float speed = Random.Range(max.minSpeed, max.minSpeed + (time / 20) * max.speedMod);

        if (speed > max.maxSpeed)
        {
            speed = max.maxSpeed;
        }

        Spell attack = null;

        if (max.attacks != null && max.attacks.Count > 0)
        {
            int attackType = Random.Range(0, max.attacks.Count);
            attack = max.attacks[attackType];
        }

        SpellAttr attr      = max.attackModifiers;
        SpellMod  modifiers = new SpellMod();

        modifiers.damage = Random.Range(attr.minDamage, attr.minDamage + attr.minDamage * time / 90);
        if (modifiers.damage > attr.maxDamage)
        {
            modifiers.damage = attr.maxDamage;
        }

        modifiers.damagePercent = 1;

        int  dotChance = Random.Range(0, 101);
        bool dot       = (15 * (int)diff) >= dotChance;

        if (dot)
        {
            modifiers.dot     = true;
            modifiers.dotTick = Random.Range(attr.minDot, attr.minDot + attr.minDot * time / 180);
            if (modifiers.dotTick > attr.maxDot)
            {
                modifiers.dotTick = attr.maxDot;
            }
            modifiers.dotLength = Random.Range(attr.minFireRate, attr.maxFireRate);
        }

        modifiers.TTL      = Random.Range(attr.minTTL, attr.maxTTL);
        modifiers.fireRate = Random.Range(attr.minFireRate, attr.minFireRate + attr.minFireRate * time / 180);
        if (modifiers.fireRate > attr.maxFireRate)
        {
            modifiers.fireRate = attr.maxFireRate;
        }

        //TODO: Do range for some enemies after adding wind weapon

        return(new EnemyStats(health, attack, modifiers, max.sightRange, max.sightAngle, speed));
    }
コード例 #4
0
ファイル: Level.cs プロジェクト: thebirk/CS-SDLTest
    public void Update()
    {
        scroll += Time.DeltaTime;

        LevelStage stage = stages.Peek();

        if (scroll >= stages.Peek().scroll)
        {
            if (stage.DoStage(this))
            {
                stages.Dequeue();
            }
        }

        foreach (Entity e in entities)
        {
            if (!e.removed)
            {
                e.Update();
            }
        }

        foreach (Entity e in entititesToAdd)
        {
            entities.Add(e);
        }
        entititesToAdd.Clear();
    }
コード例 #5
0
    public static string getStageText(LevelStage ls)
    {
        string s = "";

        switch (ls)
        {
        case LevelStage.AIMING:
            s = "Left click on cannon: aim\n" +
                "Right click on cannon: adjust power\n" +
                "Space: fire";
            break;

        case LevelStage.FIRING:
            s = "Space: make platform\n" +
                "R: aim again";
            break;

        case LevelStage.WAITING:
            s = "Space: confirm\n" +
                "R: aim again";
            break;

        case LevelStage.PLATFORMING:
            s = "Space: jump\n" +
                "R: aim again\n" +
                "E: reset Cannonboy";
            break;
        }

        return(s);
    }
コード例 #6
0
 void SetCurrentStageLevel()
 {
     currentLevelStage     = levelStages[idOfStage];
     currentObjectRotation = currentLevelStage.rotationObject;
     ResetTargetPosition(currentLevelStage.firstYPosition);
     SetPlayerPosition(currentLevelStage.playerSpawnPoint.position);
 }
コード例 #7
0
ファイル: LevelXMLParser.cs プロジェクト: hrecker/ArenaGame
    private static LevelStage ParseLevelStage(XElement stageRoot)
    {
        LevelStage stage = new LevelStage();

        stage.Enemies        = new List <EnemyType>();
        stage.SpawnLocations = new List <Vector2>();
        stage.SpawnTimings   = new List <float>();

        IEnumerable <XElement> spawnElements = stageRoot.Elements("EnemySpawn");

        if (spawnElements != null && spawnElements.Any())
        {
            foreach (XElement spawn in spawnElements)
            {
                EnemyType type = (EnemyType)Enum.Parse(typeof(EnemyType), spawn.Element("EnemyType").Value);
                stage.Enemies.Add(type);
                float spawnX = float.Parse(spawn.Element("SpawnLocation").Element("X").Value);
                float spawnY = float.Parse(spawn.Element("SpawnLocation").Element("Y").Value);
                stage.SpawnLocations.Add(new Vector2(spawnX, spawnY));
                float spawnTime = float.Parse(spawn.Element("SpawnTiming").Value);
                stage.SpawnTimings.Add(spawnTime);
            }
        }

        return(stage);
    }
コード例 #8
0
ファイル: LevelXMLParser.cs プロジェクト: hrecker/ArenaGame
    //TODO better error output when xml parsing fails
    private static Level ParseLevel(XElement root)
    {
        Level level = new Level();

        level.ArenaName        = root.Element("Arena").Value;
        level.CompletionPoints = int.Parse(root.Element("CompletionPoints").Value);
        level.LevelNumber      = int.Parse(root.Element("LevelNumber").Value);

        level.ItemSelection = new string[3];
        int i = 0;

        foreach (XElement itemElement in root.Element("VictoryItems").Elements("Item"))
        {
            level.ItemSelection[i] = itemElement.Value;
            i++;
        }

        level.Stages = new List <LevelStage>();

        IEnumerable <XElement> stageElements = root.Elements("Stage");

        if (stageElements != null && stageElements.Any())
        {
            foreach (XElement stage in stageElements)
            {
                LevelStage newStage = ParseLevelStage(stage);
                level.Stages.Add(newStage);
            }
        }

        return(level);
    }
コード例 #9
0
    public GameObject spawnNewEnemy(LevelStage diff, float time)
    {
        if (diff != lastSpawnStage)
        {
            lastSpawnStage = diff;
            if (spawnTable != null)
            {
                completeSpawnTable.AddRange(spawnTable.getTable(diff));
            }
        }

        if (cooldownCounter >= spawnCooldown && completeSpawnTable.Count > 0 && spawnedEnemies.Count < maxEnemies)
        {
            cooldownCounter = 0;

            int randIndex = Random.Range(0, completeSpawnTable.Count);
            if (diff == LevelStage.Medium)
            {
                randIndex = Random.Range(randIndex, completeSpawnTable.Count);
            }
            if (diff == LevelStage.VeryHard)
            {
                randIndex = Random.Range(randIndex, completeSpawnTable.Count);
            }

            SpawnTableDetails entry    = completeSpawnTable[randIndex];
            GameObject        newEnemy = Instantiate(entry.enemyType, transform.position, transform.rotation);
            Enemy             enClass  = newEnemy.GetComponent <Enemy>();
            enClass.stats = calcStats(entry.maxStats, diff, time);

            float hue = (360 * enClass.stats.maxHealth / entry.maxStats.maxHealth) + 60;
            if (hue > 360)
            {
                hue = 0;
            }
            float sat = enClass.stats.maxHealth == entry.maxStats.minHealth ? 0 : 100;

            if (newEnemy.name.StartsWith("GroundEnemy"))
            {
                newEnemy.GetComponentInChildren <Renderer>().materials[1].color = Color.HSVToRGB(hue / 360, sat / 100, 1);
            }
            else
            {
                newEnemy.GetComponentInChildren <Renderer>().material.color = Color.HSVToRGB(hue / 360, sat / 100, 1);
            }


            spawnedEnemies.Add(newEnemy);
            Instantiate(particleEffect, transform.position, transform.rotation);
            return(newEnemy);
        }
        else
        {
            return(null);
        }
    }
コード例 #10
0
    void Update()
    {
        timeElapsed += Time.deltaTime;
        timePoints  += Time.deltaTime;

        System.TimeSpan timeElapsedSpan = System.TimeSpan.FromSeconds(timeElapsed);

        string timeElapsedString = string.Format("{0:D2}:{1:D2}:{2:D2}", timeElapsedSpan.Hours, timeElapsedSpan.Minutes, timeElapsedSpan.Seconds);

        timerText.text = timeElapsedString;

        float timeMins = timeElapsed / 60;

        if (stage == LevelStage.Starter && timeMins >= 1)
        {
            stage = LevelStage.Easy;
            updateSpawnTable();
        }

        if (stage == LevelStage.Easy && timeMins >= 3)
        {
            stage = LevelStage.Medium;
            updateSpawnTable();
        }

        if (stage == LevelStage.Medium && timeMins >= 5)
        {
            stage = LevelStage.Hard;
            updateSpawnTable();
        }

        if (stage == LevelStage.Hard && timeMins >= 7)
        {
            stage = LevelStage.VeryHard;
            updateSpawnTable();
        }

        if (stage == LevelStage.VeryHard && timeMins >= 10)
        {
            stage = LevelStage.Nightmare;
            updateSpawnTable();
        }

        cleanEnemyList();
        spawnEnemiesNearPlayer();
    }
コード例 #11
0
 public static void changeLevelStage(LevelStage ls)
 {
     levelStage = ls;
     modeText.GetComponent <Text>().text = getStageText(ls);
 }