Beispiel #1
0
 public BossLevel(Dictionary <int, int> staringDistances)
 {
     stars = -1;
     starD = staringDistances;
     HudManager.init(new HudManager.HudElement[] { HudManager.HudElement.Life, HudManager.HudElement.Stars,
                                                   HudManager.HudElement.Clock, HudManager.HudElement.DistanceIcon });
     door = new GameObject(0, 0, 0, 0);
     key  = new Key(new Point(0, 0));
     coin = new Coin(new Point(0, 0));
     sea  = null;
     RemoveFromGame(player);
     ListHandler();
     bg = new ScrollingBackground(AssetManager.getSprite("Level" + levelNum), new Point(0, 0));
     secondaryBackground = new ScrollingBackground(AssetManager.getSprite("SuperLong"), new Point(0, groundLevel));
     ground   = new Platform(0, groundLevel, winWidth, winWidth);
     groundVx = speeds[0];
     toCreate = new Queue <Tree.TreeShape>();
     lastObst = TreeShape.Small;
     ///ground must be created before the boss and the player
     player    = new BossPlayer(ground);
     bestBrain = DataHandler.ReadFromBinaryFile <Network>(NeatManager.bestPlayerUrl);
     boss      = new Boss(bestBrain, ground);
     obsticles = new List <Tree>();
     clouds    = new List <Drawable>();
     AddToGame(boss);
     AddToGame(player);
     AddToGame(ground);
     AddToGame(secondaryBackground);
     getGame().bossLevel = this;
 }
Beispiel #2
0
    protected virtual void ReciveGameInput()
    {
        BossPlayer p = (BossPlayer)player;

        if (InputHandler.KeyStrokeFull(Keys.LeftShift))
        {
            MediaManager.muteAction();
        }
        if (InputHandler.KeyStrokeFull(Keys.Escape))
        {
            game.pauseGame();
        }
        if (!InputHandler.IsInputBlocked())
        {
            if (InputHandler.KeyDown(Keys.W))
            {
                p.smallJump();
            }
            if (InputHandler.KeyDown(Keys.Space))
            {
                p.bigJump();
            }
        }
    }
    void Awake()
    {
        singleton         = this;
        Players           = new List <Player>();
        ActiveEffects     = new List <Effect>();
        unresolvedCards   = new List <CardDisplay>();
        playerTargetZones = new List <TargetingZone>();

        GameObject PlayerObject = new GameObject();

        PlayerObject.name = "Player 1_Object";
        PlayerObject.AddComponent <ActivePlayer>();
        ActivePlayer player = PlayerObject.GetComponent <ActivePlayer>();

        player.Username = "******";
        self            = player;

        GameObject AceObject = new GameObject();

        AceObject.name = "AceObject";
        AceObject.AddComponent <BossPlayer>();
        Boss          = AceObject.GetComponent <BossPlayer>();
        Boss.Username = "******";
    }
