public GWI_Detection(float angle0, float waveAmplitude0, GravitySignature signature0, string destination0 = "") { angle = angle0; waveAmplitude = waveAmplitude0; signature = signature0; warpGateDestination = destination0; }
/// <summary> /// Long range sensor detection of WarpGates and LargeBodies /// </summary> public void GeneratePassiveSensorReadings() { PassiveReadings.Clear(); var overlaps = GetOverlappingAreas(); foreach (Area2D area in overlaps) { ulong ID = area.GetInstanceId(); switch (area) { case WarpGate warpGate: { Vector2 randomInsideCircle = new Vector2(random.RandfRange(-1f, 1f), random.RandfRange(-1f, 1f)).Normalized(); Vector2 noiseOffset = randomInsideCircle * InterferenceScale; Vector2 positionDiff = (warpGate.GlobalPosition + noiseOffset) - GlobalPosition; //float angle = GetAngleTo(warpGate.GlobalPosition + noiseOffset); float angle = Vector2.Right.AngleTo(positionDiff); float waveAmplitude = GConstant / positionDiff.Length(); PassiveReadings.Add(new PassiveSensorReading(ID, angle, /*waveAmplitude,*/ GravitySignature.WarpGate /*, warpGate.DestinationSolarSystemName*/)); } break; case LargeBody largeBody: { Vector2 randomInsideCircle = new Vector2(random.RandfRange(-1f, 1f), random.RandfRange(-1f, 1f)).Normalized(); Vector2 noiseOffset = randomInsideCircle * InterferenceScale; Vector2 noisyVectorToBody = (largeBody.GlobalPosition + noiseOffset) - GlobalPosition; float angle = Vector2.Right.AngleTo(noisyVectorToBody); float waveAmplitude = GConstant / noisyVectorToBody.Length(); GravitySignature signature = largeBody.GravitySignature; PassiveReadings.Add(new PassiveSensorReading(ID, angle, /*waveAmplitude,*/ signature)); } break; } } }
public void GenerateGWIData() { WarpGatesParent = GameObject.FindGameObjectWithTag("WarpGates"); LBodiesParent = GameObject.FindGameObjectWithTag("LargeBodies"); if (WarpGatesParent != null) { foreach (Transform warpGate in WarpGatesParent.transform) { Vector3 noiseOffset = Random.insideUnitCircle * gameCore.GWIInterferenceScale; Vector3 positionDiff = (warpGate.transform.position + noiseOffset) - transform.position; //float angle = Mathf.Atan2(positionDiff.y, positionDiff.x); float angle = Vector3.SignedAngle(Vector3.right, positionDiff, Vector3.forward); float waveAmplitude = ShipSensors.GConstant / positionDiff.magnitude; WarpGate gate = warpGate.GetComponent <WarpGate>(); GalaxyMapNode destinationNode = galaxyMap.FindDestinationNodeForWarpGate(gate); string destinationNodeName = "Unknown"; if (destinationNode != null) { destinationNodeName = destinationNode.name; } GWInterferometer.Add(new GWI_Detection(angle, waveAmplitude, GravitySignature.WarpGate, destinationNodeName)); } } if (LBodiesParent != null) { foreach (Transform largeBody in LBodiesParent.transform) { Vector3 noiseOffset = Random.insideUnitCircle * gameCore.GWIInterferenceScale; Vector3 positionDiff = (largeBody.transform.position + noiseOffset) - transform.position; //float angle = Mathf.Atan2(positionDiff.y, positionDiff.x); float angle = Vector3.SignedAngle(Vector3.right, positionDiff, Vector3.forward); float waveAmplitude = ShipSensors.GConstant / positionDiff.magnitude; GravitySignature signature = largeBody.GetComponent <SpaceObject>().gravitySignature; GWInterferometer.Add(new GWI_Detection(angle, waveAmplitude, signature)); } } }
public PassiveSensorReading(ulong contactID, float angle, GravitySignature signature) { ContactID = contactID; Heading = angle; Signature = signature; }
public WarpStruct(Vector2 vect, GravitySignature signature, String dest) { this.warpDest = dest; this.vector = vect; finalSignature = signature; }