private void DoTriggerPressed(object sender, ControllerInteractionEventArgs e)
    {
        DebugLogger(e.controllerIndex, "TRIGGER", "pressed", e);
        ;

        if (false)//leftController == null)
        {
            PorkChopPlot.triggerPork = true;

            double   time      = 30d;
            var      thisodata = UXStateManager.GetSource().GetComponent <OrbitData>();
            Vector3d r1        = thisodata.getR();

            var oe2  = UXStateManager.GetTarget().GetComponent <OrbitData>().GetOE();
            var tra2 = OrbitalTools.Program.anomalyAfterTime(OrbitData.parentGM, oe2, time);
            oe2.tra = tra2;
            Vector3d r2 = OrbitalTools.Util.oe2rd(OrbitData.parentGM, oe2);

            Vector3d initVel, finalVel;
            LambertSolver.Solve(r1, r2, time, OrbitData.parentGM, true, out initVel, out finalVel);

            thisodata.rv[3] = initVel.x;
            thisodata.rv[4] = initVel.y;
            thisodata.rv[5] = initVel.z;
        }
    }
示例#2
0
    public GameObject FireMissile()
    {
        Debug.Log("Fire missile");
        var newMissile = Instantiate(_missile);

        //set rot and pos to gun
        newMissile.SetActive(true);
        newMissile.transform.position = _gun.transform.position;
        newMissile.transform.rotation = _gun.transform.rotation;
        //give speed
        var upGain      = Random.Range(-1.0f, 1f);
        var rightGain   = Random.Range(-1f, 1f);
        var forwardGain = Random.Range(1f, 3f);
        var velocity    = _gun.transform.forward * forwardGain
                          + _gun.transform.up * upGain
                          + _gun.transform.right * rightGain;

        newMissile.GetComponent <Rigidbody>().velocity = velocity.normalized * 3;
        //sound!
        //set die time
        var missileLogic = newMissile.GetComponent <MissileLogic>();

        missileLogic.BornTime     = Time.time;
        missileLogic.DieAfterTime = 30;
        missileLogic.enabled      = true;
        missileLogic.target       = UXStateManager.GetTarget();
        CameraFollow(newMissile);
        return(newMissile);
    }
    public override void StartUsing(GameObject currentUsingObject)
    {
        base.StartUsing(currentUsingObject);

        Debug.Log(name + "selected!");
        UXStateManager.SelectUnit(gameObject);
    }
 public override void StopUsing(GameObject previousUsingObject)
 {
     base.StopUsing(previousUsingObject);
     debugToolTip.triggerText        = "cleared!";
     debugToolTip.triggerInitialised = false;
     UXStateManager.ClearSource();
     triggerObj.SetActive(false);
 }
 void simpleMove()
 {
     if (DataStore.simpleMovement && line.enabled)
     {
         //take userSelection and move to destination on trigger release
         //draw line from userSelection.transform.position to transform.position
         line.SetPosition(0, UXStateManager.GetSource().transform.position);
         line.SetPosition(1, transform.position);
     }
 }
 public GameObject focus;                     //this is the source of the transform
 //assume UXManager.GetSource is the focus
 // Use this for initialization
 void Start()
 {
     rMaxSqr = rMax * rMax;
     rMinSqr = rMin * rMin;
     transform.localScale = new Vector3(EarthRadius, EarthRadius, EarthRadius);
     if (focus != null)
     {
         Debug.Log("focus: " + focus.name);
         UXStateManager.SelectUnit(focus);
     }
 }
    void GetRealScale()
    {
        var focus = UXStateManager.GetSource();

        if (focus == null)
        {
            return;
        }
        var focusPos = focus.GetComponent <OrbitData>().getRFloat();

        transform.position = -focusPos;
    }
 // Update is called once per frame
 void Update()
 {
     if (UXStateManager.getUXState() == UXStates.IDLE)
     {
         var menu = GetComponent <RadialMenu>();
         menu.ShowMenu();
     }
     else if (UXStateManager.getUXState() == UXStates.HIDDEN)
     {
         var menu = GetComponent <RadialMenu>();
         menu.HideMenu(true);
     }
 }
    // Update is called once per frame
    void Update()
    {
        var go = UXStateManager.GetSource();

        if (go == null)
        {
            return;
        }
        var speed    = go.GetComponent <OrbitData>().getVel().magnitude;
        var strSpeed = OVTools.FormatDistance(speed) + "/s";

        indicator.displayText = go.name + ": " + strSpeed;
        indicator.Reset();
    }
