Exemplo n.º 1
0
        public Commands(MediaElement mediaElement, Body body, Ear ear,
                        Dictionary <Storyboard, int> facesPauseTime, Dictionary <ETinBotFaces, Storyboard> faces,
                        Dictionary <ETinBotToggle, int> toggles)
        {
            MediaElement   = mediaElement;
            FacesPauseTime = facesPauseTime;
            Faces          = faces;
            _body          = body;
            Ear            = ear;
            Toggles        = toggles;

            var voice = SpeechSynthesizer.AllVoices.FirstOrDefault(v => v.DisplayName.Contains("Daniel"));

            Synth.Voice = voice;

            SetupStandByBehaviors();

            ActionRequestArrived += (s, a) => ProcessActionsQueue();

            Ear.ActionRequested += (sender, action) =>
            {
                ExecuteOnMainThread(() => ActionsQueue.Add(action)).Wait();
                ProcessActionsQueue();
            };
        }
Exemplo n.º 2
0
        private static async Task Setup()
        {
            LibTimer   = new Timer(s => SyncActionLibrary(), null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60));
            QueueTimer = new Timer(s => SyncQueue(), null, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(10));
            _settings  = ApplicationData.Current.LocalSettings;

            var result = await ReadSetting <ActionsContainer>("ActionsLib");

            ActionsLib = result ?? new ActionsContainer();
            var rest = ActionsLib["rest"];

            if (rest != null)
            {
                await ExecuteOnMainThread(() => ActionsQueue.Add(ActionsLib["rest"]));
            }
        }
Exemplo n.º 3
0
        private static void SyncQueue()
        {
            if (!ActionsLib.AllActions().Any())
            {
                return;
            }

            try
            {
                var client = new HttpClient();
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.UserAgent.ParseAdd("Chrome/22.0.1229.94");
                //client.DefaultRequestHeaders.Authorization = _authHeader;
                var response = client.GetAsync(ApiQueueUrl, HttpCompletionOption.ResponseContentRead).Result;
                if (response.IsSuccessStatusCode)
                {
                    var result =
                        (List <ActionContainer>)
                        JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result,
                                                      typeof(List <ActionContainer>));


                    foreach (var actionsContainer in result)
                    {
                        var arrived = actionsContainer.GetAction();
                        if (arrived != null)
                        {
                            ExecuteOnMainThread(() => ActionsQueue.Add(arrived)).Wait();
                        }
                    }

                    if (result.Any())
                    {
                        client.DeleteAsync(ApiQueueUrl).Wait();
                    }

                    ActionRequestArrived?.Invoke(null, EventArgs.Empty);
                }
            }
            catch (Exception ex)
            {
                var a = ex;
            }
        }
