예제 #1
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            UI.LoadContent(Content, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
            UIClass.LoadContent(Content);
            UpgradeSystem.LoadContent(Content, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

            WeaponList.LoadContent(Content);
            ChopperList.LoadContent(Content);
            EffectsList.LoadContent(Content);

            EnemyMaker.LoadContent(Content);

            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            Level level = new Level(500, 500);


            Player player = new Player(ChopperList.GetChopper(ChopperType.Training), new Vector2(500, 2000));

            //Player player = new Player(ChopperList.GetChopper(0), new Vector2(0, 0));
            hud    = new Hud(Content.Load <SpriteFont>("hudFont"));
            camera = new Camera();
            //camera.Position = player.PlayerSpriteCenter;
            camera.Position = player.PlayerCenter;
            gameManager     = new GameManager(level, player);

            List <Sprite> listOfEnemies = new List <Sprite>();

            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.MGun, new Vector2(0, 0), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.MGun, new Vector2(0, 700), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.MGun, new Vector2(700, 700), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.MGun, new Vector2(700, 0), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.Rocket, new Vector2(350, 350), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.RocketHoming, new Vector2(800, 800), 0, 0));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.ShotGun, new Vector2(500, 500), 3, 1));
            listOfEnemies.Add(EnemyMaker.GetTurret(TurretType.ShotGun, new Vector2(250, 450), 5, 0.5f));

            level.AddEntity(listOfEnemies, true, true, true);

            listOfEnemies.Clear();
            listOfEnemies.Add(new Building(Content.Load <Texture2D>("building"), new Vector2(1000, 1000)));
            List <Helipad> listOfHelipads = new List <Helipad>();

            listOfHelipads.Add(new Helipad(Content.Load <Texture2D>("Allies\\helipad"), new Vector2(500, 2000)));
            level.AddLandingPad(listOfHelipads);

            level.AddEntity(listOfEnemies, true, true, false);

            missionScreen      = new MissionScreen(1, "GameTest", "Yarrr mission is to blow up\nevery turret. Then return\nto the base\n\nWASD - Move \nLeft\\Right arrow - rotate\nSpace - fire \nX and L - land\\lift \nU - upgrade (on helipad)\nP- developer stats\n+ and - - zoom ", graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight, Color.SaddleBrown);
            GameData.menuState = MenuState.MissionMenu;
            // TODO: use this.Content to load your game content here
        }
예제 #2
0
파일: Entity.cs 프로젝트: Eros/MiNET
        public virtual void SpawnEntity()
        {
            Level.AddEntity(this);

            var addEntity = McpeAddEntity.CreateObject();

            addEntity.entityType = EntityTypeId;
            addEntity.entityId   = EntityId;
            addEntity.x          = KnownPosition.X;
            addEntity.y          = KnownPosition.Y;
            addEntity.z          = KnownPosition.Z;
            addEntity.yaw        = KnownPosition.Yaw;
            addEntity.pitch      = KnownPosition.Pitch;
            addEntity.metadata   = GetMetadata();
            addEntity.speedX     = (float)Velocity.X;
            addEntity.speedY     = (float)Velocity.Y;
            addEntity.speedZ     = (float)Velocity.Z;

            Level.RelayBroadcast(addEntity);

            IsSpawned = true;

            //McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
            //mcpeSetEntityData.entityId = EntityId;
            //mcpeSetEntityData.metadata = GetMetadata();
            //Level.RelayBroadcast(mcpeSetEntityData);
        }
예제 #3
0
    public void Update()
    {
        switch (state)
        {
        case GameState.LOADING:
        {
            if (loadingTask.IsCompleted)
            {
                state = GameState.GAME;
            }
        } break;

        case GameState.GAME:
        {
            bg.Update();
            level.Update();

            if (Input.wasPressed(Key.Q))
            {
                Console.WriteLine("Eyo");
                level = Levels.CreateLevel1();
                level.AddEntity(new Player(bg));
            }
        } break;
        }
    }
