예제 #1
0
 void OnGUI()
 {
     if (showPanBorder)
     {
         Color color = new Color(1f, 0, 0, 0.5f);
         EditorGUITools.DrawRect(_panBorders, color);
     }
 }
예제 #2
0
    public void OnGUI()
    {
#if DEBUG
        DisplayUnityLogs(460f, 25f, 420f, 505f);
#endif
        if (Singleton <TrainerOptions> .Instance.DisplayTrainerMenu && Singleton <TrainerOptions> .Instance.CheatsEnabled)
        {
            var containerWidth  = 420f;
            var containerHeight = 505f;

            var containerStyle = new GUIStyle(GUI.skin.box)
            {
                padding = new RectOffset(10, 10, 10, 5)
            };

            var horizontalToggleGroupStyle = new GUIStyle(GUI.skin.box)
            {
                padding     = new RectOffset(5, 5, 0, 0),
                fixedHeight = 25f
            };

            var horizontalSliderGroupStyle = new GUIStyle(GUI.skin.box)
            {
                padding = new RectOffset(0, 0, 0, 0),
            };

            var toggleStyle = new GUIStyle(GUI.skin.toggle)
            {
                margin  = new RectOffset(0, 0, 2, 0),
                padding = new RectOffset(15, 0, 3, 2)
            };

            var buttonStyle = new GUIStyle(GUI.skin.button)
            {
                padding = new RectOffset(5, 5, 5, 5)
            };

            var sliderStyle = new GUIStyle()
            {
                padding = new RectOffset(8, 8, 0, 0)
            };

            // Calculate / format frame-rate
            var deltaTimeMs    = this._deltaTime * 1000f;
            var fps            = 1f / this._deltaTime;
            var formattedMsFps = string.Format(" {0:0.0} ms ({1:0} fps)", deltaTimeMs, fps);

            GUILayout.BeginArea(new Rect(25f, 25f, containerWidth, containerHeight), containerStyle);

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=silver><b>Stick Fight The Game</b></color>", new GUIStyle {
                alignment = TextAnchor.MiddleLeft
            });
            GUILayout.Label("<color=maroon><b>" + formattedMsFps + "</b></color>", new GUIStyle {
                alignment = TextAnchor.MiddleRight
            });
            GUILayout.EndHorizontal();

            GUILayout.Label("<color=silver><b>+12 Trainer v{Application.ProductVersion} - Made by loxa</b></color>");
            GUILayout.Space(5);
            GUILayout.Label("<color=grey><b>Toggle Options</b></color>");

            GUILayout.BeginHorizontal();

            GUILayout.BeginVertical();

            // Toggle between 'Public (no-cheats)' and 'Modders-only (cheats)' mode
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.TrainerActive, "<color=green> " + (Singleton <TrainerOptions> .Instance.TrainerActive ? "Modders Mode" : "Public Mode") + "</color>", GUILayout.Width(140)) != Singleton <TrainerOptions> .Instance.TrainerActive)
            {
                // Announce restart due to online mode change
                MultiplayerManager.mGameManager.winText.fontSize = 140f;
                MultiplayerManager.mGameManager.winText.color    = Color.white;
                MultiplayerManager.mGameManager.winText.text     = (!Singleton <TrainerOptions> .Instance.TrainerActive
                    ? "MODDERS ONLY - CHEATS ENABLED\r\nRestarting in 2 seconds..."
                    : "PUBLIC - CHEATS DISABLED\r\nRestarting in 2 seconds...");

                MultiplayerManager.mGameManager.winText.gameObject.SetActive(true);

                // Toggle trainer active state
                Singleton <TrainerOptions> .Instance.TrainerActive = !Singleton <TrainerOptions> .Instance.TrainerActive;

                // Provide time for the announcement text to appear and be read
                StartCoroutine(Wait(2f));

                // Restart game and switch lobby type
                MultiplayerManager.mGameManager.RestartGame();
                MatchmakingHandler.SetNewLobbyType(ELobbyType.k_ELobbyTypePrivate);
            }

            // Toggle flying mode for all players
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.FlightMode, " Flying Mode", GUILayout.Width(140)) != Singleton <TrainerOptions> .Instance.FlightMode)
            {
                Singleton <TrainerOptions> .Instance.FlightMode = !Singleton <TrainerOptions> .Instance.FlightMode;
                ToggleFlyingMode();
            }

            // Toggle uncapped fire-rate
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.UncappedFirerate, " Uncapped Fire-rate", GUILayout.Width(140)) != Singleton <TrainerOptions> .Instance.UncappedFirerate)
            {
                Singleton <TrainerOptions> .Instance.UncappedFirerate = !Singleton <TrainerOptions> .Instance.UncappedFirerate;
                ToggleUncappedFirerate();
            }

            GUILayout.EndVertical();

            GUILayout.BeginVertical();

            // Toggle display of health bars
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.DisplayHealthBars, " Health Bars", GUILayout.Width(130)) != Singleton <TrainerOptions> .Instance.DisplayHealthBars)
            {
                Singleton <TrainerOptions> .Instance.DisplayHealthBars = !Singleton <TrainerOptions> .Instance.DisplayHealthBars;
            }

            // Toggle full automatic weapons
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.FullAuto, " Full Auto", GUILayout.Width(130)) != Singleton <TrainerOptions> .Instance.FullAuto)
            {
                Singleton <TrainerOptions> .Instance.FullAuto = !Singleton <TrainerOptions> .Instance.FullAuto;
                ToggleFullAuto();
            }

            // Toggle unlimited ammunition
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.UnlimitedAmmo, " Unlimited Ammo", GUILayout.Width(130)) != Singleton <TrainerOptions> .Instance.UnlimitedAmmo)
            {
                Singleton <TrainerOptions> .Instance.UnlimitedAmmo = !Singleton <TrainerOptions> .Instance.UnlimitedAmmo;
                ToggleUnlimitedAmmo();
            }

            GUILayout.EndVertical();

            GUILayout.BeginVertical();

            // Toggle display of scoreboard
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.DisplayScore, " Scoreboard", GUILayout.Width(150)) != Singleton <TrainerOptions> .Instance.DisplayScore)
            {
                Singleton <TrainerOptions> .Instance.DisplayScore = !Singleton <TrainerOptions> .Instance.DisplayScore;
            }

            // Toggle no recoil
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.NoRecoil, " No Recoil", GUILayout.Width(150)) != Singleton <TrainerOptions> .Instance.NoRecoil)
            {
                Singleton <TrainerOptions> .Instance.NoRecoil = !Singleton <TrainerOptions> .Instance.NoRecoil;
                ToggleNoRecoil();
            }

            // Toggle unlimited health
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.UnlimitedHealth, " Unlimited Health", GUILayout.Width(150)) != Singleton <TrainerOptions> .Instance.UnlimitedHealth)
            {
                // Handled in the patched TakeDamage method
                Singleton <TrainerOptions> .Instance.UnlimitedHealth = !Singleton <TrainerOptions> .Instance.UnlimitedHealth;
            }

            GUILayout.EndVertical();

            GUILayout.EndHorizontal();

            GUILayout.Space(10);

            GUILayout.Label("<color=grey><b>Spawn Bots</b></color>");

            GUILayout.BeginHorizontal();

            GUILayout.BeginHorizontal(horizontalToggleGroupStyle, GUILayout.Width(100));
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.SpawnPcEnabled, " PC", toggleStyle, GUILayout.Width(50)) != Singleton <TrainerOptions> .Instance.SpawnPcEnabled)
            {
                Singleton <TrainerOptions> .Instance.SpawnPcEnabled = !Singleton <TrainerOptions> .Instance.SpawnPcEnabled;
            }
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.SpawnNpcEnabled, " NPC", toggleStyle, GUILayout.Width(50)) != Singleton <TrainerOptions> .Instance.SpawnNpcEnabled)
            {
                Singleton <TrainerOptions> .Instance.SpawnNpcEnabled = !Singleton <TrainerOptions> .Instance.SpawnNpcEnabled;
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal(horizontalToggleGroupStyle, GUILayout.Width(170));
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.AiAggressiveEnabled, " Aggressive", toggleStyle, GUILayout.Width(95)) != Singleton <TrainerOptions> .Instance.AiAggressiveEnabled)
            {
                Singleton <TrainerOptions> .Instance.AiAggressiveEnabled = !Singleton <TrainerOptions> .Instance.AiAggressiveEnabled;
            }
            if (GUILayout.Toggle(Singleton <TrainerOptions> .Instance.AiNormalEnabled, " Normal", toggleStyle, GUILayout.Width(60)) != Singleton <TrainerOptions> .Instance.AiNormalEnabled)
            {
                Singleton <TrainerOptions> .Instance.AiNormalEnabled = !Singleton <TrainerOptions> .Instance.AiNormalEnabled;
            }
            GUILayout.EndHorizontal();

            GUILayout.EndHorizontal();
            GUILayout.Space(3);

            GUILayout.BeginHorizontal(horizontalSliderGroupStyle);

            GUILayout.BeginVertical(sliderStyle);
            GUILayout.Label("Damage");
            var aiDamageMultiplier = GUILayout.HorizontalSlider(Singleton <TrainerOptions> .Instance.AiDamageMultiplier, 1f, 5f);
            if (aiDamageMultiplier != Singleton <TrainerOptions> .Instance.AiDamageMultiplier)
            {
                Singleton <TrainerOptions> .Instance.AiDamageMultiplier = aiDamageMultiplier;
                SetBotStats();
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical(sliderStyle);
            GUILayout.Label("Punch Force");
            var aiPunchForce = GUILayout.HorizontalSlider(Singleton <TrainerOptions> .Instance.AiPunchForce, 120000f, 800000f);
            if (aiPunchForce != Singleton <TrainerOptions> .Instance.AiPunchForce)
            {
                Singleton <TrainerOptions> .Instance.AiPunchForce = aiPunchForce;
                SetBotStats();
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical(sliderStyle);
            GUILayout.Label("Punch Time");
            var aiPunchTime = GUILayout.HorizontalSlider(Singleton <TrainerOptions> .Instance.AiPunchTime, 0.1f, 0.50f);
            if (aiPunchTime != Singleton <TrainerOptions> .Instance.AiPunchTime)
            {
                Singleton <TrainerOptions> .Instance.AiPunchTime = aiPunchTime;
                SetBotStats();
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical(sliderStyle);
            GUILayout.Label("Speed");
            var aiMovementForceMultiplier = GUILayout.HorizontalSlider(Singleton <TrainerOptions> .Instance.AiMovementForceMultiplier, 2000f, 6000f);
            if (aiMovementForceMultiplier != Singleton <TrainerOptions> .Instance.AiMovementForceMultiplier)
            {
                Singleton <TrainerOptions> .Instance.AiMovementForceMultiplier = aiMovementForceMultiplier;
                SetBotStats();
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical(sliderStyle);
            GUILayout.Label("Jump Height");
            var aiMovementJumpForceMultiplier = GUILayout.HorizontalSlider(Singleton <TrainerOptions> .Instance.AiMovementJumpForceMultiplier, 25f, 100f);
            if (aiMovementJumpForceMultiplier != Singleton <TrainerOptions> .Instance.AiMovementJumpForceMultiplier)
            {
                Singleton <TrainerOptions> .Instance.AiMovementJumpForceMultiplier = aiMovementJumpForceMultiplier;
                SetBotStats();
            }
            GUILayout.EndVertical();

            GUILayout.EndHorizontal();
            GUILayout.Space(3);

            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Player", buttonStyle, GUILayout.Width(75)))
            {
                SpawnBotEnemyPlayer();
            }

            if (GUILayout.Button("Zombie", buttonStyle, GUILayout.Width(75)))
            {
                SpawnBotEnemyZombie();
            }

            if (GUILayout.Button("Bolt", buttonStyle, GUILayout.Width(75)))
            {
                SpawnBotEnemyBrat();
            }

            GUILayout.EndHorizontal();

            // Display available shortcuts

            GUILayout.Space(10);
            GUILayout.Label("<color=grey><b>PC Keyboard Shortcuts</b></color>");
            GUILayout.Label("- Toggle Menu:\t[SHIFT] + [M]\r\n" +
                            "- Skip Map:\t[SHIFT] + [S]\r\n" +
                            "- Spawn Weapon:\t[R] or [P]\r\n" +
                            "- Browse Weapons:\t[Q] for previous or [E] for next");

            GUILayout.Space(5);
            GUILayout.Label("<color=grey><b>Xbox 360 Controller Shortcuts</b></color>");
            GUILayout.Label("- Toggle Menu:\t[RB] + [A]\r\n" +
                            "- Skip Map:\t[RB] + [B]\r\n" +
                            "- Spawn Weapon:\t[DPadUp] or [DPadDown]\r\n" +
                            "- Browse Weapons:\t[DPadLeft] or [DPadRight]");

            GUILayout.EndArea();
        }

        if (Singleton <TrainerOptions> .Instance.CheatsEnabled)
        {
            if (MultiplayerManager.mGameManager != null && MultiplayerManager.mGameManager.controllerHandler != null && MultiplayerManager.mGameManager.controllerHandler.players != null)
            {
                // Display healthbars and scores for all players
                foreach (var player in MultiplayerManager.mGameManager.controllerHandler.players)
                {
                    if (player != null && player.fighting != null)
                    {
                        if (Singleton <TrainerOptions> .Instance.DisplayHealthBars)
                        {
                            var health        = 0f;
                            var healthHandler = player.fighting.GetComponent <HealthHandler>();
                            if (healthHandler != null)
                            {
                                health = healthHandler.health;
                            }

                            EditorGUITools.DrawRect(new Rect(Screen.width - 125, 30f * player.playerID + 10f, Math.Max(0f, health), 20f), GetPlayerColorByIndex(player.playerID), null);
                            GUI.Label(new Rect(Screen.width - 160, 30f * player.playerID + 10f, 250f, 25f), Math.Max(0.0, Math.Round(health)).ToString());
                        }

                        if (Singleton <TrainerOptions> .Instance.DisplayScore && player.fighting.stats != null)
                        {
                            GUI.Label(new Rect(Screen.width - 180, 30f * (float)player.playerID + 10f, 250f, 25f), "<b>" + player.fighting.stats.wins.ToString() + "</b>");
                        }
                    }
                }
            }
        }
    }