Ejemplo n.º 1
0
        public override void OnTick()
        {
            var p2d  = new DVector3(entity.position.x, 0, entity.position.z);
            var targ = new Game.DVector3(target.x, 0, target.z);
            var dist = World.current.map.Distance(p2d, targ);
            var dir  = World.current.map.Direction(p2d, targ);

            if (dist < moveSpeed * World.deltaTime)
            {
                entity.position = new DVector3(target.x, entity.position.y, target.z);
            }
            else
            {
                var d = p2d + dir * moveSpeed * World.deltaTime;
                entity.position      = new DVector3(d.x, entity.position.y, d.z);
                entity.faceDirection = dir;
            }

            var terrainHeight = DReal.Max(0, World.current.map.Height(entity.position));
            var wobble        = DReal.Sin((World.current.time + wobbleOffset) * wobbleFrequency) * wobbleAmplitude;
            var targetHeight  = terrainHeight + floatOffset + wobble;

            var height_diff = DReal.Abs(targetHeight - entity.position.y);
            var newHeight   = (DReal)0;

            if (targetHeight > entity.position.y)
            {
                newHeight = entity.position.y + DReal.Min(height_diff, verticalSpeed * World.deltaTime);
            }
            else
            {
                newHeight = entity.position.y - DReal.Min(height_diff, verticalSpeed * World.deltaTime);
            }

            entity.position = new DVector3(entity.position.x,
                                           DReal.Max(terrainHeight, newHeight),
                                           entity.position.z);
        }