예제 #4
0
        public override void SpawnEntity()
        {
            Level.AddEntity(this);

            Random random = Level.Random;

            //double f = 0.7;
            //float xr = (float)(random.NextDouble() * f + (1.0 - f) * 0.5);
            //float yr = (float)(random.NextDouble() * f + (1.0 - f) * 0.5);
            //float zr = (float)(random.NextDouble() * f + (1.0 - f) * 0.5);

            float xr = 0;
            float yr = 0;
            float zr = 0;

            McpeAddItemEntity mcpeAddItemEntity = McpeAddItemEntity.CreateObject();

            mcpeAddItemEntity.entityId = EntityId;
            mcpeAddItemEntity.item     = GetMetadataSlot();
            mcpeAddItemEntity.x        = KnownPosition.X + xr;
            mcpeAddItemEntity.y        = KnownPosition.Y + yr;
            mcpeAddItemEntity.z        = KnownPosition.Z + zr;

            mcpeAddItemEntity.speedX = (float)Velocity.X;
            mcpeAddItemEntity.speedY = (float)Velocity.Y;
            mcpeAddItemEntity.speedZ = (float)Velocity.Z;
            Level.RelayBroadcast(mcpeAddItemEntity);

            IsSpawned = true;
        }
예제 #5
0
        /// <summary>
        /// Constructor to use when pipe with plant.
        /// </summary>
        /// <param name="texture"> Texture of the pipe.</param>
        /// <param name="source"> Location of the image.</param>
        /// <param name="position"> Position in the level</param>
        /// <param name="level"> The level the pipe is in.</param>
        /// <param name="content"> The content loader of the game.</param>
        public Pipe(Texture2D texture, Rectangle source, Vector2 position, Level level, ContentManager content) :
            base(texture, source, position, 16, 16, true, level)
        {
            PlungerEnemy plungerEnemy = new PlungerEnemy(new Vector2(position.X, position.Y - 20), 16, 21, content, level);

            level.AddEntity(plungerEnemy);
        }
예제 #6
0
        public override void SpawnEntity()
        {
            Level.AddEntity(this);
            IsSpawned = true;
            BroadcastSetEntityData();

            SpawnToAll();
        }
예제 #7
0
        public override void Attack(GameTime gameTime, Level level, bool attackButton, Vector2 direction)
        {
            if (Parent == null)
            {
                return;
            }

            if (!attackButton && direction == Vector2.Zero)
            {
                _currentAttackButton = attackButton;
                level.RemoveEntity(this);
                return;
            }

            if (!level.ContainsEntity(this))
            {
                level.AddEntity(this);
            }

            Position = Parent.CenterPosition;

            direction *= (OptionsManager.CurrentOptions.InvertAim ? 1 : -1);

            if (direction == Vector2.Zero)
            {
                direction = Parent.CurrentDirection * -1;
            }

            Angle = (float)(Math.Atan2(direction.X, -direction.Y) + _spriteAngle);

            if (attackButton && !_currentAttackButton && Parent.Arrows > 0)
            {
                Parent.Arrows.Quantity--;
                SoundManager.PlaySound("bow");
                LastShotArrow = new Arrow(direction.Normalized() * -1)
                {
                    Position = Parent.CenterPosition, Parent = Parent
                };
                level.AddEntity(LastShotArrow);
                _lastShootDate = gameTime.TotalGameTime;
            }
            _currentAttackButton = attackButton;
        }
예제 #8
0
        public void DeployAttack(SpecialAttack attack)
        {
            var direction = Vector2Extension.AngleToVector2(Rotation);

            attack.Position = Position + direction * Size / 2;

            attack.ApplyForce(direction * attack.MaxSpeed, instantaneous: true);
            ApplyForce(-direction * attack.Mass, instantaneous: true);

            Level.AddEntity(attack);
        }
예제 #9
0
        /// <summary>
        /// Drop powerup from hud if there is one.
        /// </summary>
        public void DropPowerUp()
        {
            if (_powerUp != null)
            {
                _powerUp.Position = new Vector2(((_camera.Position.X / _scale) + (SuperPlatformerGame.RESOLUTION_X * 0.5f)), _camera.Position.Y / _scale);

                _powerUp.OnDrop();
                _level.AddEntity(_powerUp);
                _powerUp = null;
            }
        }
