Plane.FormationCreator/Plane.FormationCreator/Formation/CopterManager.cs
pxzleo 7e04c83e26 1.飞机按编号顺序加入飞行列表
2.默认起飞高度为15米
3.修改航点位置改为按住左shift再按下asdw,不按shift则是控制移动飞机
4.修复上下旋转的高度bug
5.为防止碰撞,加入两个按钮,一个为自动计算高度(未实现),一个为自动设为前一步高度,这样一个图案应该有三个同样形状的飞行任务,一个进入(高度不同)一个表演,一个退出(高度不同)
2017-03-17 23:02:08 +08:00

126 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Plane.Copters;
using GalaSoft.MvvmLight;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Plane.FormationCreator.Formation
{
public class CopterCollection : ObservableCollection<ICopter>
{
/// <summary>
/// 实现排序插入
/// </summary>
/// <param name="baseSemObjects"></param>
public int AddCopter(ICopter entityObject)
{
int _index = 0;
if (this.Count == 0)
{
Add(entityObject);
_index = 0;
}
else
{
bool isInsret = false;
for (int i = 0; i < this.Count; i++)
{
if (String.Compare(this[i].Name, entityObject.Name, false) >= 0)
{
InsertItem(i, entityObject);
isInsret = true;
_index= i;
break;
}
}
if (!isInsret)
{
Add(entityObject);
_index = this.Count()-1 ;
}
}
return _index;
}
}
public class CopterManager : ObservableObject
{
public CopterManager()
{
AppEx.Current.AppModeChanged += (sender, e) =>
{
RaisePropertyChanged(nameof(Copters));
};
App.Current.Exit += (sender, e) =>
{
Task.WhenAll(Copters.Select(c => c.DisconnectAsync()));
};
}
public CopterCollection Copters { get;} = new CopterCollection();
public ArrayList CopterStatus = new ArrayList();
//public ObservableCollection<ICopter> Copters
//{
// get
// {
// switch (AppEx.Instance.CurrentMode)
// {
// case AppMode.ControllingCopters:
// default:
// return CoptersForControlling;
// case AppMode.PreparedForRunningTasks:
// case AppMode.ModifyingTask:
// return CoptersForModifyingTask;
// case AppMode.RunningTasks:
// throw new NotImplementedException();
// }
// }
//}
public IEnumerable<ICopter> SelectedCopters { get { return _selectedCoptersGetter().Cast<ICopter>(); } }
/// <summary>
/// 注意:为避免多线程操作出问题,每次使用此属性时都会新建一个 List
/// </summary>
public IEnumerable<ICopter> AcceptingControlCopters { get { return SelectedCopters.ToList(); } }
private Func<IList> _selectedCoptersGetter;
private Action<ICopter> _selectCopterAction;
public void SetSelectionDelegates(Func<IList> selectedCoptersGetter, Action<ICopter> selectCopterAction)
{
_selectedCoptersGetter = selectedCoptersGetter;
_selectCopterAction = selectCopterAction;
}
public event EventHandler<SelectedCoptersChangedEventArgs> SelectedCoptersChanged;
public void RaiseSelectedCoptersChanged(IEnumerable<ICopter> addedCopters, IEnumerable<ICopter> removedCopters)
{
SelectedCoptersChanged?.Invoke(this, new SelectedCoptersChangedEventArgs { AddedCopters = addedCopters, RemovedCopters = removedCopters });
}
public void Select(ICopter copter)
{
_selectCopterAction(copter);
}
}
public class SelectedCoptersChangedEventArgs : EventArgs
{
public IEnumerable<ICopter> AddedCopters { get; set; }
public IEnumerable<ICopter> RemovedCopters { get; set; }
}
}