Inheritance: MonoBehaviour
Beispiel #1
0
 private void Update()
 {
     if (projectileNumber <= 0)
     {
         if (!lose)
         {
             projectileNumber = 0;
             Time.timeScale   = 0;
             GameOverMenu.Open();
             lose = true;
         }
     }
 }
Beispiel #2
0
 protected override void Die()
 {
     if (isLocalPlayer)
     {
         if (!GameManager.Singleton.GameFinished)
         {
             GameOverMenu.Activate(RespawnTime);
         }
         m_playerController.enabled = false;
         m_aim.CanAim = false;
     }
     base.Die();
 }
Beispiel #3
0
        private void GameOverMenuCall()
        {
            Console.Clear();
            GameOverMenu gameOverMenu = new GameOverMenu(X, Y, Width, Height);

            gameOverMenu.TitleMenu.Label = $"Game over. Best score {player.GetPlayerScore}";

            gameOverMenu.OnMenuLeave += (sender, args) =>
            {
                OnMenuLeave?.Invoke(gameOverMenu, args);
            };

            gameOverMenu.Show();
        }
Beispiel #4
0
 protected override void Respawn(Vector2Int respawnPoint)
 {
     if (isLocalPlayer)
     {
         GameOverMenu.Deactivate();
         // Activate player controller if the escape menu is not activated
         if (!EscapeMenu.IsActive())
         {
             m_playerController.enabled = true;
         }
         m_aim.CanAim = true;
     }
     base.Respawn(respawnPoint);
 }
    IEnumerator WaitGameOver(GameObject GameOverScreen, GameOverMenu gameOverMenu)
    {
        AnalyticsEvent.GameOver();
        Coroutine req = StartCoroutine(GetRequest("https://tagbull-prod.appspot.com/activities/available"));

        yield return(new WaitForSeconds(0.5f));

        GameOverScreen.SetActive(true);
        yield return(new WaitForSeconds(1.5f));

        yield return(req);

        gameOverMenu.ShowButtons(tagbullActivitiesAvailable, gameState.showUnityAds);
    }
 public override void Draw(GameTime gameTime)
 {
     if (Game1.CurrentGameState == GameState.GameOver)
     {
         SpriteBatch spriteBatch = Game.Services.GetService(typeof(SpriteBatch)) as SpriteBatch;
         spriteBatch.Begin();
         spriteBatch.Draw(texture2D, position, texture2D.Bounds, Color.White,
                          0, new Vector2(texture2D.Bounds.Width / 2, texture2D.Bounds.Height / 2),
                          1, 0, 0);
         spriteBatch.End();
         GameOverMenu.Draw(spriteBatch);
     }
     base.Draw(gameTime);
 }
Beispiel #7
0
 public GameOverWorld(GameStateAgent agent) : base(agent)
 {
     MusicManager.Instance.PlayGameOverMusic();
     _screen             = new GameOverMenu(agent);
     _controllerKeyboard = new GameOverControllerKeyboard(agent, _screen);
     _updatables         = new IUpdatable[]
     {
         new QuitResetControllerKeyboard(agent), StateAgent.Player, this
     };
     _cameraDrawables = new IDrawable[]
     {
         StateAgent.Player
     };
 }
Beispiel #8
0
        private void InitializeGameObjects()
        {
            //
            // Arena
            //
            m_Arena        = new Arena("Arena", new SFML.System.Vector2f(Settings.Scale, Settings.Scale));
            m_Arena.Parent = this;
            //m_Arena.ArenaScale = new SFML.System.Vector2f(2f, 2f);

            //
            // PlayerController
            //
            m_PlayerController        = new PlayerController("PlayerController", m_Arena);
            m_PlayerController.Parent = this;

            //
            // GameMenu
            //
            m_GameMenu = new GameMenu("GameMenu", Application.Game.Window, m_PlayerController, m_Arena);
            m_GameMenu.SetLayer(9998);
            m_GameMenu.Parent = this;

            //
            // PauseMenu
            //
            m_PauseMenu = new PauseMenu("PauseMenu", Application.Game.Window, this);
            m_PauseMenu.SetLayer(9999);
            m_PauseMenu.Parent           = this;
            m_PauseMenu.IsVisible        = false;
            m_PauseMenu.IsUpdateDisabled = true;

            //
            // GameOverMenu
            //
            m_GameOverMenu = new GameOverMenu("GameOverMenu", Application.Game.Window, this);
            m_GameOverMenu.SetLayer(9999);
            m_GameOverMenu.Parent           = this;
            m_GameOverMenu.IsVisible        = false;
            m_GameOverMenu.IsUpdateDisabled = true;

            //
            // Add all gameobjects to the scene
            //
            AddGameObject(m_Arena);
            AddGameObject(m_PlayerController);
            AddGameObject(m_GameMenu);
            AddGameObject(m_PauseMenu);
            AddGameObject(m_GameOverMenu);
        }
    void OnDeath()
    {
        if (!gameCanEnd)
        {
            return;
        }

        Pause();

        GameOverMenu gameOver = Instantiate(gameOverMenuPrefab, canvas.transform);

        eventSystem.SetSelectedGameObject(gameOver.GetComponentInChildren <Button>().gameObject);

        gameOver.Lost();
    }
    public void OnWin()
    {
        Pause();

        if (!gameCanEnd)
        {
            Restart();
        }

        GameOverMenu gameOver = Instantiate(gameOverMenuPrefab, canvas.transform);

        eventSystem.SetSelectedGameObject(gameOver.GetComponentInChildren <Button>().gameObject);

        gameOver.Won();
    }
