Ejemplo n.º 1
0
        public void Run()
        {
            // Initializing the tilemap facade
            tileMapFacade = new TileMapFacade((int)VideoResolution[0], (int)VideoResolution[1], Properties.Resources.spritesheet2);
            BindKeys();

            _boardBuilder = new BoardBuilder();
            ConfigureHubConnections();

            // Wall box
            _boxWall = SpriteLoader.LoadSprite(Properties.Resources.DesolatedHut, new IntRect(0, 0, 100, 100));

            _boxWall.Position = new Vector2f(250, 250);
            _boxWall.Scale    = new Vector2f(0.5f, 0.5f);

            // UI score object
            _renderWindow = CreateRenderWindow(Styles.Default);
            _renderWindow.SetFramerateLimit(60);
            _renderWindow.SetActive();
            scoreBoard = new GameScore(_renderWindow, otherPlayers, mainPlayer.connectionId);

            _debugGui = new DebugGUI(_renderWindow);
            execRTCounter(); // sync with server

            // Player postion from left, top (x, y)
            var coordText = new Text("", new Font(Properties.Resources.arial));

            coordText.CharacterSize = 20;
            coordText.Position      = new Vector2f(10, 10);

            // BombKey [SPACE] event handler
            _renderWindow.KeyPressed += new EventHandler <KeyEventArgs>(OnKeyPressed);

            // damage - placeDelay - bombTimer
            mainPlayer.Bomb = new Bomb(20, 2500, 0);

            // Chain object init


            // connecting chains
            chainLogger.setNextLogger(chainLogger2);
            chainLogger2.setNextLogger(chainLogger3);


            float RespawnPause = 0f;

            while (_renderWindow.IsOpen)
            {
                Time deltaTime = FrameClock.Restart();

                // Requesting refresh data from server at every new frame
                _userHubConnection.InvokeAsync("RefreshPlayer", new PlayerDTO()
                {
                    connectionId = mainPlayer.connectionId, position = mainPlayer.GetPointPosition(), IsDead = mainPlayer.IsDead
                }).Wait();

                _renderWindow.DispatchEvents(); // event handler to processes keystrokes/mouse movements
                _renderWindow.Clear();

                // TILES
                _renderWindow.Draw(tileMapFacade.GetTileMap());

                if (!ghostDead)
                {
                    foreach (var enemy in _boardBuilder._enemies)
                    {
                        var sprite = enemy.getSprite();
                        _renderWindow.Draw(sprite);
                    }
                }

                foreach (Player p in otherPlayers)
                {
                    if (!p.IsDead)
                    {
                        _renderWindow.Draw(p);
                    }
                }

                if (!mainPlayer.IsDead)
                {
                    _renderWindow.Draw(mainPlayer);

                    //DEBUG - RED FRAME
                    _renderWindow.Draw(mainPlayer.DrawFrame());
                }

                // Update drawable destructor timers
                UpdateLoop(deltaTime);

                // BOMBS
                mainPlayer.Update();    // Update projectile placement positions (bombs)
                DrawLoop();             // Draw projectile buffer list


                // RESPAWN ROUTINE

                /*if(RespawnPause > 0)
                 *  RespawnPause -= deltaTime.AsSeconds();*/

                /*if (mainPlayer.CheckDeathCollisions() && RespawnPause <= 0f) // if collided with flames?
                 * {
                 *  RespawnPause = 2f;
                 *  scoreBoard.UpdateScore("P1");
                 * }*/

                // Print player coordinates left, top (x, y)
                coordText.DisplayedString = $"x {mainPlayer.Position.X} y {mainPlayer.Position.Y}";
                _renderWindow.Draw(coordText);
                _renderWindow.Draw(scoreBoard);
                _renderWindow.Draw(_debugGui);

                if (_renderWindow.HasFocus()) // if window is focused
                {
                    InputControl();
                }

                _renderWindow.Display(); // update screen
            }
        }