示例#10
0
    bool GetOEs() //returns true valid src/tgt
    {
        var src = UXStateManager.GetSource();
        var tgt = UXStateManager.GetTarget();

        if (src == null || tgt == null)
        {
            Debug.Log("Something's not right, can't run prokchop: src: " + src + " tgt: " + tgt);
            return(false);
        }
        oe1 = src.GetComponent <OrbitData>().GetOE();
        oe2 = tgt.GetComponent <OrbitData>().GetOE();
        return(true);
    }
示例#11
0
    float GetAvailableDV()
    {
        var src = UXStateManager.GetSource();

        if (src == null)
        {
            Debug.Log("null src!");
            return(-1);
        }
        InteractableShip iship = src.GetComponent <InteractableShip>();
        GameObject       fs    = iship.functionalShip;

        return(fs.GetComponent <FunctionalShip>().GetDV());
        //return .5f;
    }
 void UnselectedState()
 {
     if (target == UXStateManager.GetTarget())
     {
         NextState = SelectedState;
         selectedIconSR.enabled = true;
         Debug.Log("state: selected");
     }
     else
     {
         //steady state for unselected
         lockedIconSR.enabled   = false;
         selectedIconSR.enabled = false;
     }
 }
 void TargetLockFSM()
 {
     if (NextState == EndState)
     {
         return;
     }
     if (target == null)
     {
         NextState = GoneState;
     }
     else if (target != UXStateManager.GetTarget())
     {
         NextState = UnselectedState;
     }
     NextState();
 }
    // Update is called once per frame
    void Update()
    {
        var userSelection = UXStateManager.GetSource();

        if (userSelection == null)
        {
            return;
        }

        var speed = userSelection.GetComponent <OrbitData>().getVel();

        link.displayText = prependText + speed.magnitude.ToString();
        link.Reset();
        //transform.LookAt(camera.transform, Vector3.up);
        transform.LookAt(camera.transform);
    }
示例#15
0
    public void TriggerIntercept()
    {
        if (mStartTime + mComputeTime <= eventManager.GetSimTime())
        {
            Debug.Log("Error: Intercept injection in the past");
            return;
        }
        Debug.Log("Trigger intercept event");
        var src = UXStateManager.GetSource();
        var tgt = UXStateManager.GetTarget();

        Debug.Log("InjVec: " + mInjectionVector.ToString());
        var e = new ManeuverEvent(src, tgt,
                                  (float)(mStartTime + mComputeTime), (float)mTravelTime,
                                  "intercepts", mInjectionVector);

        //Events.instance.Queue(e); //deprecated, should be made illegal
        eventManager.Queue(e);
    }
示例#16
0
 // Use this for initialization
 void Start()
 {
     lastTime = Time.time;
     Initialize();
     targets = GameObject.FindGameObjectsWithTag("ship");
     foreach (var target in targets)
     {
         Debug.Log("found target: " + target.name + " dist: " + target.transform.position.magnitude);
         UXStateManager.AddTarget(target);
         var temp = Instantiate(targetIndicatorPrefab);
         temp.SetActive(true);
         temp.transform.parent = transform; //camera.transform
         temp.GetComponent <TargetIndicatorLogic>().target = target;
         stis.Add(temp);
     }
     angles = new float[targets.Length];
     //get list of targetable gameobjects
     Debug.Log("num targets: " + targets.Length);
 }
示例#17
0
    public void prepFindIntercept()
    {
        var src = UXStateManager.GetSource();
        var tgt = UXStateManager.GetTarget();

        if (src == null || tgt == null)
        {
            Debug.Log("src and tgt must be set!");
            return;
        }
        //show markers on closest approach
        var od1 = src.GetComponent <OrbitData>();
        var oe1 = Util.rv2oe(OrbitData.parentGM, od1.rv);

        var od2 = tgt.GetComponent <OrbitData>();
        var oe2 = Util.rv2oe(OrbitData.parentGM, od2.rv);

        findInterceptPoints(oe1, oe2);
    }
    void OAccelerate()
    {
        if (line.enabled && UXStateManager.GetSource() != null)
        {
            line.SetPosition(0, originPos);
            line.SetPosition(1, transform.position);

            Vector3 velVector = transform.position - originPos;

            //velVector is the apparent vector, but we want the real vector before world rotation, so we'll need to rotate back apparent vector to get real vector
            var antiWorldRotation = Quaternion.AngleAxis(-totalAngle, Vector3.up);
            velVector  = antiWorldRotation * velVector;
            velVector *= 3f;
            var odata = UXStateManager.GetSource().GetComponent <OrbitData>();
            odata.params_[4] = (double)velVector.x;
            odata.params_[5] = (double)velVector.y;
            odata.params_[6] = (double)velVector.z;
        }
    }