Exemplo n.º 4
0
        void MoveFirstTicks()
        {
            Action <double, double, double, double> expandSquares = (x, y, dx, dy) =>
            {
                ActionsQueue.Add(env =>
                {
                    var rect = new Rect {
                        X = x, Y = y, X2 = G.MapSize, Y2 = G.MapSize
                    };

                    var groundUnits = env.MyVehicles.Where(u => !u.IsAerial).ToArray();
                    if (groundUnits.All(veh => !rect.ContainsPoint(veh)) || groundUnits.All(veh => rect.ContainsPoint(veh)))
                    {
                        return(e => true);
                    }

                    _selectIfNotSelected(env, new AMove
                    {
                        Action = ActionType.ClearAndSelect,
                        Rect   = rect
                    });

                    MoveQueue.Add(AMovePresets.Move(new Point(dx, dy)));

                    return(env2 =>
                    {
                        return env2.TickIndex > env.TickIndex &&
                        env2.MyVehicles.Where(u => !u.IsAerial).All(u => u.Stopped);
                    });
                });
            };

            var sh = 10;
            var cs = G.CellSize * 2.5;

            if (Const.MixArrvsWithGrounds)
            {
                expandSquares(0, 2 * cs, 0, sh);
                expandSquares(0, cs, 0, sh);
                expandSquares(2 * cs, 0, sh, 0);
                expandSquares(cs, 0, sh, 0);
            }

            ActionsQueue.Add(env =>
            {
                var groups = new[]
                {
                    GroupsManager.StartingFightersGroupId,
                    GroupsManager.StartingHelicoptersGroupId,
                    GroupsManager.StartingTanksGroupId,
                    GroupsManager.StartingIfvsGroupId,
                };
                var groupsLeaders = new[]
                {
                    (VehicleType)0,
                    VehicleType.Fighter,
                    VehicleType.Helicopter,
                    VehicleType.Tank,
                    VehicleType.Ifv,
                    VehicleType.Arrv
                };
                if (!Const.MixArrvsWithGrounds)
                {
                    groups = groups.ConcatSingle(GroupsManager.StartingArrvsGroupId).ToArray();
                }

                foreach (var group in groups)
                {
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(groupsLeaders[group]));
                    MoveQueue.Add(AMovePresets.AssignGroup(group));
                }
                return(e => true);
            });

            ActionsQueue.Add(env =>
            {
                GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingFightersGroupId, VehicleType.Fighter));
                GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingHelicoptersGroupId, VehicleType.Helicopter));

                if (!Const.MixArrvsWithGrounds)
                {
                    GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingArrvsGroupId, VehicleType.Arrv));
                    GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingIfvsGroupId, VehicleType.Ifv));
                    GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingTanksGroupId, VehicleType.Tank));
                    FirstMovesCompleted = true;
                }
                return(e => true);
            });

            if (Const.MixArrvsWithGrounds)
            {
                ActionsQueue.Add(env =>
                {
                    var arrvs = env.GetVehicles(true, VehicleType.Arrv);
                    var tanks = env.GetVehicles(true, VehicleType.Tank);
                    var ifvs  = env.GetVehicles(true, VehicleType.Ifv);

                    var arrvsRect = Utility.BoundingRect(arrvs);
                    var tanksRect = Utility.BoundingRect(tanks);
                    var ifvsRect  = Utility.BoundingRect(ifvs);

                    var d = 1.38;
                    _selectIfNotSelected(env, AMovePresets.ClearAndSelectType(VehicleType.Arrv));
                    MoveQueue.Add(AMovePresets.Scale(arrvsRect.Center, d));

                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Tank));
                    MoveQueue.Add(AMovePresets.Scale(tanksRect.Center, d));

                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Ifv));
                    MoveQueue.Add(AMovePresets.Scale(ifvsRect.Center, d));

                    return(env2 =>
                    {
                        return env2.TickIndex > env.TickIndex + 20 &&
                        env2.MyVehicles.Where(u => !u.IsAerial).All(u => u.Stopped);
                    });
                });

                var shift = 4.02;

                ActionsQueue.Add(env =>
                {
                    _selectIfNotSelected(env, AMovePresets.ClearAndSelectType(VehicleType.Arrv));
                    MoveQueue.Add(AMovePresets.Move(new Point(shift, shift)));

                    return(env2 =>
                    {
                        return env2.TickIndex > env.TickIndex &&
                        env2.GetVehicles(true, VehicleType.Arrv).All(u => u.Stopped);
                    });
                });

                ActionsQueue.Add(env =>
                {
                    var arrvs = env.GetVehicles(true, VehicleType.Arrv);
                    var tanks = env.GetVehicles(true, VehicleType.Tank);
                    var ifvs  = env.GetVehicles(true, VehicleType.Ifv);

                    var arrvsRect = Utility.BoundingRect(arrvs);
                    var tanksRect = Utility.BoundingRect(tanks);
                    var ifvsRect  = Utility.BoundingRect(ifvs);

                    var aVert = arrvsRect.SplitVertically();

                    var topArrvs    = arrvs.Where(x => x.Y <= arrvsRect.Center.Y).Select(x => x.Id).ToArray();
                    var bottomArrvs = arrvs.Where(x => x.Y > arrvsRect.Center.Y).Select(x => x.Id).ToArray();

                    if (Math.Max(aVert[0].Center.GetDistanceTo2(tanksRect.Center),
                                 aVert[1].Center.GetDistanceTo2(ifvsRect.Center))
                        <
                        Math.Max(aVert[1].Center.GetDistanceTo2(tanksRect.Center),
                                 aVert[0].Center.GetDistanceTo2(ifvsRect.Center)))
                    {
                        _tankArrvs = topArrvs;
                        _ifvArrvs  = bottomArrvs;
                    }
                    else
                    {
                        _tankArrvs = bottomArrvs;
                        _ifvArrvs  = topArrvs;
                    }

                    var tankArrvsRect = Utility.BoundingRect(_tankArrvs.Select(id => env.VehicleById[id]));
                    var ifvArrvsRect  = Utility.BoundingRect(_ifvArrvs.Select(id => env.VehicleById[id]));

                    _selectIfNotSelected(env, AMovePresets.ClearAndSelectType(VehicleType.Arrv, tankArrvsRect));
                    MoveQueue.Add(AMovePresets.Move(new Point(tanksRect.Center.X - (tankArrvsRect.Center.X - shift), 0)));
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Arrv, ifvArrvsRect));
                    MoveQueue.Add(AMovePresets.Move(new Point(ifvsRect.Center.X - (ifvArrvsRect.Center.X - shift), 0)));

                    return(env2 =>
                    {
                        return env2.TickIndex > env.TickIndex + 5 &&
                        env2.GetVehicles(true, VehicleType.Arrv).All(u => u.Stopped);
                    });
                });

                ActionsQueue.Add(env =>
                {
                    var tanks = env.GetVehicles(true, VehicleType.Tank);
                    var ifvs  = env.GetVehicles(true, VehicleType.Ifv);

                    var tanksRect = Utility.BoundingRect(tanks);
                    var ifvsRect  = Utility.BoundingRect(ifvs);

                    var tankArrvsRect = Utility.BoundingRect(_tankArrvs.Select(id => env.VehicleById[id]));
                    var ifvArrvsRect  = Utility.BoundingRect(_ifvArrvs.Select(id => env.VehicleById[id]));

                    var proportionI = 0.55;
                    var proportionT = 0.55;

                    if (Math.Abs(ifvsRect.Center.X - tanksRect.Center.X) < 10 &&
                        ifvsRect.Center.GetDistanceTo(tanksRect.Center) < 100)
                    {
                        proportionI = 0.95;
                        proportionT = 0.95;
                    }

                    if (ifvArrvsRect.Center.Y < 30 && ifvArrvsRect.Center.GetDistanceTo(ifvsRect.Center) < 20)
                    {
                        proportionI = 0.95;
                    }
                    if (tankArrvsRect.Center.Y < 30 && tankArrvsRect.Center.GetDistanceTo(tanksRect.Center) < 20)
                    {
                        proportionT = 0.95;
                    }

                    _selectIfNotSelected(env, AMovePresets.ClearAndSelectType(VehicleType.Arrv, ifvArrvsRect));
                    MoveQueue.Add(AMovePresets.Move(new Point(0, (ifvsRect.Center.Y - ifvArrvsRect.Center.Y) * proportionI)));
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Arrv, tankArrvsRect));
                    MoveQueue.Add(AMovePresets.Move(new Point(0, (tanksRect.Center.Y - tankArrvsRect.Center.Y) * proportionT)));
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Ifv));
                    MoveQueue.Add(AMovePresets.Move(new Point(0, -(ifvsRect.Center.Y - ifvArrvsRect.Center.Y) * (1 - proportionI))));
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(VehicleType.Tank));
                    MoveQueue.Add(AMovePresets.Move(new Point(0, -(tanksRect.Center.Y - tankArrvsRect.Center.Y) * (1 - proportionT))));

                    return(env2 =>
                    {
                        return env2.TickIndex > env.TickIndex + 30 &&
                        env2.MyVehicles.Where(u => !u.IsAerial).All(u => u.Stopped);
                    });
                });

                ActionsQueue.Add(env =>
                {
                    // tanks already selected
                    MoveQueue.Add(AMovePresets.ClearAndSelectType(
                                      VehicleType.Arrv,
                                      Utility.BoundingRect(
                                          env.GetVehicles(true, VehicleType.Arrv).Where(x => _tankArrvs.Contains(x.Id)))
                                      ));
                    MoveQueue.Add(AMovePresets.AssignGroup(GroupsManager.StartingTanksGroupId));

                    MoveQueue.Add(AMovePresets.ClearAndSelectType(
                                      VehicleType.Arrv,
                                      Utility.BoundingRect(
                                          env.GetVehicles(true, VehicleType.Arrv).Where(x => _ifvArrvs.Contains(x.Id)))
                                      ));
                    MoveQueue.Add(AMovePresets.AssignGroup(GroupsManager.StartingIfvsGroupId));

                    return(e => true);
                });

                ActionsQueue.Add(env =>
                {
                    FirstMovesCompleted = true;
                    GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingIfvsGroupId, VehicleType.Ifv));
                    GroupsManager.MyGroups.Add(new MyGroup(GroupsManager.StartingTanksGroupId, VehicleType.Tank));
                    return(e => true);
                });
            }
        }