Beispiel #4
0
        public async Task <BossLevelState> ReportBossDamage(int startLevel, long startXp, bool useHealAbility, int damageToBoss, int damageTaken)
        {
            for (int i = 0; i < 5; i++)
            {
                try
                {
                    var message = $"{{action}}Reporting boss damage {{value}}+{damageToBoss.ToString("#,##0")}";
                    if (damageTaken > 0)
                    {
                        message += $"{{action}}, {{negvalue}}-{damageTaken.ToString("#,##0")}";
                    }
                    if (useHealAbility)
                    {
                        message += $"{{action}}, {{value}}+Heal";
                    }
                    message += $"{{action}}...";
                    this.Logger?.LogMessage(message);

                    var response = await SaliensApi.ReportBossDamageAsync(this.Token, useHealAbility, damageToBoss, damageTaken);

                    if (response.BossStatus == null)
                    {
                        return(BossLevelState.WaitingForPlayers);
                    }

                    BossPlayer currentPlayer = null;
                    var        bossHpColor   = MathUtils.ScaleColor(response.BossStatus.BossMaxHp - response.BossStatus.BossHp, response.BossStatus.BossMaxHp, new[] { "{svlow}", "{slow}", "{smed}", "{shigh}", "{svhigh}" });
                    this.Logger?.LogMessage($"{bossHpColor}Boss HP: {response.BossStatus.BossHp.ToString("#,##0")}/{response.BossStatus.BossMaxHp.ToString("#,##0")}{{reset}} - {{lasers}}{response.NumLaserUses} lasers{{reset}} - {{heals}}{response.NumTeamHeals} heals");
                    foreach (var player in response.BossStatus.BossPlayers.OrderBy(p => p.Name))
                    {
                        var playerStartLevel = player.LevelOnJoin;
                        long.TryParse(player.ScoreOnJoin, out long playerStartXp);

                        var isCurrentPlayer = playerStartLevel == startLevel && playerStartXp == startXp;
                        if (isCurrentPlayer)
                        {
                            currentPlayer = player;
                        }
                        var playerColor = isCurrentPlayer ? "{player}" : "{reset}";
                        var hpColor     = MathUtils.ScaleColor(player.MaxHp - player.Hp, player.MaxHp, new[] { "{svlow}", "{slow}", "{smed}", "{shigh}", "{svhigh}" });
                        this.Logger?.LogMessage($"{playerColor}{(player.Name.Length > 16 ? player.Name.Substring(0, 16) : player.Name).PadLeft(16)}: " +
                                                $"{hpColor}HP {player.Hp.ToString("#,##0").PadLeft(7)}/{player.MaxHp.ToString("#,##0").PadLeft(7)}{playerColor} - " +
                                                $"XP {player.XpEarned.ToString("#,##0").PadLeft(9)}/{(playerStartXp + player.XpEarned).ToString("#,##0").PadLeft(12)}");
                    }

                    if (response.GameOver && currentPlayer != null && long.TryParse(this.PlayerInfo.Score, out long oldScore))
                    {
                        // States
                        this.PlayerInfo.Score          = (oldScore + currentPlayer.XpEarned).ToString();
                        this.PlayerInfo.Level          = currentPlayer.NewLevel;
                        this.PlayerInfo.NextLevelScore = currentPlayer.NextLevelScore;
                    }
                    return(response.GameOver ? BossLevelState.GameOver : BossLevelState.Active);
                }
                catch (SaliensApiException ex)
                {
                    switch (ex.EResult)
                    {
                    case EResult.Fail:
                    case EResult.Busy:
                    case EResult.RateLimitExceeded:
                        this.Logger?.LogMessage($"{{warn}}Failed to report boss damage: {ex.Message} - Giving it a second ({i + 1}/5)...");
                        await Task.Delay(1000);

                        continue;

                    case EResult.Expired:
                    case EResult.NoMatch:
                    default:
                        this.Logger?.LogMessage($"{{warn}}Failed to report boss damage: {ex.Message}");
                        ResetState();
                        throw;
                    }
                }
                catch (WebException ex)
                {
                    this.Logger?.LogMessage($"{{warn}}Failed to report boss damage: {ex.Message} - Giving it a second ({i + 1}/5)...");
                    await Task.Delay(1000);

                    continue;
                }
            }

            // States, only set when failed
            ResetState();
            void ResetState()
            {
                this.ActiveZone = null;
                this.PlayerInfo.ActiveBossGame     = null;
                this.PlayerInfo.ActiveZonePosition = null;
                this.State = BotState.ForcedZoneLeave;
            }

            return(BossLevelState.Error);
        }
Beispiel #5
0
 private void Start()
 {
     thePlayer = FindObjectOfType <BossPlayer>();
     thePig    = GetComponent <Pig>();
     nav       = GetComponent <NavMeshAgent>();
 }
    IEnumerator StartGameRoutine()
    {
        if (!isTitleHidden)
        {
            isTitleHidden = true;
            titleView.Hide();
            yield return(new WaitForSeconds(0.4f));
        }

        //Flash
        flashView.Show();                       //0.2f to show, and 0.2f to hide
        yield return(new WaitForSeconds(0.2f)); //Let flash finish on all screen


        SpawnAIs(); //SpawnAIs if needed

        //Clean
        Bullet[] bullets = FindObjectsOfType <Bullet>();
        for (int i = 0; i < bullets.Length; i++)
        {
            if (bullets[i].gameObject.activeInHierarchy)
            {
                ObjectPool.Instance.SaveObjectToPool(bullets[i].gameObject);
            }
        }

        ring.Restart();
        if (lastManRingCanons != null)
        {
            Destroy(lastManRingCanons.gameObject);
            lastManRingCanons = null;
        }

        HealAll();
        RepositionPlayers();


        //Change Mode
        if (State.Equals(GameState.Initializing))
        {
            MusicController.Instance.PlayNormalMusic(0.1f);
            State = GameState.LastManStanding;
            //Change View
            yield return(StartCoroutine(lastManStandingCounter.StartCountRoutine(null)));

            MusicController.Instance.PlayClip(0.6f, 4f);
        }
        else if (State.Equals(GameState.LastManStanding) && lastManStandingCounts >= 3)
        {
            State = GameState.PlayersVsPlayerBoss;

            //Change View
            yield return(StartCoroutine(playerBossCounter.StartCountRoutine(null)));

            //Flash
            flashView.Show();                       //0.2f to show, and 0.2f to hide
            yield return(new WaitForSeconds(0.2f)); //Let flash finish on all screen
        }
        else if (State.Equals(GameState.PlayersVsPlayerBoss) && (playerBossKilledWin || playersVsBossPlayerCounts >= 1))
        {
            State = GameState.PlayersVsLastBoss;

            if (bossPlayer != null)
            {
                Destroy(bossPlayer.gameObject);
                bossPlayer = null;
                players[firstBloodedPlayer.DeviceId] = firstBloodedPlayer;
                firstBloodedPlayer.gameObject.SetActive(true);
            }
            RepositionPlayers();

            MusicController.Instance.StopClip(3f);

            //Introduction dialogue
            yield return(StartCoroutine(bossDialogueBox.StartRoutine("Are you having fun...", null, 0.5f)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("... Player?", null)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("LET", null, 0.5f)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("ME", null, 0.5f)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("JOIN", null, 0.5f)));

            yield return(new WaitForSeconds(0.5f));

            //Flash
            flashView.Show();                       //0.2f to show, and 0.2f to hide
            yield return(new WaitForSeconds(0.2f)); //Let flash finish on all screen

            postProcessVolume.profile = finalProfile;
        }
        else if (State.Equals(GameState.PlayersVsLastBoss) && (finalBossKilledWin || finalBossCounts >= 3))
        {
            MusicController.Instance.StopClip(0.5f);
            //Boss dialogues
            yield return(StartCoroutine(bossDialogueBox.StartRoutine("Oh no. Did you really think you could WIN?", null)));

            yield return(StartCoroutine(hahaView.StartCountRoutine(null))); //HA HA

            finalBoss.Heal(15000);
            yield return(StartCoroutine(bossDialogueBox.StartRoutine("It's my world...", null, 0.5f)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("... Player", null, 1f)));

            yield return(StartCoroutine(bossDialogueBox.StartRoutine("And, in my world, I do what I wish", null)));

            //Kill all players
            yield return(new WaitForSeconds(1f));

            foreach (var item in players)
            {
                item.Value.HardKill();
            }
            yield return(new WaitForSeconds(1f));

            //HA HA HA HA HA HA
            yield return(StartCoroutine(bossDialogueBox.StartRoutine("HA HA HA HA HA HA HA...", null, 0.1f)));

            //Obscure screen. Ready for credits
            gameOverView.Show();

            State = GameState.Credits;

            postProcessVolume.profile = normalProfile;
        }

        bool willGameActivate = true;

        if (State.Equals(GameState.LastManStanding))
        {
            lastManStandingCounts++;
        }
        else if (State.Equals(GameState.PlayersVsPlayerBoss))
        {
            if (bossPlayer == null)
            {
                //Instantiate player prefab, store device id + player script in a dictionary
                GameObject bossPlayerGo = Instantiate(playerBossPrefab, Vector3.zero, Quaternion.Euler(0f, 0f, -90f)) as GameObject;
                bossPlayer = bossPlayerGo.GetComponent <BossPlayer>();

                //Replace
                players[firstBloodedPlayer.DeviceId] = bossPlayer;

                //Set position and color
                bossPlayer.SetColor(firstBloodedPlayer.myColor);
                bossPlayer.SetDeviceId(firstBloodedPlayer.DeviceId);

                //Unactive old
                firstBloodedPlayer.gameObject.SetActive(false);
            }

            bossPlayer.ForceCenterLook();
            bossPlayer.transform.position = Vector3.zero;
            playersVsBossPlayerCounts++;
        }
        else if (State.Equals(GameState.PlayersVsLastBoss))
        {
            //Create Final Boss
            if (finalBoss == null)
            {
                GameObject finalBossGo = Instantiate(finalBossPrefab, Vector3.zero, Quaternion.Euler(0f, 0f, 0f)) as GameObject;
                finalBoss = finalBossGo.GetComponent <FinalBoss>();

                //Its show time
                yield return(StartCoroutine(finalBossTitle.StartCountRoutine(null)));

                MusicController.Instance.PlayBossMusic(0.75f);
            }

            finalBoss.Heal(15000);

            finalBossCounts++;
        }
        else if (State.Equals(GameState.Credits)) //Credits
        {
            //Delete boss
            if (finalBoss != null)
            {
                Destroy(finalBoss.gameObject);
                //Its show time
            }

            State = GameState.Initializing;
            lastManStandingCounts     = 0;
            playersVsBossPlayerCounts = 0;
            finalBossCounts           = 0;
            firstBloodedPlayer        = null;

            yield return(new WaitForSeconds(5f));

            gameOverView.Hide();

            creditsView.Show();//Show credits
            yield return(new WaitForSeconds(0.5f));

            yield return(new WaitForSeconds(10f)); //Wait

            creditsView.Hide();                    //Hide
            willGameActivate = false;
            Invoke("StartGame", 1f);
        }

        if (willGameActivate)
        {
            mainCounter.StartCount(ActivateGame);
        }
    }