예제 #10
0
        public override void Attack(GameTime gameTime, Level level, bool attackButton, Vector2 direction)
        {
            var isOnMap = level.ContainsEntity(this);

            if (!isOnMap)
            {
                if (attackButton)
                {
                    if (direction == Vector2.Zero)
                    {
                        direction = Parent.CurrentDirection;
                    }

                    direction.Normalize();

                    _maxFlyTime = TimeSpan.FromSeconds(0.5);

                    SoundManager.PlaySound("boomerang");
                    _flyingBack = false;
                    _direction  = direction;
                    _startTime  = gameTime.TotalGameTime;
                    Position    = Parent.CenterPosition + _direction;
                    level.AddEntity(this);
                }
            }
            else if (Parent != null && direction != Vector2.Zero)
            {
                if (_startTime + _maxFlyTime < gameTime.TotalGameTime)
                {
                    if (Parent.Magic > 1 && !_flyingBack)
                    {
                        _maxFlyTime = TimeSpan.FromSeconds(0.2);
                        Parent.Magic.Quantity--;
                        _startTime  = gameTime.TotalGameTime;
                        _flyingBack = false;
                    }
                    else
                    {
                        _flyingBack = true;
                    }
                }
                else
                {
                    _flyingBack = false;
                }

                if (!_flyingBack)
                {
                    _direction = direction;
                    _direction.Normalize();
                }
            }
        }
예제 #11
0
        public void Drop(Level level, float x, float y, int quantity)
        {
            for (var i = 0; i < quantity; i++)
            {
                var dropItem = (ItemEntity)ENTITIES.ITEM.Construct();
                dropItem.Item   = this;
                dropItem.SpeedX = Rise.Rnd.Next(-50, 50) / 10f;
                dropItem.SpeedY = Rise.Rnd.Next(-50, 50) / 10f;

                level.AddEntity(dropItem);
                dropItem.SetPosition(x, y);
            }
        }
예제 #12
0
    public Game(Task loadingTask)
    {
        renderer = Renderer.Instance;
        state    = GameState.LOADING;

        this.loadingTask = loadingTask;
        loadingTask.Wait();

        bg = new Background(2);

        level        = Levels.CreateLevel1();
        level.Player = new Player(bg);
        level.AddEntity(level.Player);
    }
예제 #13
0
 public override void SpawnEntity()
 {
     Level.AddEntity(this);
     foreach (var i in Level.OnlinePlayers)
     {
         var SpawnedBy = i.Wrapper;
         new SpawnObject(SpawnedBy)
         {
             EntityId = EntityId,
             X        = KnownPosition.X,
             Y        = KnownPosition.Y,
             Z        = KnownPosition.Z,
             Type     = ObjectType.ActivatedTNT,
             Data     = 0
         }.Write();
     }
 }
예제 #14
0
        public override void Attack(GameTime gameTime, Level level, bool attackButton, Vector2 direction)
        {
            if (Parent == null)
            {
                return;
            }

            direction = Parent.CurrentDirection;

            if (Math.Abs(direction.X) > Math.Abs(direction.Y))
            {
                if (direction.X > 0)
                {
                    direction = new Vector2(1, 0);
                }
                else
                {
                    direction = new Vector2(-1, 0);
                }
            }
            else
            {
                if (direction.Y > 0)
                {
                    direction = new Vector2(0, 1);
                }
                else
                {
                    direction = new Vector2(0, -1);
                }
            }

            if (attackButton && !_oldAttackButton && Parent.Magic > 0)
            {
                Parent.Magic.Quantity--;
                SoundManager.PlaySound("fireball");
                level.AddEntity(new FireBall(direction)
                {
                    Position   = Parent.CenterPosition,
                    Parent     = Parent,
                    MaxFlyTime = MaxFireBallFlyTime
                });
            }

            _oldAttackButton = attackButton;
        }
예제 #15
0
 public override void SpawnEntity()
 {
     Level.AddEntity(this);
     foreach (var i in Level.OnlinePlayers)
     {
         var SpawnedBy = i.Wrapper;
         new SpawnObject(SpawnedBy)
         {
             EntityId = EntityId,
             X        = KnownPosition.X,
             Y        = KnownPosition.Y,
             Z        = KnownPosition.Z,
             Type     = ObjectType.Snowball,
             Data     = Shooter.EntityId,
             Pitch    = (byte)KnownPosition.Pitch,
             Yaw      = (byte)KnownPosition.Yaw
         }.Write();
     }
 }
