コード例 #1
0
        private static List <Action> SelectAndAssignVehicles(MyFormation formation,
                                                             Func <double> left, Func <double> top, Func <double> right, Func <double> bottom, int groupIndex)
        {
            var selectAction = new Action
            {
                ActionType = ActionType.ClearAndSelect,
                GetLeft    = left,
                GetTop     = top,
                GetRight   = right,
                GetBottom  = bottom,
            };

            selectAction.Callback = () =>
            {
                var rect = new Rect(left(), top(), right(), bottom());

                foreach (var keyVal in Global.MyVehicles)
                {
                    if (keyVal.Value.IsInside(rect))
                    {
                        formation.Vehicles.Add(keyVal.Key, keyVal.Value);
                    }
                }

                formation.Update();

                selectAction.Status = ActionStatus.Finished;
            };

            var assignAction = new Action
            {
                ActionType = ActionType.Assign,
                Group      = groupIndex,
                //     IsUrgent = true
            };

            assignAction.Callback = () =>
            {
                formation.Alive     = true;
                assignAction.Status = ActionStatus.Finished;
            };

            return(new List <Action> {
                selectAction, assignAction
            });
        }
コード例 #2
0
        public static FormationResult CreateMyFormation(MyFormation f1, MyFormation f2)
        {
            var center    = (f1.Rect.Center + f2.Rect.Center) / 2;
            var formation = new MyFormation
            {
                GroupIndex = GetMyFreeFormationIndex(),
                Alive      = false,
                Type       = f1.Type
            };

            Global.ActionQueue.AbortOldActionsFor(f1);
            Global.ActionQueue.AbortOldActionsFor(f2);


            var select1 = f1.GetSelectionAction();

            select1.Priority = ActionPriority.High;
            var select2 = f2.GetSelectionAction();

            select2.ActionType = ActionType.AddToSelection;
            select2.Priority   = ActionPriority.High;

            foreach (var vehicle in f1.Vehicles)
            {
                formation.Vehicles.Add(vehicle.Key, vehicle.Value);
            }
            foreach (var vehicle in f2.Vehicles)
            {
                formation.Vehicles.Add(vehicle.Key, vehicle.Value);
            }

            var assign = new Action
            {
                ActionType = ActionType.Assign,
                Group      = formation.GroupIndex,
                Priority   = ActionPriority.High
            };

            assign.Callback = () =>
            {
                formation.Update();
                formation.Alive = true;
                assign.Status   = ActionStatus.Finished;
            };

            Global.MyFormations.Remove(f1.GroupIndex);
            Global.MyFormations.Remove(f2.GroupIndex);
            Global.MyFormations.Add(formation.GroupIndex, formation);
            var scale1 = formation.ScalePoint(center, 0.1);

            scale1.Priority = ActionPriority.High;
            var scale2 = formation.ScalePoint(center, 1.1);

            scale2.Priority = ActionPriority.High;

            return(new FormationResult
            {
                Formation = formation,
                GroupIndex = formation.GroupIndex,
                ActionList = new List <Action> {
                    select1, select2, assign, scale1, scale2
                }
            });
        }