Пример #1
0
        public static bool CanSeeTarget(this Movable seer, Movable target, float maxDistance)
        {
            RayCastHitInfo hitInfo = GenPhysics.RayCastObject(seer, seer.GlobalPosition, target.GlobalPosition, out bool hitSomething);

            if (!hitSomething || hitInfo.collider == null)
            {
                return(false);
            }

            Node hitNode = hitInfo.collider as Node;

            return(hitNode == target && seer.GlobalPosition.DistanceTo(target.GlobalPosition) <= maxDistance);
        }
Пример #2
0
        public static RayCastHitInfo RayCastObject(CanvasItem spaceNode, Vector2 from, Vector2 to, out bool success)
        {
            Physics2DDirectSpaceState physicsState = Physics2DServer.SpaceGetDirectState(spaceNode.GetWorld2d().Space);
            Dictionary result = physicsState.IntersectRay(from, to, GodotUtility.MakeGDArray(spaceNode));

            if (result.ContainsKey("position"))
            {
                success = true;
                RayCastHitInfo info = new RayCastHitInfo();
                info.position = (Vector2)result["position"];
                if (result.ContainsKey("collider"))
                {
                    info.collider = (Godot.Object)result["collider"];
                }
                return(info);
            }
            else
            {
                success = false;
                return(null);
            }
        }