예제 #16
0
        public override void SpawnEntity()
        {
            Ttl = 9999999;
            Level.AddEntity(this);
            var addEntity = new SpawnObject(Shooter.Wrapper)
            {
                EntityId  = EntityId,
                X         = KnownPosition.X,
                Y         = KnownPosition.Y,
                Z         = KnownPosition.Z,
                Type      = ObjectType,
                Info      = Shooter.EntityId,
                Pitch     = (byte)KnownPosition.Pitch,
                Yaw       = (byte)KnownPosition.Yaw,
                VelocityX = (short)Velocity.X,
                VelocityY = (short)Velocity.Y,
                VelocityZ = (short)Velocity.Z,
            };

            Level.BroadcastPacket(addEntity);
        }
예제 #17
0
        public async Task <bool> FireLaser(CancellationToken cancellation)
        {
            if (MainWeaponAmmo.IsEmpty)
            {
                return(false);
            }

            var direction = Vector2Extension.AngleToVector2(Rotation);

            var laser = new Laser(this, Momentum, Position, direction);

            laser.ApplyAcceleration(direction * laser.MaxSpeed, instantaneous: true);
            ApplyForce(-direction * laser.Mass, instantaneous: true);

            MainWeaponAmmo.Quantity--;
            SoundManager.PlaySound("Shoot01");
            Level.AddEntity(laser);

            await UpdateContext.Delay(MainWeaponDelay);

            return(true);
        }
예제 #18
0
        public void NewLevel(int width, int height, int enemies)
        {
            level = new Level(width, height, levelNumber + 2);
            level.AddEntity(player);
            level.Player = player;
            player.Health++;
            player.Position = new Vector2(3 * Tile.Size + (player.Width / 2), 3 * Tile.Size - (player.Height / 2) + Tile.Size / 2);
            player.Bullets.Clear();
            camera        = new Camera(this);
            camera.Focus  = player;
            camera.Bounds = new Rectangle(0, 0, level.Width * Tile.Size, level.Height * Tile.Size);

            level.Camera = camera;
            level.Initialize();
            for (int y = 3; y < 5; y++)
            {
                for (int x = 3; x < 5; x++)
                {
                    level.Tiles[x + y * width].Color = Color.SaddleBrown;
                }
            }
        }
예제 #19
0
        public override void SpawnEntity()
        {
            lock (_spawnSync)
            {
                if (IsSpawned)
                {
                    throw new Exception("Invalid state. Tried to spawn projectile more than one time.");
                }


                Level.AddEntity(this);

                IsSpawned = true;

                if (BroadcastMovement)
                {
                    //LastUpdatedTime = DateTime.UtcNow;

                    BroadcastMoveAndMotion();
                }
            }
        }
예제 #20
0
파일: Level.cs 프로젝트: thebirk/CS-SDLTest
    public override bool DoStage(Level level)
    {
        if (count > 0)
        {
            cooldown -= Time.DeltaTime;
            if (cooldown <= 0.0f)
            {
                Enemy e = Enemies.CreateEnemy(name);

                left = !left;
                if (left)
                {
                    e.transform.position = new Vector2(0, 0);
                    dest = new Vector2(dest);
                }
                else
                {
                    e.transform.position = new Vector2(1, 0);
                    dest     = new Vector2(dest);
                    cooldown = 0.5f;
                }
                e.transform.Rotate(180);

                dest = new Vector2(dest);
                dest.Sub(0, 0.1f);

                e.SetState(new FlyInState(new SpinState(), dest, 1.0f));
                level.AddEntity(e);
                count--;
            }

            return(false);
        }
        else
        {
            return(true);
        }
    }
예제 #21
0
        public override void SpawnEntity()
        {
            Level.AddEntity(this);
            foreach (var i in Level.GetOnlinePlayers)
            {
                var spawnedBy = i.Wrapper;
                new SpawnObject(spawnedBy)
                {
                    EntityId = EntityId,
                    X        = KnownPosition.X,
                    Y        = KnownPosition.Y,
                    Z        = KnownPosition.Z,
                    Type     = ObjectType.ItemStack
                }.Write();

                new EntityMetadata(spawnedBy)
                {
                    EntityId = EntityId,
                    Type     = ObjectType.ItemStack,
                    Data     = Item
                }.Write();
            }
        }
