예제 #1
0
 /// <summary>
 /// Új játék indítása.
 /// </summary>
 /// <param name="Mode">Új játékmód beállítása, amennyiben van értéke</param>
 void LaunchGame(GameModes?Mode = null)
 {
     if (Mode.HasValue)
     {
         GameMode = Mode.Value;
     }
     DespawnMenu();
     Dispenser.DispenserReset();
     Playing        = true;
     Score          = 0;
     ThisCombo      = 0;
     SinceLastCombo = 0;
     if (GameMode == GameModes.Arcade) // Induljon hiperaktívan az árkád mód
     {
         Time.timeScale = ArcadeSpeed;
     }
     // Score attack / multiplayer
     Lives    = 3;
     LoseLife = false;
     // Time attack / arcade
     TimeRemaining = 60;
     // Multiplayer
     ScoreP2           = 0;
     CurrentController = Controllers.LeapMotion + Convert.ToInt32(HoloLensMode) * (Controllers.HoloLens - Controllers.LeapMotion);
 }
예제 #2
0
 /// <summary>
 /// Küldje be a kért mennyiségű tárgyat.
 /// </summary>
 void LateUpdate()
 {
     Delay -= Time.deltaTime;
     if (Delay <= 0)
     {
         Dispenser.ForceDispense();
         Delay = 1 / (float)ObjectsPerSec;
     }
 }
예제 #3
0
        /// <summary>
        /// Képernyőről kieséskor hívódik meg.
        /// </summary>
        public void Fell()
        {
            Dispenser.ObjectDespawned(); // Tudassuk a dobálóval, hogy valami eltűnt
            if (Type == Types.Grenade)   // A gránátnál az a jó, ha leesik
            {
                Destroy(gameObject);
                return;
            }
            GameObject Marker = new GameObject(); // Jelző a képernyőre

            Marker.transform.position = transform.position;
            Marker.AddComponent <FallMarker>().Duration *= Time.timeScale;
            Game.LoseLife = true; // Életvesztés
        }
