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; } }
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(); }
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); }
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); }
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); }
// 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); }
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; } }
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; }
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); } }
public void ToggleTargetSelection() { UXStateManager.ToggleTargetSelection(); }
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; }
//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); }