Ejemplo n.º 2
0
        // ========================================================================
        // =========================== MAIN ENTRY POINT ===========================
        // ========================================================================

        public void Run()
        {
            // set up loggers using chain of responsibility pattern
            Console.ForegroundColor = ConsoleColor.White;
            defaultLogger.SetNext(importantLogger);
            importantLogger.SetNext(fileLogger);
            fileLogger.SetNext(criticalLogger);
            criticalLogger.SetNext(null);
            defaultLogger.LogMessage(60, "Loggers setup!");

            // Create render window
            GameWindow = CreateRenderWindow(Styles.Close);
            Vector2f winSize = GameWindow.GetView().Size;

            // Load resources
            CreateSprites();

            GameState.InitRandom(5);
            builder = new MapBuilder();
            builder.LoadSprites();
            director = new Director(builder);
            director.Construct();
            GameState.TileMap = builder.GetResult();

            // Portal creation
            PortalProspect portal = new PortalProspect();
            Caretaker      m1     = new Caretaker();
            Caretaker      m2     = new Caretaker();

            portal.Pos = new Vector2f(3 * 64f, 45 * 64f);
            portal.Tex = TextureHolder.GetInstance().Get(TextureIdentifier.Portal);
            m1.Memento = portal.CreateMemento();
            portal.Pos = new Vector2f(60 * 64f, 3 * 64f);
            portal.Tex = TextureHolder.GetInstance().Get(TextureIdentifier.PortalRed);
            m2.Memento = portal.CreateMemento();

            GameState.NonCollidableRep.GetIterator().Add(portal);

            // Generate additional objects (destructibles, indestructibles, pickupables)
            SpawningManager(20, 15, 60, 20);

            // View
            MainView   = GameWindow.DefaultView;
            ZoomedView = new View(MainView);
            GameWindow.SetView(ZoomedView);


            // weapon prototype
            weaponProtoype = new Pistol(mediator);


            // Player init
            CreateMainPlayer();

            mediator.GetPlayerText(MainPlayer.PlayerBar);

            ConnectionManager connectionManager = new ConnectionManager("http://underpoweredserver.tplinkdns.com:51230/sd-server");

            GameState.ConnectionManagerProxy = new Managers.Proxy.ConnectionManagerProxy(connectionManager);

            bool isPlayerSpawned = ForceSpawnObject(MainPlayer);

            if (isPlayerSpawned)
            {
                GameState.PlayerRep.GetIterator().Add(MainPlayer);
                GameState.PlayerRep.GetIterator().Add(SpawnFakePlayer(4000, 2000));
                GameState.PlayerRep.GetIterator().Add(SpawnFakePlayer(4000, 2200));
                GameState.PlayerRep.GetIterator().Add(SpawnFakePlayer(4000, 2400));
            }

            PlayerEventManager.Subscribe(PlayerEventType.KilledPlayer, GameplayUI.KillNotifier);
            PlayerEventManager.Subscribe(PlayerEventType.KilledPlayer, GameplayUI.Scoreboard);

            var mPos = GameWindow.MapPixelToCoords(Mouse.GetPosition(GameWindow));



            while (GameWindow.IsOpen)
            {
                GameWindow.Clear();
                GameWindow.DispatchEvents();
                if (this.HasFocus)
                {
                    this.ProccesKeyboardInput();
                    mPos = GameWindow.MapPixelToCoords(Mouse.GetPosition(GameWindow));
                }

                Time deltaTime = FrameClock.Restart();
                if (GameState.ConnectionManagerProxy.ActivityClock.ElapsedTime.AsSeconds() > (1f / multiplayerSendRate) &&
                    GameState.ConnectionManagerProxy.IsConnected())
                {
                    GameState.ConnectionManagerProxy.ActivityClock.Restart();
                    SendPos(GameState.ConnectionManagerProxy.Connection);
                }

                var middlePoint = VectorUtils.GetMiddlePoint(MainPlayer.Position, mPos);

                MainPlayer.Heading        = VectorUtils.GetAngleBetweenVectors(MainPlayer.Position, mPos);
                MainPlayer.LookingAtPoint = mPos;

                SpawnPortal(portal, m1, m2);
                UpdateLoop(deltaTime, mPos);

                lock (SFMLLock)
                {
                    DrawLoop();
                    GameWindow.SetView(MainView);
                    GameWindow.Draw(GameplayUI.Scoreboard);
                    GameWindow.Draw(GameplayUI.RespawnMesage);
                    GameWindow.Draw(GameplayUI.KillNotifier);
                    GameWindow.Draw(GameplayUI.InGameLog);
                    if (container.Show)
                    {
                        GameWindow.Draw(container.composite);
                    }
                    ZoomedView.Center = middlePoint;

                    ZoomedView.Zoom(zoomView);
                    zoomView = 1.0f;
                    GameWindow.SetView(ZoomedView);

                    GameWindow.Display();
                }
            }
        }