// public void ScannablesInSight(Scannables scan) // { // if (scan.WasScanned()) // return; // scannables.Add(scan); // EmitSignal(nameof(FoundScannable), scan); // } // public void ScannablesOutOfSight(Scannables scan) // { // scannables.Remove(scan); // if (scannables.Count == 0) // { // EmitSignal("LostScannables"); // } // } public bool Scan() { if (current != null) { current.Scanned(); current = null; EmitSignal("LostScannables"); return(true); } return(false); }
public override void _PhysicsProcess(float delta) { if (!GameManager.Instance.playing) { return; } if (scanPulseCharge < 10) { scanPulseCharge++; } else { scanPulseCharge = 0; ray_origin = camera.ProjectRayOrigin(GetViewport().Size / 2); ray_end = ray_origin + camera.ProjectRayNormal(GetViewport().Size / 2) * rayLength; do_raycast = true; } if (do_raycast) { do_raycast = false; PhysicsDirectSpaceState spaceState = GetWorld().DirectSpaceState; Godot.Collections.Dictionary results = spaceState.IntersectRay(ray_origin, ray_end, null, 256u); if (results.Count > 0) { if (results["collider"] is Spatial spatial) { if (spatial.GetParent() is Scannables scan) { if (current != scan) { if (!scan.WasScanned()) { current = scan; EmitSignal("FoundScannable", current); return; } } return; } } } if (current != null) { current = null; EmitSignal("LostScannables"); } } }
public void FoundScans(Scannables scans) { SetCrossHairColor("00bfff"); }