예제 #4
0
        /// <summary>
        /// Képkockafrissítés.
        /// </summary>
        void Update()
        {
            // Menüműveletek kezelése
            if (SelectedMenuItem != -1)
            {
                switch (SelectedMenu)
                {
                case 0:     // Főmenü
                    switch (SelectedMenuItem)
                    {
                    case 0: SpawnModeSelect(); break;         // Új játék

                    case 1: SpawnCustomizationMenu(); break;  // Testreszabás

                    case 2: Application.Quit(); return;       // Kilépés
                    }
                    break;

                case 1:                                                     // Testreszabás
                    int BladeCount = Blades.Length;
                    if (SelectedMenuItem == BladeCount + Wallpapers.Length) // Vissza
                    {
                        SpawnMainMenu();
                    }
                    else if (SelectedMenuItem != -1)       // Kiválasztott elemek
                    {
                        if (SelectedMenuItem < BladeCount)
                        {
                            if (!MenuItems[SelectedMenuItem].Action.StartsWith("Reach"))
                            {
                                PlayerPrefs.SetInt("Blade", SetBlade(SelectedMenuItem));
                            }
                        }
                        else
                        {
                            if (!MenuItems[SelectedMenuItem].Action.StartsWith("Combo"))
                            {
                                PlayerPrefs.SetInt("Wallpaper", SetBackground(SelectedMenuItem - BladeCount));
                            }
                        }
                        SpawnCustomizationMenu(SelectedMenuItem < BladeCount + Wallpapers.Length ? SelectedMenuItem : -1);
                    }
                    break;

                case 2:     // Játékmódválasztó
                    if (SelectedMenuItem == 0)
                    {
                        SpawnMainMenu();
                    }
                    else
                    {
                        LaunchGame((GameModes)SelectedMenuItem);
                    }
                    break;

                case 3:                                   // Game Over
                    if (SelectedMenuItem == 0)            // Újra
                    {
                        LaunchGame();                     // Új játék
                        SelectedMenu = 0;                 // Enélkül maradna a Game Over UI
                    }
                    else                                  // Főmenü
                    {
                        GameMode = GameModes.ScoreAttack; // Ha többjátékos lenne, használható lenne a player 2 pointer, árkádban pedig powerupok kerülnének a menübe
                        SpawnMainMenu();                  // Menü megjelenítése
                    }
                    break;

                default:
                    break;
                }
                DisableInput = .25f;
            }
            SelectedMenuItem = -1;
            // Játék kezelése
            if (Playing)
            {
                Dispenser.DispenserUpdate(); // Dobáló frissítése
                                             // Kombó kiértékelése
                SinceLastCombo += Time.deltaTime;
                if (SinceLastCombo > .15f && GameMode != GameModes.Multiplayer)
                {
                    if (ThisCombo > 2)
                    {
                        if (BestCombo < ThisCombo)
                        {
                            BestCombo = ThisCombo;
                        }
                        GameObject Marker = new GameObject();
                        Marker.transform.position = LastHit;
                        ComboMarker ComboMark = Marker.AddComponent <ComboMarker>();
                        ComboMark.Combo     = ThisCombo;
                        ComboMark.Duration *= Time.timeScale;
                        Score += ThisCombo;
                    }
                    ThisCombo = 0;
                }
                // Pontgyűjtő módok
                if (GameMode == GameModes.ScoreAttack || GameMode == GameModes.Multiplayer)
                {
                    if (LoseLife)
                    {
                        if (--Lives == 0)
                        {
                            Playing = false;
                            GameOver();
                        }
                        LoseLife = false;
                    }
                    // Idő elleni módok
                }
                else if (GameMode == GameModes.TimeAttack || GameMode == GameModes.Arcade)
                {
                    TimeRemaining -= Time.deltaTime / Time.timeScale;
                    if (TimeRemaining <= 0)
                    {
                        Playing = false;
                        GameOver();
                    }
                }
            }
            // Menüobjektumok elhelyezése
            for (int i = 0; i < MenuItems.Length; i++)
            {
                MenuItems[i].Obj.transform.position = new Vector3(Mathf.Lerp(CloserBL.x, CloserBR.x, MenuItems[i].ScreenPos.x), Mathf.Lerp(CloserBL.y, CloserTL.y, MenuItems[i].ScreenPos.y),
                                                                  Mathf.Lerp(CloserBL.z, CloserBR.z, MenuItems[i].ScreenPos.x));
                MenuItems[i].ActualScrPos = Camera.main.WorldToScreenPoint(MenuItems[i].Obj.transform.position);
            }
            // Kurzor helye a kijelzőn és a világban
            Vector2 LookPosition = new Vector2(-1, -1), OldPosition = new Vector2(), OldP2Position = new Vector2();

            switch (PreviousController)
            {
            case Controllers.Mouse:
                OldPosition  = MousePosition;
                LookPosition = MousePosition = Input.mousePosition;
                if (Leap.SinglePointOnScreen().x != -1)     // Ha megmozdul a LeapMotion, váltson rá
                {
                    CurrentController = Controllers.LeapMotion;
                }
                break;

            case Controllers.LeapMotion:
                int HalfLeapSpaceHeight = (int)(Screen.height * (Leap.LeapUpperBounds.x - Leap.LeapLowerBounds.x) / Screen.width) / 2;
                Leap.LeapLowerBounds.y = 200 - HalfLeapSpaceHeight;
                Leap.LeapUpperBounds.y = 200 + HalfLeapSpaceHeight;
                int ExtendedFingers = Leap.ExtendedFingers();
                if (Leap.GetHandCount() != 0 && ExtendedFingers != 0)
                {
                    OldPosition  = LeapPosition;
                    LookPosition = LeapPosition = ExtendedFingers == 1 ? Leap.SinglePointOnScreen() : Leap.PalmOnScreen();
                }
                if (GameMode == GameModes.Multiplayer)
                {
                    OldP2Position = MousePosition;
                    MousePosition = Input.mousePosition;
                }
                else if (MousePosition.x != Input.mousePosition.x || MousePosition.y != Input.mousePosition.y)       // Ha megmozdul az egér, váltson rá
                {
                    CurrentController = Controllers.Mouse;
                }
                break;

            case Controllers.HoloLens:
                OldPosition = LookPosition = new Vector2(Screen.width / 2, Screen.height / 2);
                break;
            }
            if (PreviousController != CurrentController || (LookPosition.x == -1 && LookPosition.y == -1))
            {
                OldPosition = LookPosition;                     // Ha bármiféle eszközcsere/inputkiesés történt, ne vágjon semmit...
                Pointer.GetComponent <TrailRenderer>().Clear(); // ...és az előző vágási nyomvonal tűnjön el, mivel nem az folytatódik már
            }
            PreviousController = CurrentController;
            PointerHandler(ref Pointer, ref OldPosition, ref LookPosition, ref Score, ref LookPoint);
            if (GameMode == GameModes.Multiplayer)
            {
                PointerHandler(ref Player2, ref OldP2Position, ref MousePosition, ref ScoreP2, ref LookPointP2);
            }
        }