Beispiel #11
0
    private new void FixedUpdate()
    {
        if (!isLocalPlayer)
        {
            return;
        }
        base.FixedUpdate();

        Cursor.visible = GameOverMenu.IsActive() || EscapeMenu.IsActive();
        m_hud.UpdateHUD();
        if (GameManager.Singleton.GameFinished && GameOverMenu.IsActive())
        {
            GameOverMenu.Deactivate();
        }
    }
Beispiel #12
0
    IEnumerator GameOverRoutine()
    {
        if (gameOverFx)
        {
            gameOverFx.Play();
        }

        yield return(new WaitForSeconds(0.3f));

        // turn on the Game Over Panel
        //if (gameOverPanel)
        //{
        //	gameOverPanel.SetActive(true);
        //}
        GameOverMenu.Open();
    }
Beispiel #13
0
    // Use this for initialization
    void Start()
    {
        _mainMenu        = gameObject.FindComponentInChildren <MainMenu>(true);
        _optionsMenu     = gameObject.FindComponentInChildren <OptionsMenu>(true);
        _gameMenu        = gameObject.FindComponentInChildren <GameMenu>(true);
        _pauseMenu       = gameObject.FindComponentInChildren <PauseMenu>(true);
        _gameOverMenu    = gameObject.FindComponentInChildren <GameOverMenu>(true);
        _shareMenu       = gameObject.FindComponentInChildren <ShareMenu>(true);
        _levelSelectMenu = gameObject.FindComponentInChildren <LevelSelectMenu>(true);
        _aboutMenu       = gameObject.FindComponentInChildren <AboutMenu>(true);

        HideAllMenus();

        currentMenu = CrossSceneMenuInfo.use.nextMenuOnReload;

        ShowMenu(currentMenu);
    }
    // Use this for initialization
    void Start()
    {
        timerController = GetComponent <SurvivalModeTimerController>();
        soundController = GetComponent <SoundController>();

        centerItem       = GetComponentInChildren <CenterItem>();
        clickableObjects = GetComponentsInChildren <SurvivalModeClickableItem>();
        gameOverMenu     = GetComponentInChildren <GameOverMenu>();

        soundTrackController = GetComponentInChildren <SoundTrackController>();

        survivalScoreSavingController = GetComponent <SurvivalScoreSavingController>();

        //highscore = PlayerPrefs.GetInt("HighScore");

        soundTrackController.startSoundtrack();
    }
Beispiel #15
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        GameOverMenu myScript = (GameOverMenu)target;

        EditorGUILayout.ObjectField("Score Child", myScript.Score, typeof(Text), false);

        if (GUILayout.Button("Get Components & Prefabs"))
        {
            var scoreChieldField = serializedObject.FindProperty("scoreChild");
            var scoreChild       = myScript.gameObject.GetComponentInChildren <Text>();
            scoreChieldField.objectReferenceValue = scoreChild;
        }

        serializedObject.ApplyModifiedProperties();
    }
        public MenuReturnType RunGame()
        {
            Render();

            bool needToContinue     = true;
            int  CurrentPlayerIndex = 0;

            do
            {
                while (Console.KeyAvailable)
                {
                    ConsoleKeyInfo pressedChar = Console.ReadKey(true);
                    if (pressedChar.Key == ConsoleKey.Escape)
                    {
                        needToContinue = false;
                    }
                }
                Recalculate(CurrentPlayerIndex);
                CurrentPlayerIndex++;
                //System.Threading.Thread.Sleep(250);
            } while (needToContinue && CurrentPlayerIndex < Players.Count);

            StatusLabel.Label = "Game finished. Press any key to continue...";
            StatusLabel.Render();
            Console.ReadKey();
            Console.Clear();

            int MaxScoresValue = Players.Max(p => p.Scores);
            var Winners        = from p in Players
                                 where p.Scores == MaxScoresValue
                                 select new { Name = p.GetPlayerName(), Score = p.Scores };

            foreach (var item in Winners)
            {
                Winner = Winner + " " + item.Name + " with " + item.Score + " scores;";
            }

            GameOverMenu gameOverMenu = new GameOverMenu(App.ScreenX, App.ScreenY, App.ScreenWidth - 1, App.ScreenY - 1, Winner);
            //gameOverMenu.Render();
            MenuReturnType menu = gameOverMenu.SelectedMenu();

            //Console.ReadKey();

            return(menu);
        }
