Пример #1
0
        public override void OnTick()
        {
            var remaining_movement = moveSpeed * World.deltaTime;

            while (remaining_movement > 0 && currentPath != null && currentPath.Count != 0)
            {
                // If there is something in the way, then ignore this waypoint.
                if (currentPath.Count > 1 && World.current.FindEntitiesWithinRadius(new DVector3(currentPath[0].x, 0, currentPath[0].z), 0).Where(e => e != entity).Any())
                {
                    currentPath.RemoveAt(0);
                    continue;
                }
                var dist = World.current.map.Distance(new DVector3(entity.position.x, 0, entity.position.z),
                                                      new DVector3(currentPath[0].x, 0, currentPath[0].z));
                var dir = World.current.map.Direction(new DVector3(entity.position.x, 0, entity.position.z),
                                                      new DVector3(currentPath[0].x, 0, currentPath[0].z));
                var px = (DReal)0;
                var pz = (DReal)0;

                if (dist > remaining_movement)
                {
                    var motion = dir * remaining_movement;
                    px = DReal.Repeat(entity.position.x + motion.x,
                                      World.current.map.width);
                    pz = DReal.Repeat(entity.position.z + motion.z,
                                      World.current.map.depth);
                    remaining_movement = 0;
                }
                else
                {
                    px = currentPath[0].x;
                    pz = currentPath[0].z;
                    currentPath.RemoveAt(0);
                    remaining_movement -= dist;
                }
                var new_height = World.current.map.Height(new DVector3(px, 0, pz));
                entity.position      = new DVector3(px, new_height, pz);
                entity.faceDirection = dir;
            }

            entity.position = new DVector3(entity.position.x,
                                           World.current.map.Height(entity.position),
                                           entity.position.z);
        }
Пример #2
0
 public DVector3 WrapPosition(DVector3 position)
 {
     return(new DVector3(DReal.Repeat(position.x, width),
                         position.y,
                         DReal.Repeat(position.z, depth)));
 }