示例#19
0
    void Thrust(float amount)
    {
        //amount [0,1]
        //add velocity to forward vector
        //update OE
        var playerShip = UXStateManager.GetSource();

        if (playerShip == null)
        {
            return;
        }
        var acceleration = amount * 6f;
        var addedVel     = acceleration * Time.deltaTime * _ship.transform.forward; //TODO use simulation delta time instead, or fixed time?

        playerShip.GetComponent <OrbitData>().AdjustOrbit(addedVel);
        localVel += addedVel;

        var shipSpeed = playerShip.GetComponent <OrbitData>().getVel().magnitude;

        Debug.Log("player ship speed: " + shipSpeed);
    }
    void InitialState() //assumes prev target was destroyed and is coming from EndState
    {
        //squareIconSR.enabled = true; this is determined by squareIcon function
        sphericalIconSR.enabled     = true;
        sphericalIconBaseSR.enabled = true;
        sphericalIconLR.enabled     = true;

        var isSelected = (target == UXStateManager.GetTarget());

        if (isSelected)
        {
            NextState = SelectedState;
        }
        else
        {
            NextState = UnselectedState;
        }

        selectedIconSR.enabled = isSelected;
        lockedIconSR.enabled   = isSelected;
    }
示例#21
0
    public void SelectNextTarget()
    {
        //sort targets by distance
        //get currently selected target
        var        target     = UXStateManager.GetTarget();
        GameObject nextTarget = target;

        if (target != null)
        {
            nextTarget = FindClosestTarget(target, target.transform.position.magnitude);
        }
        if (target == null || target == nextTarget)
        {
            //pick closest target
            var unit = FindClosestTarget();
            UXStateManager.SelectTarget(unit);
        }
        else
        {
            //pick next closest target
            UXStateManager.SelectTarget(nextTarget);
        }
    }
    void GetApparentScale()
    {
        //need to get distance to focus
        focus = UXStateManager.GetSource();
        if (focus == null)
        {
            return;
        }
        var focusPos = focus.GetComponent <OrbitData>().getRFloat();
        var newDist  = ConvertToRenderSpace(focusPos);

        transform.position = -focusPos.normalized * newDist;

        //get scale of earth at distance
        var actualDist = focusPos.magnitude;
        var frac       = newDist / actualDist;
        var scale      = frac * EarthRadius;

        transform.localScale = Vector3.one * scale;
        if (false)//DelayBy(delay))
        {
            Debug.Log("actualDist: " + actualDist + " frac: " + frac + " newDist: " + newDist + " scale: " + scale);
        }
    }
示例#23
0
 public void ToggleTargetSelection()
 {
     UXStateManager.ToggleTargetSelection();
 }
示例#24
0
    void FixedUpdate()
    {
        //FIXME depends on ship tag
        return;

        float scale = lineScale * holo.GetComponent <RenderScale>().realScale;

        foreach (var line in lines)
        {
            line.SetWidth(scale, scale);
        }
        int count = 0;

        foreach (GameObject ship in GameObject.FindGameObjectsWithTag("ship"))
        {
            if (count >= lines.Count)
            {
                Debug.Log("More ships than there are orbit renderers!");
                AddOrbitRenderer(ship);
            }
            if (ship == null)
            {
                Debug.Log("ship is null!");
            }
            var odata = ship.GetComponent <OrbitData>();

            if (odata == null)
            {
                Debug.Log("no orbital data from ship!!");
            }
            //calculate next step
            if (odata.params_[4] != 0)
            {
                Debug.Log("acceleration detected!");
            }

            var  simdeltatime = HoloManager.SimTimeScale * Time.fixedDeltaTime;
            bool integration  = false;
            if (integration)
            {
                odata.rv = Util.rungeKutta4(0, simdeltatime, odata.rv, odata.params_);

                odata.params_[4] = 0;
                odata.params_[5] = 0;
                odata.params_[6] = 0;

                odata.SetOE(Util.rv2oe(OrbitData.parentGM, odata.rv));
            }
            else
            {
                Vector3d r1, v1;
                //var newOE = Util.rv2oe(OrbitData.parentGM, odata.rv);
                FindRV(odata.GetOE(), eventManager.GetSimTime() - odata.GetOETime(), out r1, out v1);
                odata.rv = Util.convertToRv(ref r1, ref v1);
            }

            var oe = odata.GetOE();
            DrawOrbit(lines[count], ref oe);

            if (first)
            {
                var period = oe.GetPeriod();
                oe.print();
                Debug.Log("alt: " + OVTools.FormatDistance((float)odata.getR().magnitude)
                          + " Period: " + OVTools.FormatTime((float)period));
            }

            //draw icons for selected orbits
            if (ship == UXStateManager.GetSource())
            {
                var iconApo = GameObject.Find("iconApo");
                iconApo.transform.localPosition = apo;
                var iconPeri = GameObject.Find("iconPeri");
                iconPeri.transform.localPosition = peri;
            }
            count++;
        }
        first = false;
    }
