Ejemplo n.º 1
0
        /// <summary>
        /// Warp etntiy to position
        /// </summary>
        /// <param name="id"></param>
        /// <param name="v"></param>
        public void Warp(Position targetPosition, bool instantUpdate = false)
        {
            RoomTile oldTile = CurrentTile;

            if (oldTile != null)
            {
                oldTile.RemoveEntity(Entity);
            }

            if (Next != null)
            {
                RoomTile nextTile = Next.GetTile(Room);

                if (nextTile != null)
                {
                    nextTile.RemoveEntity(Entity);
                }
            }

            Position = targetPosition.Copy();
            RefreshHeight(targetPosition);

            RoomTile newTile = CurrentTile;

            if (newTile != null)
            {
                newTile.AddEntity(Entity);
            }

            if (instantUpdate && Room != null)
            {
                InteractItem();
                Room.Send(new UsersStatusComposer(List.Create(Entity)));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Process user inside room
        /// </summary>
        /// <param name="entity">the entity to process</param>
        private void ProcessUser(IEntity entity)
        {
            Position position = entity.RoomEntity.Position;
            Position goal     = entity.RoomEntity.Goal;

            if (entity.RoomEntity.IsWalking)
            {
                if (entity.RoomEntity.Next != null)
                {
                    entity.RoomEntity.Position.X = entity.RoomEntity.Next.X;
                    entity.RoomEntity.Position.Y = entity.RoomEntity.Next.Y;
                    entity.RoomEntity.Position.Z = entity.RoomEntity.Position.GetTile(room).GetWalkingHeight();
                }

                if (entity.RoomEntity.PathList.Count > 0)
                {
                    Position next = entity.RoomEntity.PathList[0];
                    entity.RoomEntity.PathList.Remove(next);

                    var previousTile = entity.RoomEntity.CurrentTile;

                    if (previousTile != null)
                    {
                        previousTile.RemoveEntity(entity);
                    }

                    RoomTile nextTile = next.GetTile(room);

                    if (nextTile == null || !RoomTile.IsValidTile(room, entity, next,
                                                                  lastStep: !entity.RoomEntity.PathList.Any()))
                    {
                        entity.RoomEntity.PathList.Clear();
                        ProcessUser(entity);
                        entity.RoomEntity.Move(goal.X, goal.Y);
                        return;
                    }

                    nextTile.AddEntity(entity);

                    int    rotation = Rotation.CalculateDirection(position.X, position.Y, next.X, next.Y);
                    double height   = next.GetTile(room).GetWalkingHeight();

                    entity.RoomEntity.RemoveStatus("mv");
                    entity.RoomEntity.RemoveStatus("sit");
                    entity.RoomEntity.RemoveStatus("lay");

                    entity.RoomEntity.Position.Rotation = rotation;
                    entity.RoomEntity.AddStatus("mv", string.Format("{0},{1},{2}", next.X, next.Y, height.ToClientValue()));
                    entity.RoomEntity.Next = next;
                }
                else
                {
                    entity.RoomEntity.StopWalking();
                }

                entity.RoomEntity.NeedsUpdate = true;
            }
        }
Ejemplo n.º 3
0
        public void DoRoll(IEntity entity, Item roller, Room room, Position fromPosition, Position nextPosition)
        {
            RoomTile previousTile = fromPosition.GetTile(room);
            RoomTile nextTile     = nextPosition.GetTile(room);

            // Temporary fix if the user walks on an item and their height gets put up.
            if (entity.RoomEntity.CurrentItem != null && entity.RoomEntity.CurrentItem.Definition.HasBehaviour(ItemBehaviour.ROLLER))
            {
                if (Math.Abs(entity.RoomEntity.Position.Z - roller.Position.Z) >= 0.1)
                {
                    if (nextTile.HighestItem != null && nextTile.HighestItem.Definition.HasBehaviour(ItemBehaviour.ROLLER))
                    {
                        nextPosition.Z = roller.Position.Z + roller.Definition.Data.TopHeight;
                    }
                }
            }

            // The next height but what the client sees.
            double displayNextHeight = nextPosition.Z;

            //if (entity.getRoomUser().isSittingOnGround())
            //{
            //    displayNextHeight -= 0.5; // Take away sit offset when sitting on ground, because yeah, weird stuff.
            //}

            entity.RoomEntity.RollingData.DisplayHeight = displayNextHeight;//setZ(displayNextHeight);

            entity.RoomEntity.Position.X = nextPosition.X;
            entity.RoomEntity.Position.Y = nextPosition.Y;
            entity.RoomEntity.Position.Z = nextPosition.Z;

            previousTile.RemoveEntity(entity);
            nextTile.AddEntity(entity);

            /*
             *
             *
             * // Fix bounce for sitting on chairs if the chair top height is higher 1.0
             * if (entity.getRoomUser().containsStatus(StatusType.SIT)) {
             * double sitHeight = Double.parseDouble(entity.getRoomUser().getStatus(StatusType.SIT).getValue());
             *
             * if (sitHeight > 1.0) {
             *  displayNextHeight += (sitHeight - 1.0); // Add new height offset found.
             * }
             * }
             *
             * entity.getRoomUser().getRollingData().setDisplayHeight(displayNextHeight);//setZ(displayNextHeight);
             *
             * entity.getRoomUser().getPosition().setX(nextPosition.getX());
             * entity.getRoomUser().getPosition().setY(nextPosition.getY());
             * entity.getRoomUser().getPosition().setZ(nextPosition.getZ());
             *
             * previousTile.removeEntity(entity);
             * nextTile.addEntity(entity);*/
        }