예제 #22
0
        public void Load(string filename)
        {
            Player = PlayerEntity.Load("adccda30-36f7-4574-ae18-9a2eb48fe271.player");
            //Player = PlayerEntity.Load(Player);

            var fileStream = new FileStream(filename, FileMode.Open);
            var formatter  = new BinaryFormatter();

            try
            {
                // The player is not loaded from the level file.
                Level = (Level)formatter.Deserialize(fileStream);
                Level.AddEntity(Player);
                Console.WriteLine($"Level loaded from '{filename}'.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                fileStream.Close();
            }
        }
예제 #23
0
        private void HandlePlayerDropItem(McpeDropItem message)
        {
            if (!Inventory.HasItem(message.item))
            {
                return;
            }

            ItemStack itemStack = message.item.Value;

            Item item = ItemFactory.GetItem(itemStack.Id, itemStack.Metadata);

            var itemEntity = new ItemEntity(Level, item)
            {
                KnownPosition =
                {
                    X = KnownPosition.X,
                    Y = KnownPosition.Y,
                    Z = KnownPosition.Z
                },
                Count = itemStack.Count
            };

            Level.AddEntity(itemEntity);
        }
예제 #24
0
파일: Projectile.cs 프로젝트: qtx0213/MiNET
        public override void SpawnEntity()
        {
            lock (_spawnSync)
            {
                if (IsSpawned)
                {
                    throw new Exception("Invalid state. Tried to spawn projectile more than one time.");
                }


                Level.AddEntity(this);

                IsSpawned = true;

                if (Shooter == null)
                {
                    var addEntity = McpeAddEntity.CreateObject();
                    addEntity.entityType = EntityTypeId;
                    addEntity.entityId   = EntityId;
                    addEntity.x          = KnownPosition.X;
                    addEntity.y          = KnownPosition.Y;
                    addEntity.z          = KnownPosition.Z;
                    addEntity.yaw        = KnownPosition.Yaw;
                    addEntity.pitch      = KnownPosition.Pitch;
                    addEntity.metadata   = GetMetadata();
                    addEntity.speedX     = (float)Velocity.X;
                    addEntity.speedY     = (float)Velocity.Y;
                    addEntity.speedZ     = (float)Velocity.Z;

                    Level.RelayBroadcast(addEntity);

                    McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                    mcpeSetEntityData.entityId = EntityId;
                    mcpeSetEntityData.metadata = GetMetadata();
                    Level.RelayBroadcast(mcpeSetEntityData);
                }
                else
                {
                    {
                        var addEntity = McpeAddEntity.CreateObject();
                        addEntity.entityType = EntityTypeId;
                        addEntity.entityId   = EntityId;
                        addEntity.x          = KnownPosition.X;
                        addEntity.y          = KnownPosition.Y;
                        addEntity.z          = KnownPosition.Z;
                        addEntity.yaw        = KnownPosition.Yaw;
                        addEntity.pitch      = KnownPosition.Pitch;
                        addEntity.metadata   = GetMetadata();
                        addEntity.speedX     = (float)Velocity.X;
                        addEntity.speedY     = (float)Velocity.Y;
                        addEntity.speedZ     = (float)Velocity.Z;

                        Level.RelayBroadcast(Shooter, addEntity);

                        McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                        mcpeSetEntityData.entityId = EntityId;
                        mcpeSetEntityData.metadata = GetMetadata();
                        Level.RelayBroadcast(Shooter, mcpeSetEntityData);
                    }
                    {
                        MetadataDictionary metadata = GetMetadata();
                        metadata[17] = new MetadataLong(0);

                        var addEntity = McpeAddEntity.CreateObject();
                        addEntity.entityType = EntityTypeId;
                        addEntity.entityId   = EntityId;
                        addEntity.x          = KnownPosition.X;
                        addEntity.y          = KnownPosition.Y;
                        addEntity.z          = KnownPosition.Z;
                        addEntity.yaw        = KnownPosition.Yaw;
                        addEntity.pitch      = KnownPosition.Pitch;
                        addEntity.metadata   = metadata;
                        addEntity.speedX     = (float)Velocity.X;
                        addEntity.speedY     = (float)Velocity.Y;
                        addEntity.speedZ     = (float)Velocity.Z;

                        Shooter.SendPackage(addEntity);

                        McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                        mcpeSetEntityData.entityId = EntityId;
                        mcpeSetEntityData.metadata = metadata;
                        Shooter.SendPackage(mcpeSetEntityData);
                    }
                }
            }
        }
예제 #25
0
        void ClientUpdate()
        {
            Packet p = client.GetNextReceived();

            switch (clientState)
            {
            case ClientState.CONNECTING:
            {
                if (!client.Connected)
                {
                    Debug.WriteLine("Sending connecting");
                    client.Send(new Connecting());
                }
                else
                {
                    if (p != null)
                    {
                        if (p.Code == Code.LevelGenerationData)
                        {
                            LevelGenData data = (LevelGenData)p;
                            seed = data.Seed;

                            level = new LevelGenerator(seed, data.Size, false);

                            //Create Player
                            player = new Player(0, 0, key);

                            //Create UI
                            ui = new PlayerUI(player);

                            //Add Player
                            level.AddEntity(player);

                            //Init level
                            level.Init();

                            client.Send(new AddOtherPlayer(player.GetX(), player.GetY()));

                            clientState = ClientState.ENTITY_EXCHANGE;
                        }
                        else
                        {
                            Debug.WriteLine("Failed connection!");
                            //Go back to menu
                            if (Frame.CanGoBack)
                            {
                                Frame.GoBack();
                            }
                        }
                    }
                }
                break;
            }

            case ClientState.ENTITY_EXCHANGE:
            {
                while (p != null)
                {
                    if (p.Code == Code.OtherPlayerCreationData)
                    {
                        AddOtherPlayer otherPlayer = (AddOtherPlayer)p;

                        OtherPlayer other = new OtherPlayer(otherPlayer.X, otherPlayer.Y, artificial);

                        level.AddEntity(other);

                        p = client.GetNextReceived();
                        if (p.Code != Code.OtherPlayerID)
                        {
                            Debug.WriteLine("Something is extremely wrong");
                        }
                        else
                        {
                            other.AddID(((OtherPlayerID)p).ID);
                        }
                    }
                    else if (p.Code == Code.OtherPlayerID)
                    {
                        OtherPlayerID playerID = (OtherPlayerID)p;
                        player.AddID(playerID.ID);

                        clientState = ClientState.READY;
                    }
                    p = client.GetNextReceived();
                }
                break;
            }

            case ClientState.READY:
            {
                while (p != null)
                {
                    if (p.Code == Code.Pong)
                    {
                        gotpong = true;
                        Pong po = (Pong)p;
                        Debug.WriteLine("Last ping: " + (watch.ElapsedMilliseconds - po.Time) + " ms");
                    }
                    else if (p.Code == Code.EntityXYCorrection)
                    {
                        level.AddCorrection((EntityCorrection)p);
                    }
                    else if (p.Code == Code.Input)
                    {
                        artificial.Update((Input)p);
                    }
                    p = client.GetNextReceived();
                }
                client.Send(new Input(key.up, key.down, key.left, key.right));
                break;
            }
            }
        }
예제 #26
0
        public override void SpawnEntity()
        {
            Level.AddEntity(this);

            if (Shooter == null)
            {
                var addEntity = McpeAddEntity.CreateObject();
                addEntity.entityType = EntityTypeId;
                addEntity.entityId   = EntityId;
                addEntity.x          = KnownPosition.X;
                addEntity.y          = KnownPosition.Y;
                addEntity.z          = KnownPosition.Z;
                addEntity.yaw        = KnownPosition.Yaw;
                addEntity.pitch      = KnownPosition.Pitch;
                //addEntity.metadata = GetMetadata();
                addEntity.speedX = (float)Velocity.X;
                addEntity.speedY = (float)Velocity.Y;
                addEntity.speedZ = (float)Velocity.Z;

                Level.RelayBroadcast(addEntity);

                IsSpawned = true;

                McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                mcpeSetEntityData.entityId = EntityId;
                mcpeSetEntityData.metadata = GetMetadata();
                Level.RelayBroadcast(mcpeSetEntityData);
            }
            else
            {
                {
                    var addEntity = McpeAddEntity.CreateObject();
                    addEntity.entityType = EntityTypeId;
                    addEntity.entityId   = EntityId;
                    addEntity.x          = KnownPosition.X;
                    addEntity.y          = KnownPosition.Y;
                    addEntity.z          = KnownPosition.Z;
                    addEntity.yaw        = KnownPosition.Yaw;
                    addEntity.pitch      = KnownPosition.Pitch;
                    //addEntity.metadata = GetMetadata();
                    addEntity.speedX = (float)Velocity.X;
                    addEntity.speedY = (float)Velocity.Y;
                    addEntity.speedZ = (float)Velocity.Z;

                    Level.RelayBroadcast(Shooter, addEntity);

                    McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                    mcpeSetEntityData.entityId = EntityId;
                    mcpeSetEntityData.metadata = GetMetadata();
                    Level.RelayBroadcast(Shooter, mcpeSetEntityData);
                }
                {
                    MetadataDictionary metadata = GetMetadata();
                    metadata[17] = new MetadataLong(0);

                    var addEntity = McpeAddEntity.CreateObject();
                    addEntity.entityType = EntityTypeId;
                    addEntity.entityId   = EntityId;
                    addEntity.x          = KnownPosition.X;
                    addEntity.y          = KnownPosition.Y;
                    addEntity.z          = KnownPosition.Z;
                    addEntity.yaw        = KnownPosition.Yaw;
                    addEntity.pitch      = KnownPosition.Pitch;
                    //addEntity.metadata = metadata;
                    addEntity.speedX = (float)Velocity.X;
                    addEntity.speedY = (float)Velocity.Y;
                    addEntity.speedZ = (float)Velocity.Z;

                    Shooter.SendPackage(addEntity);

                    McpeSetEntityData mcpeSetEntityData = McpeSetEntityData.CreateObject();
                    mcpeSetEntityData.entityId = EntityId;
                    mcpeSetEntityData.metadata = metadata;
                    Shooter.SendPackage(mcpeSetEntityData);
                }
            }
        }
예제 #27
0
        public static void Update()
        {
            while ((incmsg = Client.ReadMessage()) != null)
            {
                switch (incmsg.MessageType)
                {
                case NetIncomingMessageType.Data:
                {
                    byte headStringMessage = incmsg.ReadByte();

                    switch (headStringMessage)
                    {
                    case (byte)NetworkAction.Connect:              //CONNECT
                    {
                        recbytespersecond += incmsg.LengthBytes;
                        int          arraylength = incmsg.ReadInt32();
                        EntityPacket receiveE    = EntityPacket.Deserialize(incmsg.ReadBytes(arraylength));
                        Player       e           = new Player();
                        if (level.getClientPlayer().ID == 0 || level.getClientPlayer().ID == receiveE.ID.Value)
                        {
                            break;
                        }
                        e.ApplyPacket(receiveE);

                        Debug.WriteLine(receiveE.Name.Value);
                        level.AddEntity(e);
                        Global.chat.WriteLine(new graphics.ui.ChatMessage("Network", Color.Blue, receiveE.Name.Value + " joined!", Color.Gray));
                    }
                    break;

                    case (byte)NetworkAction.ConnectResponse:             //CONNECT
                    {
                        int id = incmsg.ReadInt32();
                        level.getClientPlayer().ID = id;
                        Game1.online = true;
                        Global.chat.WriteLine(new graphics.ui.ChatMessage("Network", Color.Blue, "Connected to server with ID: " + id, Color.Gray));
                    }
                    break;

                    case (byte)NetworkAction.Disconnect:             //Disconnect
                    {
                        int id = incmsg.ReadInt32();
                        //TODO REMOVE ENTITY
                        foreach (var e in level.mobs)
                        {
                            if (e != level.getClientPlayer() && e.ID == id)
                            {
                                Global.chat.WriteLine(new graphics.ui.ChatMessage("Network", Color.Blue, e.name + " left!", Color.Gray));
                                level.remEntity(e);
                                break;
                            }
                        }
                    }
                    break;

                    case (byte)NetworkAction.Deny:             //CONNECTION DENY
                    {
                        //EMPTY
                    }
                    break;

                    case (byte)NetworkAction.Chat:             //CHAT
                    {
                        recbytespersecond += incmsg.LengthBytes;
                        int    id      = incmsg.ReadInt32();
                        string message = incmsg.ReadString();
                        foreach (var e in level.mobs)
                        {
                            if (e.ID == id)
                            {
                                message = Global.CheckChars(Global.PixelFont, message);
                                Global.chat.WriteLine(new ChatMessage(e.name, Color.Blue, message, Color.White));
                                e.Say(message);
                                break;
                            }
                        }
                    }
                    break;

                    case (byte)NetworkAction.AddEntity:             //ADDENTITY
                    {
                        recbytespersecond += incmsg.LengthBytes;
                        int          arraylength = incmsg.ReadInt32();
                        EntityPacket receiveE    = EntityPacket.Deserialize(incmsg.ReadBytes(arraylength));
                        Entity       e           = (Entity)Activator.CreateInstance(receiveE.EntityType.Value);
                        e.ApplyPacket(receiveE);
                        level.AddEntity(e);
                    }
                    break;

                    case (byte)NetworkAction.RefreshEntity:             //REFRESHENTITY
                    {
                        int          arraylength = incmsg.ReadInt32();
                        EntityPacket receiveE    = EntityPacket.Deserialize(incmsg.ReadBytes(arraylength));

                        if (receiveE.ID.Value == level.getClientPlayer().ID)                 //CLIENT PLAYER
                        {
                            break;
                        }
                        foreach (var e in level.entities)
                        {
                            if (e.ID == receiveE.ID.Value)                 //FIND ENTITY
                            {
                                //receiveE.Position.Value = e.Position; //TEMPORARY SOLUTION TO NOT SYNC POSITION DIRECTLY
                                e.ApplyPacket(receiveE);
                                break;
                            }
                        }
                    }
                    break;

                    case (byte)NetworkAction.RefreshEntities:             //ADDENTITY
                    {
                        recbytespersecond += incmsg.LengthBytes;
                        level.clearEntities();
                        int counter = incmsg.ReadInt32();                 //ENTITIES COUNT
                        for (int i = 0; i < counter; i++)
                        {
                            int          length       = incmsg.ReadInt32();  //ARRAYLENGTH
                            byte[]       packetbytes  = incmsg.ReadBytes(length);
                            EntityPacket entitypacket = EntityPacket.Deserialize(packetbytes);

                            if (entitypacket.ID.Value == level.getClientPlayer().ID)
                            {
                                continue;
                            }
                            Entity ent = (Entity)Activator.CreateInstance(entitypacket.EntityType.Value);
                            ent.ApplyPacket(entitypacket);
                            level.AddEntity(ent);
                        }
                    }
                    break;
                    }
                }
                break;

                case NetIncomingMessageType.DiscoveryResponse:
                {
                    string ip      = incmsg.SenderEndPoint.ToString();
                    string name    = incmsg.ReadString();
                    string players = incmsg.ReadString();
                    Debug.WriteLine(("Found server at " + ip + " name: " + name));
                    foreach (var server in servers)
                    {
                        if (server.ip == ip)
                        {
                            return;
                        }
                    }
                    servers.Add(new ListMenuElement(name, ip, players));
                    break;
                }
                }
                recbytespersecond += incmsg.LengthBytes;
                Client.Recycle(incmsg);
            } //INCOMING MESSAGES

            if (!Game1.online)
            {
                return;
            }
            outmsg = Client.CreateMessage();
            outmsg.Write((byte)NetworkAction.RefreshEntity); //REFRESH CLIENT PLAYER
            EntityPacket packet = new EntityPacket(level.getClientPlayer(), level.getClientPlayer().EntityPacket);

            packet.MoveTo.Value = level.getClientPlayer().Position;
            byte[] objectArray = packet.Serialize(true); //Convert Object to bytearray

            outmsg.Write(objectArray.Length);            //SEND LENGTH OF ARRAY
            outmsg.Write(objectArray);                   //SEND ARRAY ITSELF
            semdcbytespersecond += outmsg.LengthBytes;

            Client.SendMessage(outmsg, NetDeliveryMethod.ReliableOrdered);

            start = DateTime.Now.TimeOfDay;
            if (start >= end)
            {
                RecievingBytesPerSecond = recbytespersecond;
                SendingBytesPerSecond   = semdcbytespersecond;
                semdcbytespersecond     = 0;
                recbytespersecond       = 0;
                end = start + TimeSpan.FromSeconds(1);
            }
        }
예제 #28
0
 public virtual void Destroy()
 {
     Level.RemoveEntity(this);
     Level.AddEntity(new Explosion(this.Position, Level, 1, 1000f, Color));
 }
예제 #29
0
파일: Entity.cs 프로젝트: oas/MiNET
        public virtual void SpawnEntity()
        {
            Level.AddEntity(this);

            IsSpawned = true;
        }
예제 #30
0
 public virtual void SpawnEntity()
 {
     Level.AddEntity(this);
 }