示例#25
0
    //times are relative
    bool PlotTrajectory(double relStartTime, double relTravelTime)
    {
        //if (!GetOEs()) { return false; } //now OEs are at current time

        var curStartTime = 0; //relStartTime + mComputeTime - eventManager.GetSimTime(); //relative to now

        Debug.Log(            //"curStartTime: " + OVTools.FormatTime((float)curStartTime)
            " startTime: " + OVTools.FormatTime((float)relStartTime)
            + " travelTime: " + OVTools.FormatTime((float)relTravelTime));
        Debug.Log("injection time: " + (relStartTime + mComputeTime).ToString());
        //recompute trajectory w/ those times
        Vector3d initVel, finalVel;
        Vector3d r1, v1;
        Vector3d r2, v2;

        FindVel(relStartTime + mComputeTime, relTravelTime, out initVel, out finalVel,
                out r1, out r2, out v1, out v2);

        OVDebug.projectedR1 = r1;
        Debug.Log("Injection pos: " + r1.ToString());
        mInjectionVector = initVel;// - v1;
        var rendezvousVector = finalVel - v2;

        //convert initial velocity to oe
        VectorD rv          = Util.convertToRv(ref r1, ref initVel);
        var     interceptOE = Util.rv2oe(OrbitData.parentGM, rv);
        //initialize/update maneuver node/orbit w/ oe
        ////tests/////////////////////////
        //testMarker("Marker1-2", startTime);
        //testMarker("Marker1-3", curStartTime + mComputeTime);
        // testMarker("Marker1-4", eventManager.GetSimTime());
        // testMarker("Marker1-5", startTime - eventManager.GetSimTime());

        var marker1 = GameObject.Find("Marker1");

        marker1.transform.localPosition = r1.ToFloat() * HoloManager.SimZoomScale;
        var marker2 = GameObject.Find("Marker2");

        marker2.transform.localPosition = r2.ToFloat() * HoloManager.SimZoomScale;
        var orbitManager = GameObject.Find("OrbitManager").GetComponent <Orbit>();

        orbitManager.updateInterceptLine(ref interceptOE, true);


        //display required deltaV for intercept
        //TODO based on mode: display required deltaV for rendezvous
        var tooltip = trajectoryDeltaVTooltip.GetComponent <Tooltip>();

        tooltip.displayText = "Req dV: " + OVTools.FormatDistance((float)(initVel - v1).magnitude);//.ToString("G2");
        tooltip.Reset();
        tooltip             = shipDeltaVTooltip.GetComponent <Tooltip>();
        tooltip.displayText = "Ship dV: " + OVTools.FormatDistance(UXStateManager.GetSource().GetComponent <OrbitData>().GetDV());//.ToString("G4");
        tooltip.Reset();

        //display start time/travel time
        tooltip             = startTimeTooltip.GetComponent <Tooltip>();
        tooltip.displayText = "Start Time: " + OVTools.FormatTime((float)(relStartTime + mComputeTime));//.ToString("G4");
        //tooltip.displayText = "Start Time: " + OVTools.FormatTime((float)curStartTime);//.ToString("G4");
        tooltip.Reset();
        tooltip             = durationTooltip.GetComponent <Tooltip>();
        tooltip.displayText = "Duration: " + OVTools.FormatTime((float)relTravelTime);//.ToString("G4");
        tooltip.Reset();

        //set scrollers
        var localPos = startTimeIndicator.transform.localPosition;

        localPos.x = time2coord(relStartTime);
        startTimeIndicator.transform.localPosition = localPos;
        //
        localPos   = travelTimeIndicator.transform.localPosition;
        localPos.y = time2coord(relTravelTime);
        travelTimeIndicator.transform.localPosition = localPos;
        //display time of arrival at intersect point
        //display start time at injection point
        return(true);
    }