Пример #1
0
        private List <CharacterPlayer> FillRecieverList(HashSet <LoginManagerServer> characterlist, CharacterPlayer reciever)
        {
            List <CharacterPlayer> others = new List <CharacterPlayer>();

            foreach (LoginManagerServer l in characterlist)
            {
                CharacterPlayer tempC = l.GetCharacter();

                double deltaDistance = reciever._pos.Length() - tempC._pos.Length();

                //TODO: distance should depend on settings or screen resolution
                if (!loginManager.GetUniqueID().Equals(l.GetUniqueID()) && deltaDistance < 2000)
                {
                    tempC.physicalPosition -= MapContainer.GetMapByName(CurrentLayer.MapName).Entity.Position;
                    tempC._pos             -= MapContainer.GetMapByName(CurrentLayer.MapName).Entity.Position;
                    others.Add(tempC);
                }
            }
            return(others);
        }
Пример #2
0
        public void Update()
        {
            //checks if client is still connected
            //CheckIfConnected();
            timeSpan += Time.DeltaTime;
            //Updates every 1/20 second
            if (timeSpan > 0.05)
            {
                if (CurrentLayer != null)
                {
                    HashSet <LoginManagerServer> characterlist = CurrentLayer.LayerLogins;

                    if (characterlist != null && characterlist.Count > 0 && loginManager != null)
                    {
                        CharacterPlayer tempc = loginManager.GetCharacter();

                        //sets the position of the entity's physical body as the physical position
                        FSRigidBody v = Core.Scene.FindEntity(tempc._name).GetComponent <FSRigidBody>();

                        tempc.physicalPosition = v.Transform.Position;

                        DataTemplate dataTemplate = new DataTemplate
                        {
                            RecieverCharacter = tempc,
                            OthersCharacters  = FillRecieverList(characterlist, tempc)
                        };
                        //makes the position relative to client's side of the map position
                        dataTemplate.RecieverCharacter.physicalPosition = dataTemplate.RecieverCharacter.physicalPosition - MapContainer.GetMapByName(CurrentLayer.MapName).Entity.Position;
                        string posString = Newtonsoft.Json.JsonConvert.SerializeObject(dataTemplate);

                        MessageManager.SendStringToUniqueID(Entity.Scene, posString, loginManager.GetUniqueID(), MessageType.GameUpdate);
                    }
                }
            }
        }
Пример #3
0
        public static bool CalculateMovement(CharacterPlayer character, Keys[] keys, long ID)
        {
            if (character == null)
            {
                return(false);
            }
            float speed = 350;

            try
            {
                IsShiftDown = false;
                var dir = Vector2.Zero;
                foreach (var key in keys)
                {
                    //add proper movement with deltaTime later
                    switch (key)
                    {
                    case Keys.W:
                        //character._pos.Y -= 3f;
                        dir.Y = -1f;
                        break;

                    case Keys.A:
                        //character._pos.X -= 3f;
                        dir.X = -1f;
                        break;

                    case Keys.S:
                        //character._pos.Y += 3f;
                        dir.Y = 1f;
                        break;

                    case Keys.D:
                        //character._pos.X += 3f;
                        dir.X = 1f;
                        break;

                    case Keys.T:
                        character.AddItemToInventory(ItemManager.GenerateItem());
                        LoginManagerServer login = MapContainer.GetLoginByID(ID);
                        MapContainer.MoveLoginToMap(login, MapContainer.GetMapByName("MapTwo"));
                        break;

                    case Keys.LeftShift:
                        IsShiftDown = true;
                        break;

                    default:
                        break;
                    }
                }
                if (dir != Vector2.Zero)
                {
                    Entity e = Core.Scene.FindEntity(character._name);
                    e.RemoveComponent <ChannelingComponent>();

                    var movement = dir * speed * Time.DeltaTime;

                    FSRigidBody body  = e.GetComponent <FSRigidBody>();
                    Mover       mover = e.GetComponent <Mover>();

                    if (mover.Move(movement, out CollisionResult collisionResult))
                    {
                        //Debug.DrawLine(e.Position, e.Position + collisionResult.Normal * 100, Color.Black, 1f);
                    }
                    return(true);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return(false);
        }