internal override void Display() { if (IsActive) { ImVec2 size = new ImVec2(200, 100); ImVec2 pos = new ImVec2(_state.MainWinSize.x / 2 - size.x / 2, _state.MainWinSize.y / 2 - size.y / 2); ImGui.SetNextWindowSize(size, ImGuiCond.FirstUseEver); ImGui.SetNextWindowPos(pos, ImGuiCond.FirstUseEver); if (ImGui.Begin(_displayText, ref IsActive, _flags)) { ImGui.SetTooltip(_tooltipText); ImGui.Text("Target: "); ImGui.SameLine(); ImGui.Text(TargetEntity.Name); ImGui.Text("Apoapsis: "); ImGui.SameLine(); ImGui.Text(_apoapsisKm.ToString("g3") + " (Alt: " + _apAlt.ToString("g3") + ")"); ImGui.Text("Periapsis: "); ImGui.SameLine(); ImGui.Text(_periapsisKM.ToString("g3") + " (Alt: " + _peAlt.ToString("g3") + ")"); ImGui.Text("OrbitalVelocity: "); ImGui.SameLine(); ImGui.Text(_PreciseOrbitalSpeedKm_s.ToString()); if (ImGui.Button("Action Order")) { fsm[(byte)CurrentState, (byte)Events.ClickedAction].Invoke(); } if (_smMode) { ImGui.SameLine(); if (ImGui.Button("Add OrbitDB")) { ActionAddDB(); } } if (_orbitWidget != null) { switch (CurrentState) { case States.NeedsEntity: break; case States.NeedsTarget: break; case States.NeedsInsertionPoint: { var mousePos = ImGui.GetMousePos(); var mouseWorldPos = _state.Camera.MouseWorldCoordinate(); _targetInsertionPoint_AU = (mouseWorldPos - GetTargetPosition()); //var intercept = InterceptCalcs.GetInterceptPosition(OrderingEntity.Entity, TargetEntity.Entity.GetDataBlob<OrbitDB>(), TargetEntity.Entity.Manager.ManagerSubpulses.SystemLocalDateTime); //var distanceAU = (GetTargetPosition() - mouseWorldPos).Length(); //var distanceSelectedKM = Distance.AuToKm(distanceAU); //var d1 = Math.Min(_apMax, distanceSelectedKM); //can't be higher than SOI //_apoapsisKm = Math.Max(d1, _peMin); //cant be lower than the body radius //_moveWidget.SetArrivalRadius(distanceAU); _moveWidget.SetArrivalPosition(_targetInsertionPoint_AU); var massCurrBody = OrderingEntity.Entity.GetDataBlob <OrbitDB>().Parent.GetDataBlob <MassVolumeDB>().Mass; var massTargetBody = TargetEntity.Entity.GetDataBlob <MassVolumeDB>().Mass; var mymass = OrderingEntity.Entity.GetDataBlob <MassVolumeDB>().Mass; var ralPosCBAU = OrderingEntity.Entity.GetDataBlob <PositionDB>().RelativePosition_AU; var smaCurrOrbtAU = OrderingEntity.Entity.GetDataBlob <OrbitDB>().SemiMajorAxis; var sgpCBAU = GameConstants.Science.GravitationalConstant * (massCurrBody + mymass) / 3.347928976e33; // (149597870700 * 149597870700 * 149597870700); var velAU = OrbitProcessor.PreciseOrbitalVector(sgpCBAU, ralPosCBAU, smaCurrOrbtAU); var sgpTBAU = GameConstants.Science.GravitationalConstant * (massTargetBody + mymass) / 3.347928976e33; var ke = OrbitMath.KeplerFromVelocityAndPosition(sgpTBAU, _targetInsertionPoint_AU, velAU); _PreciseOrbitalSpeedKm_s = Distance.AuToKm(velAU.Length()); _orbitWidget.SetParametersFromKeplerElements(ke, _targetInsertionPoint_AU); _apoapsisKm = Distance.AuToKm(ke.Apoapsis); _periapsisKM = Distance.AuToKm(ke.Periapsis); break; } /* * case States.NeedsSecondApsis: * { * TODO: when we've got newtonion engines, allow second apsis choise and expend Dv. * var mousePos = ImGui.GetMousePos(); * * var mouseWorldPos = _state.Camera.MouseWorldCoordinate(); * * var ralitivePos = (GetTargetPosition() - mouseWorldPos); * _orbitWidget.SetPeriapsis(ralitivePos.X, ralitivePos.Y); * * //_periapsisKM = Distance.AuToKm((GetTargetPosition() - mouseWorldPos).Length()); * var distanceSelected = Distance.AuToKm((GetTargetPosition() - mouseWorldPos).Length()); * var d1 = Math.Max(_peMin, distanceSelected); //can't be lower than body radius * _periapsisKM = Math.Min(d1, _apoapsisKm); //can't be higher than apoapsis. * * break; * }*/ case States.NeedsActioning: break; default: break; } } ImGui.End(); } } }