예제 #5
0
        /// <summary>
        /// Találatkor hívódik meg.
        /// </summary>
        /// <param name="Score">Elvágó játékos pontszáma</param>
        public void Hit(ref int Score)
        {
            if (GotHit || !Body)
            {
                return;
            }
            GotHit = true; // Ha ez nincs, rengetegszer meghívódna a függvény
            if (name.StartsWith("Menu"))
            {
                Game.SelectedMenuItem = Convert.ToInt32(name.Substring(4)); // A kiválasztott menüelem száma a névben van
            }
            if (Game.Playing)                                               // Csak játék közben módosítson statisztikákat, mert a Game Over menüvel nem tűnnek el -> nem bug, feature
            {
                Dispenser.ObjectDespawned();
                Game.SinceLastCombo = 0;
                Game.ThisCombo++;
                Game.LastHit = transform.position;
                if (Type == Types.Grenade)
                {
                    ((GameObject)Instantiate(Game.Instance.Explosion, transform.position, transform.rotation)).transform.localScale *= Game.Instance.Scale * .1f; // Nagyobb robbanás effekt
                    foreach (Rigidbody EachBody in FindObjectsOfType(typeof(Rigidbody)))                                                                          // Lökjön el mindent magától
                    {
                        if (EachBody != Body)
                        {
                            Destroy(EachBody.gameObject.GetComponent <Target>());
                            EachBody.gameObject.AddComponent <DespawnTime>();
                            Dispenser.ObjectDespawned();
                        }
                        EachBody.AddExplosionForce(Game.Instance.Scale * 50, transform.position, Game.Instance.Scale + Game.Instance.Scale);
                    }
                    Game.LoseLife = true;
                    if (Game.GameMode == GameModes.Multiplayer) // Többjátékos módban pontlevonás is jár a gránátért
                    {
                        Score -= 25;
                    }
                    Game.ThisCombo = 0;
                }
                else
                {
                    Score++;
                }
                // Ha power up vágódott el, aktiválódjon
                if (PowerUp != PowerUps.None)
                {
                    switch (PowerUp)
                    {
                    case PowerUps.DoubleScore: PwrDoubleScore.Activate(); break;

                    case PowerUps.Itemstorm: PwrItemstorm.Activate(); break;

                    case PowerUps.SlowMotion: PwrSlowMotion.Activate(transform.position); break;
                    }
                }
            }
            Vector3 ParentVelocity = Body.velocity;

            foreach (GameObject Shrapnel in Shrapnels)   // Essen szét darabokra
            {
                Shrapnel.transform.parent = null;
                Shrapnel.AddComponent <Despawner>();
                Rigidbody ChildBody = Shrapnel.AddComponent <Rigidbody>();
                ChildBody.AddForce(ParentVelocity);
                ChildBody.AddTorque(new Vector3(Random.value * 100, Random.value * 100, Random.value * 100));
                ChildBody.AddExplosionForce(Game.Instance.Scale * 6, transform.position, 10);
            }
            ((GameObject)Instantiate(Game.Instance.Explosion, transform.position, transform.rotation)).transform.localScale *= Game.Instance.Scale * .02f; // Robbanás effekt
            SingleShotAudio.Play(Game.Instance.SliceSounds[Random.Range(0, Game.Instance.SliceSounds.Length)], transform.position);                        // Vágás hangja
            Destroy(gameObject);
        }