Esempio n. 1
0
 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;
            }
        }
    }
Esempio n. 3
0
        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;
 }