public MainPage(Option option)
        {
            this.InitializeComponent();

            MainCanvas.LayoutUpdated += (sender, args) =>
                {
                    if (!once)
                    {
                        WCFLogger.Info("Application started {0}", DateTime.Now.ToShortDateString());

                        this.MainCanvas.Children.Add(this._fleeEllipse);
                        this._world = new World(MainCanvas);

                        menuControl.World = this._world;

                        this._timer = new GameTimer(this.TimerCallback);

                        MainCanvas.MouseMove += this.MainPage_MouseMove;
                        once = true;

                        var scenario = new SavedScenario();
                        scenario.BoidsNumber = 100;

                        switch (option)
                        {
                            case Option.Custom:
                                break;
                            case Option.Wander:
                                scenario.WorldStatus = WorldStatus.GlobalWander;
                                break;
                            case Option.FCAS:
                                scenario.WorldStatus = WorldStatus.GlobalFCAS;
                                break;
                            case Option.Separater:
                                scenario.WorldStatus = WorldStatus.GlobalSeparate;
                                break;
                            case Option.Cohesion:
                                scenario.WorldStatus = WorldStatus.GlobalCohesion;
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("option");
                        }

                        ApplyScenario(scenario);
                    }
                    else
                    {
                        _world.WorldHeight = MainCanvas.ActualHeight;
                        _world.WorldWidth = MainCanvas.ActualWidth;
                    }
                };
        }
        public void ApplyScenario(SavedScenario scenario)
        {
            World.BoidList.Clear();

            World.WorldStatus = scenario.WorldStatus;

            for (int i = 0; i < scenario.BoidsNumber; i++)
            {
                var newBoid = World.CreateBoid();
                newBoid.Action = new BoidActionWander();
                World.Map.Children.Add(new BoidControl(newBoid));
            }
        }
        public static long Save(SavedScenario scenario)
        {
            var redisManager = RedisDal.GetClient();

            redisManager.ExecAs<SavedScenario>(redisProject =>
            {
                if (scenario.Id <= 0)
                {
                    scenario.Id = redisProject.GetNextSequence();
                }
                redisProject.Store(scenario);
            });

            return scenario.Id;
        }
        private void btnSaveScenario_Click(object sender, RoutedEventArgs e)
        {
            var savedScenario = new SavedScenario();
            savedScenario.BoidsNumber = World.BoidList.Count;
            savedScenario.WorldStatus = World.WorldStatus;

            var client = new DalService.RedisDalServiceClient();
            client.SaveScenarioAsync(savedScenario);
        }
 public void SaveScenario(SavedScenario scenario)
 {
     RedisDal.ScenarioRepository.Save(scenario);
 }
        public void ApplyScenario(SavedScenario scenario)
        {
            _world.BoidList.Clear();

            _world.WorldStatus = scenario.WorldStatus;

            for (int i = 0; i < scenario.BoidsNumber; i++)
            {
                var newBoid = _world.CreateBoid();

                _world.Map.Children.Add(new BoidControl(newBoid));
            }

            _world.SetGlobalAction(WorldStatus.GlobalWander);
            this._world.Go(this._mousePosition);
            _world.SetGlobalAction(scenario.WorldStatus);
        }