Beispiel #17
0
        void OnSceneLoaded(Scene scene, LoadSceneMode mode)
        {
            if (scene.buildIndex == Constants.SCENE_INDEX_GAME)
            {
                // Since the Game Manager is loaded on the main menu, and the awake is called only once, we look for the managers when we enter in the game scene, and generate the map
                if (!mapGenerator)
                {
                    mapGenerator = FindObjectOfType <MapGenerator>();
                }

                if (!gameOverUI)
                {
                    gameOverUI = FindObjectOfType <GameOverMenu>();
                }

                mapGenerator.GenerateMap();
            }
        }
 public GameMain()
 {
     graphics              = new GraphicsDeviceManager(this);
     room                  = new Room(800, 480, mediator);
     Mediator.Game         = this;
     Content.RootDirectory = "Content";
     mediator              = new Mediator(allObjects, itemsToBeAdded, itemsToBeDeleted, player, room, gameState);
     room.mediator         = mediator;
     room.initRandomLevel();
     itemsToBeAdded.Add(player);
     player.mediator = mediator;
     allObjects.Add(new HUD(800, 100, mediator));
     startMenu             = new StartMenu(800, 580, mediator, gameTime);
     gameOverMenu          = new GameOverMenu(800, 580, mediator, gameTime);
     mediator.gameOverMenu = gameOverMenu;
     graphics.PreferredBackBufferHeight = 580;
     graphics.ApplyChanges();
 }
        /// <summary>
        /// Alls menu controls
        /// </summary>
        /// <param name="menu"></param>
        /// <param name="op"></param>
        private void MainMenu_OnMenuLeave(Menu menu, MenuOperations op)
        {
            Console.Clear();
            Render();
            switch (op)
            {
            case MenuOperations.GotoMainMenu:
                mainMenu.Show();
                break;

            case MenuOperations.Play:
                gameController              = new GameController(X, Y, Width, Height);
                gameController.OnMenuLeave += MainMenu_OnMenuLeave;
                gameController.StartGame();
                break;

            case MenuOperations.Replay:
                Console.Clear();    //start game
                gameController.ResetGame();
                //TODO: start again game
                break;

            case MenuOperations.GotoGameOverMenu:
                if (gameOverMenu == null)
                {
                    gameOverMenu              = new GameOverMenu(X, Y, Width, Height);
                    gameOverMenu.OnMenuLeave += MainMenu_OnMenuLeave;
                }

                gameOverMenu.Show();
                break;

            case MenuOperations.Quit:
                Console.Clear();
                Environment.Exit(0);
                break;

            default:
                break;
            }
        }
    void Awake()
    {
        if (instance == null) {
            instance = this;
            DontDestroyOnLoad(gameObject);
        } else {
            Destroy(gameObject);
        }
        gameover = GetComponent<GameOverMenu>();
        fader = GetComponent<Fader>();
        gman = GetComponent<GUIManager>();
        pauseScreen = GetComponent<PauseScreen>();
        bgmm = GetComponent<BGMManager>();
        semm = GetComponent<SEManager>();
        GameObject storyController = GameObject.FindGameObjectWithTag(Tags.storyController);
        if (storyController != null) {
            storysemm = storyController.GetComponent<SEManager>();
        }

        paused = false;
    }
Beispiel #21
0
    void Start()
    {
        // activate weapon
        activatedWeaponIdx = 0;
        EnableActivatedWeapon();

        // init gates GameObjects
        GameObject gateParent = transform.Find("gate").gameObject;

        gateOpen   = gateParent.transform.Find("gate_open").gameObject;
        gateClosed = gateParent.transform.Find("gate_closed").gameObject;
        setGateOpen(false);

        //init UI elements
        healthbar = GameObject.Find(string.Format("HealthBar{0}", playerNumber)).GetComponent <HealthBar>();
        healthbar.SetHealth(this.healthPoints);
        manabar = GameObject.Find(string.Format("ManaBar{0}", playerNumber)).GetComponent <ManaBar>();
        manabar.SetMana(0);
        gameover = GameObject.Find("Canvas").GetComponent <GameOverMenu>();

        // spawn first soldiers
        numOfDeadSoldiers = 0;
        for (int i = 0; i < maxNumOfSoldiers; i++)
        {
            StartCoroutine(instantiateSoldierEnumerator((i + 1) * delayBeforeInstantiating));
        }

        // set manaAmount amount to 0
        manaAmount = 0;

        // get a shuffled holes transforms stack
        Transform[] holes = new Transform[holesParentTransform.childCount];
        for (int i = 0; i < holes.Length; i++)
        {
            holes[i] = holesParentTransform.GetChild(i);
        }
        Array.Sort(holes, (i_Transform, i_Transform1) => Random.Range(-2, 1));
        holesTransformsStack = new Stack <Transform>(holes);
    }
Beispiel #22
0
    public void SetGameOver(Player[] loser)
    {
        GameObject   instanted = gameOverFreezeMenu.EnableMenuWithPause(true);
        GameOverMenu menu      = instanted.GetComponent <GameOverMenu>();

        TimerController.Instance.StopAllCoroutines();

        if (loser.Length > 1)
        {
            Player morePointsPlayer = loser.Aggregate((x, y) => x.Points > y.Points ? x : y);
            if (morePointsPlayer == GetOtherPlayer(morePointsPlayer))
            {
                menu.WinInformation.text = "Draw! Both players had the same number of points.";
                return;
            }
            menu.WinInformation.text = $"Draw! The more points had <b>{morePointsPlayer.Nickname}</b> player.";
            return;
        }
        // Team team = GetOtherPlayer(loser[0]).CurrentTeam;
        // string k = team == Team.Black ? "#1F1F1F" : "#C2C2C2";
        menu.WinInformation.text = $"<b>{GetOtherPlayer(loser[0]).Nickname}</b> as {GetOtherPlayer(loser[0]).CurrentTeam} team wins!";
    }
