private void dgvFutureList_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e) { try { if (e.StateChanged == DataGridViewElementStates.Selected) { FuturePlan plan = plants.FuturePlans.Where(p => p.NamePlan == e.Cell.Value.ToString()).First(); if (e.Cell.Selected) { setFutureVisible(true); dtpFutureRealiseDate.Value = plan.DateRealise; dgvFuturePunkts.Rows.Clear(); foreach (PunktOfPlan punkt in plan.punktOfPlans) { dgvFuturePunkts.Rows.Add(new object[] { punkt.NumberPunkt, punkt.NamePunkt, punkt.CompleteFlag }); } dgvFuturePunkts.Sort(dgvFuturePunkts.Columns[0], ListSortDirection.Ascending); } else { plan.DateRealise = dtpFutureRealiseDate.Value; plan.punktOfPlans.Clear(); foreach (DataGridViewRow row in dgvFuturePunkts.Rows) { plan.punktOfPlans.Add(new PunktOfPlan(Convert.ToInt32(row.Cells[0].Value), row.Cells[1].Value.ToString(), Convert.ToBoolean(row.Cells[2].Value))); } } } } catch { } }
public float GetHeadingInFuture(float seconds) { //Debug.Log("Getting heading for " + seconds + " in future..."); FuturePlan finalPlan = null; for (int i = 0; i < futurePlans.Count; i++) { if (futurePlans[i].startDelay >= seconds) { break; } else { finalPlan = futurePlans[i]; } } if (finalPlan != null) { //Debug.Log("Plan that we care about has a start delay of " + finalPlan.startDelay); float timeIntoPlan = seconds - finalPlan.startDelay; if (timeIntoPlan >= 0f) { return(finalPlan.linearPlanner.GetValueInFuture(timeIntoPlan)); } } //Debug.Log("Fuckit, just using my current heading"); return(aircraft.CurrentHeadingInDegrees); }
private void tsbFutureDelete_Click(object sender, EventArgs e) { try { DataGridViewCell cell = dgvFutureList.CurrentCell; if (MessageBox.Show($"Вы точно хотите удалить план {cell.Value.ToString()}?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { FuturePlan plan = plants.FuturePlans.Where(p => p.NamePlan == cell.Value.ToString()).First(); plants.FuturePlans.Remove(plan); LoadFuturePlanToForm(); } } catch { } }
// Update is called once per frame void Update() { if (futurePlans.Count == 0) { return; } FuturePlan currentPlan = null; for (int i = 0; i < futurePlans.Count; i++) { if (futurePlans[i].startDelay > 0) { break; } else { currentPlan = futurePlans[i]; } } int numToRemove = futurePlans.IndexOf(currentPlan); if (numToRemove > 0) { Debug.Log("Removing " + numToRemove + " old plans (currently " + futurePlans.Count + ") at heading " + aircraft.CurrentHeadingInDegrees); futurePlans.RemoveRange(0, numToRemove); Debug.Log("Removed! There are now " + futurePlans.Count + " remaining."); } if (currentPlan != null && currentPlan.startDelay <= 0) { currentPlan.linearPlanner.UpdateCurrentValues(Time.deltaTime); aircraft.CurrentHeadingInDegrees = currentPlan.linearPlanner.CurrentValue; } foreach (FuturePlan futurePlan in futurePlans) { if (futurePlan != currentPlan) { futurePlan.startDelay -= Time.deltaTime; } } }
public void AddPlan(float startDelay, float targetHeading) { Debug.Log("Creating plan at " + startDelay + " to go to " + targetHeading); int insertAt = 0; while (insertAt < futurePlans.Count) { float startTime = futurePlans[insertAt].startDelay; if (startTime > startDelay) { break; } else { insertAt++; } } float headingAtInsertTime = GetHeadingInFuture(startDelay); Debug.Log("Will be going at heading " + headingAtInsertTime); LinearPlanner planner = new LinearPlanner(headingAtInsertTime); planner.maxSpeed = aircraft.maxTurnSpeed; planner.acceleration = aircraft.turnAcceleration; planner.TargetValue = targetHeading; FuturePlan newPlan = new FuturePlan(startDelay, planner); newPlan.startHeading = headingAtInsertTime; futurePlans.Insert(insertAt, newPlan); UpdateAllPlans(); }