Beispiel #23
0
    // Called when player is dead
    public void GameOver()
    {
        int hiscore = PlayerPrefs.GetInt("hiscore", 0);

        if (score > hiscore)
        {
            // Save the new hiscore
            PlayerPrefs.SetInt("hiscore", score);
            newHiscoreText.enabled      = true;
            gameOverHiscoreText.enabled = false;
            StartCoroutine(updateHiscore(score));
        }
        else if (hiscore == 0)
        {
            newHiscoreText.enabled      = false;
            gameOverHiscoreText.enabled = false;
        }
        else
        {
            newHiscoreText.enabled      = false;
            gameOverHiscoreText.enabled = true;
            gameOverHiscoreText.text    = "HIGH SCORE: " + hiscore;
        }
        gameOverScoreText.text = "SCORE: " + score;

        // Destroy player
        player.KillPlayer();

        // Stop background music and play "game over" audio
        audioController.GameOver();

        // Switch UI
        HUD.SetActive(false);
        GameOverMenu.SetActive(true);

        isGamePaused = true;
    }
Beispiel #24
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            SpriteBatch = new SpriteBatch(GraphicsDevice);
            Player      = new Player(new Vector2(EntityWidth * (float)PlayerStartColumn, EntityHeight * (float)(PlayerStartRow + 1)));
            m_DebugText = Content.Load <SpriteFont>("Fonts/Joystix_12");
            MapManager.LoadMaps(); //Maps must be loaded before levels - H.E.
            LevelManager.LoadLevels();
            MainMenu.LoadContent();
            LevelTransition.LoadContent();
            HUD.LoadContent();
            GameOverMenu.LoadContent();
            GameWinMenu.LoadContent();
            LevelTransition.LoadContent();
            Leaderboard.LoadContent();
            GetLeaderBoardResultsAsync();
            m_DebugPixel = new Texture2D(GraphicsDevice, 1, 1, false, SurfaceFormat.Color);
            m_DebugPixel.SetData(new[] { Color.White });

            ScanLines = Content.Load <Texture2D>("UI/ScanLines");
            Border    = Content.Load <Texture2D>("UI/Border");

            MenuMusic = Content.Load <SoundEffect>("Sounds/Menu");
            GameMusic = Content.Load <SoundEffect>("Sounds/Main"); //Sounds/Last_slice_hiphop
        }
Beispiel #25
0
        private void OnStateChange()
        {
            if (CurrentMusicInstance != null)
            {
                if (!(NextGameState == GameState.Menu && GameState == GameState.Menu))
                {
                    CurrentMusicInstance.Stop();
                }
                else if (CurrentMusicInstance.State == SoundState.Paused)
                {
                    CurrentMusicInstance.Play();
                }
            }

            if (NextGameState == GameState.GameOver) //Answer me Snake...Snake?! SNAKEEEEEEE!!!"
            {
                if (GameOverMenu.GameOverReason == GameOverReason.Win)
                {
                    CurrentScreen = GameWinMenu;
                    GameWinMenu.LastPlayerScore = Player.Score;
                }
                else
                {
                    CurrentScreen = GameOverMenu;
                    GameOverMenu.Awake();
                }

                GameState = GameState.Menu;
                Player.OnGameOver();
                LevelManager.OnGameOver();
                NextGameState = GameState.None;

                CurrentMusicInstance          = MenuMusic.CreateInstance();
                CurrentMusicInstance.IsLooped = true;
                CurrentMusicInstance.Play();
            }
            else
            {
                if (NextGameState == GameState.Menu)
                {
                    switch (NextUIType)
                    {
                    case UIType.MainMenu:
                    {
                        CurrentScreen = MainMenu;
                        break;
                    }

                    case UIType.LevelTransition:
                    {
                        LevelTransition.ResetState();
                        CurrentScreen = LevelTransition;
                        break;
                    }

                    case UIType.GameOver:
                    {
                        CurrentScreen = GameOverMenu;
                        break;
                    }

                    case UIType.Leaderboard:
                    {
                        CurrentScreen = Leaderboard;
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }
                }
                else if (NextGameState == GameState.Game)
                {
                    LevelManager.NextLevel();
                }
                else if (NextGameState == GameState.NewGame)
                {
                    NewGame();
                }

                if (NextGameState == GameState.Game)
                {
                    CurrentMusicInstance          = GameMusic.CreateInstance();
                    CurrentMusicInstance.IsLooped = true;
                }
                else if (CurrentMusicInstance == null || (GameState == GameState.Menu && CurrentScreen != LevelTransition && !(NextGameState == GameState.Menu && GameState == GameState.Menu)))
                {
                    CurrentMusicInstance          = MenuMusic.CreateInstance();
                    CurrentMusicInstance.IsLooped = true;
                    CurrentMusicInstance.Play();
                }

                GameState = NextGameState;
            }

            NextGameState = GameState.None;
            NextUIType    = UIType.None;
        }
Beispiel #26
0
 // Start is called before the first frame update
 private void Start()
 {
     m_gameOverMenu = GameObject.FindObjectOfType <GameOverMenu>();
 }
 public override void Update(GameTime gameTime)
 {
     GameOverMenu.Update();
     base.Update(gameTime);
 }
 protected override void LoadContent()
 {
     texture2D = Game.Content.Load <Texture2D>("GameOver/GameOver");
     GameOverMenu.LoadContent(Game.Content);
     base.LoadContent();
 }
Beispiel #29
0
 void Awake()
 {
     instance  = this;
     colliders = GetComponentsInChildren <Collider> ();
 }
 // Use this for initialization
 void Start()
 {
     pauseMenu = GetComponent <PauseMenu>();
     goMenu    = GameObject.Find("GameOverCanvas").GetComponent <GameOverMenu>();
     resumeSet = false;
 }
Beispiel #31
0
    //--------------------------------------- END CHANGE LEVEL ---------------------------------------
    public void setManager()
    {
        if ((level == 0 || level == 1) && gameObject) {
            DestroyImmediate(gameObject);
        }
        canChangeLevel = true;
        jellyFish = GameObject.FindWithTag ("Player");
        rScore = (GameObject.FindGameObjectWithTag ("RedScore")).GetComponent<RedScore> ()as RedScore;
        bScore = (GameObject.FindGameObjectWithTag ("BlueScore")).GetComponent<BlueScore> ()as BlueScore;
        yScore = (GameObject.FindGameObjectWithTag ("YellowScore")).GetComponent<YellowScore> ()as YellowScore;
        lightVisible = jellyFish.GetComponentsInChildren<Light> (false) as Light[];
        lightRange = lightVisible[0].range;

        jellyfishLight = jellyFish.GetComponentInChildren<lightPulse> () as lightPulse;
        jellyfishColorManager = jellyFish.GetComponent<ColorManager> () as ColorManager;
        jellyfishLight.updateJellyfishLightColor (currentLightColor);
        jellyfishColorManager.updateColorJellyfish (currentColor);
        mainCamera = Camera.main;
        lightImpulse = false;
        barrier = false;
        flash = false;
        lightImpulseCamera = false;
        oldSizeCamera = mainCamera.orthographicSize;
        anImpulse = (GameObject.FindGameObjectWithTag ("impulse")).GetComponent<Animator> () as Animator;
        anWarning = (GameObject.FindGameObjectWithTag ("warning")).GetComponent<Animator>() as Animator;
        anBarrier = (GameObject.FindGameObjectWithTag ("barrier")).GetComponent<Animator> () as Animator;
        anFlash = (GameObject.FindGameObjectWithTag ("flash")).GetComponent<Animator> () as Animator;
        anRedTimer = (GameObject.FindGameObjectWithTag ("redTimer")).GetComponent<Animator> () as Animator;
        anBlueTimer = (GameObject.FindGameObjectWithTag ("blueTimer")).GetComponent<Animator> () as Animator;
        anYellowTimer = (GameObject.FindGameObjectWithTag ("yellowTimer")).GetComponent<Animator> () as Animator;
        anLoading = (GameObject.Find ("Loading")).GetComponent<Animator>() as Animator;
        barrierCollider = (GameObject.FindGameObjectWithTag ("barrier")).GetComponent<CircleCollider2D> () as CircleCollider2D;

        tutorialText = GameObject.Find ("TutorialText").GetComponent<Text> () as Text;
        anTutorial = GameObject.Find ("TutorialText").GetComponent<Animator> () as Animator;

        gameOver = (GameObject.Find ("Controller")).GetComponent<GameOverMenu> () as GameOverMenu;

        barrierAudio = GameObject.FindGameObjectWithTag ("barrier").GetComponent<AudioSource> () as AudioSource;
        impulseAudio = GameObject.FindGameObjectWithTag ("impulse").GetComponent<AudioSource> () as AudioSource;
        flashAudio = GameObject.FindGameObjectWithTag ("flash").GetComponent<AudioSource> () as AudioSource;

        if (unlockBarrier) {
            anBlueTimer.SetTrigger("barrierUnlocked");
        }
        if (unlockFlash) {
            anYellowTimer.SetTrigger("flashUnlocked");
        }
        if (unlockImpulse) {
            anRedTimer.SetTrigger("impulseUnlocked");
        }

        tryBlue = 0;
        tryRed = 0;
        tryYellow = 0;
        if (level != 1)
            anLoading.SetTrigger ("stopLoading");

        if (level == 2) {
            StartCoroutine(initTutorial());
        }
    }
        //Revision: 3636
        //Author: zproxy
        //Date: 22. aprill 2012. a. 11:16:53
        //Message:

        //----
        //Added : /examples/java/OutRun4KTemplate
        //Added : /examples/java/OutRun4KTemplate/OutRun4KTemplate




        // http://www.digitalinsane.com/archives/2007/01/21/space_invaders/
        public SpaceInvaders()
        {

            ImageResources gfx = "http://server/";

            var overlay = new Overlay();

            overlay.BackgroundColor = Color.Black;
            overlay.MaximumOpacity = 1;
            overlay.ControlInBack.style.zIndex = 100000;
            overlay.ControlInFront.style.zIndex = 100001;


            var view = overlay.ControlInFront;

            view.style.textAlign = IStyle.TextAlignEnum.center;
            view.style.SetSize(480, 480);
            view.style.backgroundColor = Color.Green;
            view.style.color = Color.White;
            view.style.fontFamily = IStyle.FontFamilyEnum.Fixedsys;




            //Native.Document.body.appendChild(
            //    new IHTMLElement(IHTMLElement.HTMLElementEnum.center,
            //    view)
            //    );



            //Native.Document.body.style.backgroundColor = Color.Black;
            // Native.Document.body.style.overflow = IStyle.OverflowEnum.hidden;

            System.Func<IHTMLDiv> CreateCanvas =
                delegate
                {
                    var c = new IHTMLDiv();

                    c.style.overflow = IStyle.OverflowEnum.hidden;
                    c.style.SetLocation(1, 1, 478, 478);

                    return c;
                };

            view.style.position = IStyle.PositionEnum.relative;

            var canvas = CreateCanvas();
            var menu = CreateCanvas();

            canvas.style.backgroundColor = Color.Black;


            view.appendChild(canvas, menu);

            var msg_loading = new IHTMLDiv("loading...");

            msg_loading.style.color = Color.Green;

            menu.appendChild(msg_loading);

            // at this point we want our images

            overlay.Visible = true;

            ScriptCoreLib.JavaScript.Runtime.Timer.DoAsync(overlay.UpdateLocation);

            // now wait while all images are loaded/complete

            ((fbool)(() => !gfx.IsComplete)).Trigger(
            delegate
            {
                // loading images is done now.



                // build the scoreboard
                var MyEnemyDirectory = new EnemyDirectory(gfx);

                var board = new ScoreBoard(gfx);

                board.Control.style.SetLocation(8, 8, 464, 64);

                canvas.appendChild(board.Control);

                board.Lives = 2;
                board.Score = 450;

                // now we can see lives and score.
                // ie does not issue keypress for control keys.
                // scriptcorelib should filter firefox events...

                // lets show main menu

                var mmenu = new MainMenu(MyEnemyDirectory, gfx);
                var gameovermenu = new GameOverMenu();

                menu.appendChild(mmenu.Control, gameovermenu.Control);

                gameovermenu.Visible = false;
                gameovermenu.Control.style.SetLocation(0, 100, 468, 468 - 100);

                mmenu.Control.style.SetLocation(0, 64, 468, 468 - 64);
                mmenu.Visible = true;

                var Enemy_Ammo = new AmmoInfo
                                 {
                                     Color = Color.White,
                                     Speed = 8
                                 };

                var Player = (IHTMLImage)gfx.biggun.Clone();
                var Player_Ammo = new AmmoInfo
                                  {
                                      Color = Color.Green,
                                      Speed = -8
                                  };

                var Map_Top = 64;
                var Map_Left = 20;
                var Map_Right = 450;
                var Map_Bottom = 470;

                var Map_Rect = new Rectangle();

                Map_Rect.Top = Map_Top;
                Map_Rect.Left = Map_Left;
                Map_Rect.Right = Map_Right;
                Map_Rect.Bottom = Map_Bottom;

                var Player_Y = 460;
                var Player_X = 200;

                var Player_X_step = 8;

                Action<int> UpdatePlayer =
                    delegate(int v)
                    {
                        Player_X += v;

                        if (Player_X < Map_Left)
                            Player_X = Map_Left;

                        if (Player_X > Map_Right)
                            Player_X = Map_Right;


                        Player.SetCenteredLocation(Player_X, Player_Y);
                        Player.style.position = IStyle.PositionEnum.absolute;
                    };

                Player.Hide();

                canvas.appendChild(Player, Player_Ammo.Control, Enemy_Ammo.Control);

                AmmoInfo[] KnownAmmo = new[] { Player_Ammo, Enemy_Ammo };

                var KnownConcrete = new List<Concrete>();
                var ConcreteTop = 432;

                KnownConcrete.AddRange(Concrete.BuildAt(new Point(62 + 120 * 0, ConcreteTop)));
                KnownConcrete.AddRange(Concrete.BuildAt(new Point(62 + 120 * 1, ConcreteTop)));
                KnownConcrete.AddRange(Concrete.BuildAt(new Point(62 + 120 * 2, ConcreteTop)));
                KnownConcrete.AddRange(Concrete.BuildAt(new Point(62 + 120 * 3, ConcreteTop)));

                foreach (Concrete v in KnownConcrete.ToArray())
                {
                    canvas.appendChild(v.Control);
                }


                var UFO = new EnemyUnit(MyEnemyDirectory.UFO);
                var UFO_Direction = 1;

                UFO.Visible = false;

                canvas.appendChild(UFO.Control);


                var EnemyTop = 128;
                var EnemySpacing = 32;
                var EnemyCount = 9;

                var KnownEnemies = new List<EnemyUnit>();

                KnownEnemies.AddRange(EnemyUnit.Build(MyEnemyDirectory.A, 20, EnemyTop + 0 * EnemySpacing, EnemyCount, EnemySpacing));
                KnownEnemies.AddRange(EnemyUnit.Build(MyEnemyDirectory.B, 20, EnemyTop + 1 * EnemySpacing, EnemyCount, EnemySpacing));
                KnownEnemies.AddRange(EnemyUnit.Build(MyEnemyDirectory.B, 20, EnemyTop + 2 * EnemySpacing, EnemyCount, EnemySpacing));
                KnownEnemies.AddRange(EnemyUnit.Build(MyEnemyDirectory.C, 20, EnemyTop + 3 * EnemySpacing, EnemyCount, EnemySpacing));
                KnownEnemies.AddRange(EnemyUnit.Build(MyEnemyDirectory.C, 20, EnemyTop + 4 * EnemySpacing, EnemyCount, EnemySpacing));

                foreach (EnemyUnit v in KnownEnemies.ToArray())
                {
                    canvas.appendChild(v.Control);
                }

                var HitDamage = 40;

                var GameTimer = new ScriptCoreLib.JavaScript.Runtime.Timer();

                int GangDirection = 1;

                Action<string> EndGame =
                    delegate
                    {
                        gameovermenu.Visible = true;

                        GameTimer.Stop();
                    };

                #region DoAmmoDamage
                Func<AmmoInfo, bool> DoAmmoDamage =
                    delegate(AmmoInfo a)
                    {
                        bool hit = false;

                        #region did we hit ufo?
                        if (UFO.Visible)
                        {
                            if (UFO.Bounds.Contains(a.Location))
                            {
                                board.Score += UFO.Info.Points;

                                UFO.Visible = false;

                                hit = true;
                            }
                        }
                        #endregion

                        #region did we hit player
                        if (Player.Bounds.Contains(a.Location))
                        {
                            board.Lives--;

                            hit = true;

                            if (board.Lives < 1)
                            {
                                EndGame("Ship destroied");

                            }
                        }
                        #endregion


                        foreach (Concrete v in KnownConcrete.ToArray())
                        {
                            if (v.Visible)
                            {
                                if (v.Bounds.Contains(a.Location))
                                {
                                    v.Health -= HitDamage;

                                    if (v.Health > 0)
                                    {
                                        hit = true;
                                    }
                                    else
                                    {
                                        v.Visible = false;
                                    }
                                }
                            }
                        }

                        foreach (EnemyUnit v in KnownEnemies.ToArray())
                        {
                            if (v.Visible)
                            {
                                if (v.Bounds.Contains(a.Location))
                                {
                                    v.Visible = false;

                                    hit = true;
                                    new SpaceInvadersTemplate.HTML.Audio.FromAssets.invaderexplode().play();

                                    board.Score += v.Info.Points;
                                }
                            }
                        }



                        return hit;
                    };
                #endregion


                var MyRandom = new System.Random();

                var mothershiploop = new SpaceInvadersTemplate.HTML.Audio.FromAssets.mothershiploopx
                {

                    loop = true
                };


                var duh = new IHTMLAudio[] { 
                    new SpaceInvadersTemplate.HTML.Audio.FromAssets.duh0(),
                    new SpaceInvadersTemplate.HTML.Audio.FromAssets.duh1(),
                    new SpaceInvadersTemplate.HTML.Audio.FromAssets.duh2(),
                    new SpaceInvadersTemplate.HTML.Audio.FromAssets.duh3(),
                };

                var duh_cycle = duh.ToCyclicAction(a => a.play());


                #region EnemyAction
                Action EnemyAction =
                    delegate
                    {
                        #region create ufo

                        if (!UFO.Visible)
                        {
                            if (MyRandom.NextDouble() < 0.1)
                            {
                                Console.WriteLine("UFO!");
                                mothershiploop.play();

                                if (MyRandom.NextDouble() > 0.5)
                                {
                                    UFO_Direction = 1;
                                    UFO.MoveTo(0, EnemyTop - UFO.Control.height * 2);
                                }
                                else
                                {
                                    UFO_Direction = -1;
                                    UFO.MoveTo(478, EnemyTop - UFO.Control.height * 2);
                                }

                                UFO.Visible = true;
                            }
                        }
                        #endregion

                        var ev = Enumerable.Where(KnownEnemies.ToArray(), i => i.Visible);

                        if (!Enemy_Ammo.Visible)
                        {
                            var ei = (int)System.Math.Round(MyRandom.NextDouble() * Enumerable.Count(ev));

                            EnemyUnit et = Enumerable.ElementAt(ev, ei);

                            if (et == null)
                                System.Console.WriteLine("element at " + ei + " not found");
                            else
                            {
                                int ey = Enumerable.Max(
                                    from i in ev where i.X == et.X select i.Y
                                    //    Enumerable.Select(Enumerable.Where(ev, i => i.X == et.X), i => i.Y)
                                );

                                Enemy_Ammo.MoveTo(et.X, ey + 20);
                                Enemy_Ammo.Visible = true;
                            }
                        }


                        #region MoveAll
                        Action<Point> MoveAll =
                            delegate(Point to)
                            {
                                var ConcreteReached = false;

                                foreach (EnemyUnit v in ev)
                                {
                                    var vy = v.Y + to.Y;

                                    if (vy > ConcreteTop)
                                    {
                                        ConcreteReached = true;
                                    }

                                    v.MoveTo(v.X + to.X, vy);
                                }

                                if (ConcreteReached)
                                {
                                    EndGame("The walls have been breached.");
                                }
                            };
                        #endregion

                        Action MoveAllDown =
                            delegate
                            {
                                MoveAll(new Point(0, 8));
                            };

                        duh_cycle();

                        #region move the gang
                        if (GangDirection > 0)
                        {
                            int ex_max = Enumerable.Max(Enumerable.Select(ev, i => i.X));

                            // gang goes right

                            if (ex_max >= Map_Rect.Right)
                            {
                                GangDirection = -1;
                                MoveAllDown();
                            }
                            else
                            {
                                MoveAll(new Point(4, 0));
                            }
                        }
                        else
                        {
                            int ex_min = Enumerable.Min(Enumerable.Select(ev, i => i.X));

                            // gang goes left

                            if (ex_min <= Map_Rect.Left)
                            {
                                GangDirection = 1;
                                MoveAllDown();
                            }
                            else
                            {
                                MoveAll(new Point(-4, 0));
                            }
                        }
                        #endregion

                    };
                #endregion

                bool GamePaused = false;




                GameTimer.Tick +=
                    delegate
                    {

                        #region only blink while paused
                        if (GamePaused)
                        {
                            if (GameTimer.Counter % 15 == 0)
                            {
                                Player.ToggleVisible();
                            }

                            return;
                        }
                        #endregion



                        Player.Show();

                        #region move ufo

                        if (UFO.Visible)
                        {
                            if (UFO_Direction > 0)
                            {
                                UFO.MoveTo(UFO.X + 4, UFO.Y);

                                if (UFO.X > 478 + UFO.Control.width)
                                {
                                    UFO.Visible = false;
                                    mothershiploop.pause();
                                }
                            }
                            else
                            {
                                UFO.MoveTo(UFO.X - 4, UFO.Y);

                                if (UFO.X < -UFO.Control.width)
                                {
                                    UFO.Visible = false;
                                    mothershiploop.pause();
                                }
                            }
                        }
                        #endregion


                        #region do ammo stuff
                        foreach (AmmoInfo v in KnownAmmo)
                        {
                            if (v.Visible)
                            {
                                var y = v.Y + v.Speed;

                                if (Map_Rect.Contains(new Point(v.X, y)))
                                {
                                    // did we hit?
                                    if (DoAmmoDamage(v))
                                    {

                                        v.Visible = false;
                                    }
                                    else
                                    {
                                        v.MoveTo(v.X, y);
                                    }
                                }
                                else
                                {
                                    v.Visible = false;
                                }
                            }
                        }
                        #endregion



                        var AliveEnemies = Enumerable.Where(KnownEnemies.ToArray(), i => i.Visible);
                        var AliveCount = Enumerable.Count(AliveEnemies);

                        if (AliveCount == 0)
                        {
                            EndGame("Aliens destoried");

                            return;
                        }

                        if (GameTimer.Counter % (AliveCount / 2) == 0)
                        {
                            EnemyAction();
                        }

                    };


                #region ResetGame
                Action ResetGame =
                    delegate
                    {
                        mmenu.Visible = false;

                        Player_X = 220;
                        board.Score = 0;
                        board.Lives = 3;

                        Player.Show();

                        foreach (Concrete v in KnownConcrete.ToArray())
                        {
                            v.Health = 255;
                            v.Visible = true;
                        }


                        foreach (EnemyUnit v in KnownEnemies.ToArray())
                        {
                            v.ResetPosition();
                            v.Visible = true;
                        }

                        EnemyAction();

                        GameTimer.StartInterval(50);

                        UpdatePlayer(0);
                    };
                #endregion

                Action EgoShoot =
                    delegate
                    {
                        if (!Player_Ammo.Visible)
                        {
                            Player_Ammo.MoveTo(Player_X, Player_Y - 20);

                            new SpaceInvadersTemplate.HTML.Audio.FromAssets.firemissile().play();

                            Player_Ammo.Visible = true;

                        }
                    };

                overlay.ControlInBack.onclick +=
                    delegate
                    {
                        if (mmenu.Visible)
                            ResetGame();
                        else
                            EgoShoot();
                    };


                double gamma = 0;

                //Native.window.ondeviceorientation +=
                //    eventData =>
                //    {
                //        if (eventData.gamma < -50)
                //            gamma = eventData.beta;
                //        else
                //            gamma = eventData.gamma;


                //    };

                new ScriptCoreLib.JavaScript.Runtime.Timer(
                    t =>
                    {
                        // gamma is the left-to-right tilt in degrees, where right is positive
                        if (gamma < -15)
                        {
                            if (mmenu.Visible)
                                ResetGame();
                            else
                                UpdatePlayer(-Player_X_step);
                        }

                        if (gamma > 15)
                        {
                            if (mmenu.Visible)
                                ResetGame();
                            else
                                UpdatePlayer(Player_X_step);
                        }
                    }
                ).StartInterval(100);

                Native.Document.onkeydown += delegate(IEvent ev)
                {
                    Console.WriteLine(new { ev.KeyCode }.ToString());

                    if (mmenu.Visible)
                    {
                        if (ev.IsReturn)
                        {

                            ResetGame();

                        }

                        return;
                    }
                    else
                    {
                        if (ev.IsEscape)
                        {
                            GameTimer.Stop();

                            Player.Hide();

                            mmenu.Visible = true;

                            foreach (AmmoInfo v in KnownAmmo)
                            {
                                v.Visible = false;
                            }

                            foreach (Concrete v in KnownConcrete.ToArray())
                            {
                                v.Visible = false;
                            }

                            foreach (EnemyUnit v in KnownEnemies.ToArray())
                            {
                                v.Visible = false;
                            }

                            UFO.Visible = false;

                            gameovermenu.Visible = false;

                            // the animated gifs would stop after escape key
                            ev.preventDefault();

                            GamePaused = false;
                        }
                    }

                    int key_p = 80;


                    if (ev.KeyCode == key_p)
                    {
                        GamePaused = !GamePaused;
                    }

                    // player shouldn't really move while game is paused
                    // its cheating:)
                    if (GamePaused)
                        return;

                    int key_right = 39;
                    int key_left = 37;

                    if (ev.KeyCode == key_left)
                    {
                        UpdatePlayer(-Player_X_step);
                    }
                    else if (ev.KeyCode == key_right)
                    {
                        UpdatePlayer(Player_X_step);
                    }
                    else if (ev.IsSpaceOrEnterKey())
                    {
                        // the animated gifs would stop after escape key
                        ev.preventDefault();

                        EgoShoot();
                    }
                    else
                    {
                        Console.WriteLine(new { UnknownKeyCode = ev.KeyCode }.ToString());
                    }
                };

                msg_loading.Orphanize();
            }
            , 50);


        }
 private void Awake()
 {
     instance = this;
 }
 void Awake()
 {
     instance = this;
 }