public VideoDisplayWindow(IMission mission, IDeployment deployment)
        {
            InitializeComponent();

            Mission = mission;
            Deployment = deployment;
            Title = String.Format("Video - {0} > {1}", mission.Name, deployment.DateTime.ToString());

            var app = Application.Current as App;
            if (app == null)
            {
                throw new Exception("Something has gone arye!");
            }

            triggerStateChangedHandler = new TriggerStateChangedHandler(ControllerTriggerStateChanged);
            buttonStateChangedHandler = new ButtonStateChangedHandler(ControllerButtonStateChanged);

            deviceManager = (Application.Current as App).DeviceManager;
            if (deployment.Devices.Count > 0)
            {
                deviceManager.ActiveDevice = deployment.Devices[0];
                deviceManager.ActiveDevice.MessageReceived += new DeviceMessageHandler(ActiveDeviceMessageReceived);
            }

            headsUpDisplay.YawOffset = Settings.Default.YawOffset;
            this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new DispatcherOperationCallback(delegate
            {
                if (deployment.Devices.Count > 0)
                {
                    IDevice device = deployment.Devices[0];
                    device.FrameReady += DeviceFrameReady;
                    device.Open();
                    try
                    {
                        IDevice activeDevice = deviceManager.ActiveDevice;
                        deviceManager.ActiveDevice.StartVideoCapture(1000);
                        activeDevice.FinRange = Settings.Default.FinRange;
                        activeDevice.TopFinOffset = Settings.Default.TopFinOffset;
                        activeDevice.RightFinOffset = Settings.Default.RightFinOffset;
                        activeDevice.BottomFinOffset = Settings.Default.BottomFinOffset;
                        activeDevice.LeftFinOffset = Settings.Default.LeftFinOffset;
                        activeDevice.CTD = true;

                    }
                    catch (Exception ex)
                    {
                        StringBuilder message = new StringBuilder(ex.ToString());
                        Exception inner = ex.InnerException;
                        while (inner != null)
                        {
                            message.AppendLine(inner.ToString());
                            inner = inner.InnerException;
                        }
                        MessageBox.Show(message.ToString(), "Error Initializing Capture:" + ex.Message);
                        this.Close();
                    }
                }
                return null;
            }), null);
        }
 public DashboardWindow(IMission mission, IDeployment deployment)
 {
     InitializeComponent();
     Mission = mission;
     Deployment = deployment;
     deviceManager = (Application.Current as App).DeviceManager;
     if (deployment.Devices.Count > 0)
     {
         deviceManager.ActiveDevice = deployment.Devices[0];
         deviceManager.ActiveDevice.MessageReceived += ActiveDeviceMessageReceived;
     }
     controllerAxisChangedHandler = ControllerAxisChanged;
     controllerConnectionChangedHandler = ControllerConnectionChanged;
     bitmapFrameCapturedHandler = VideoDisplayWindowBitmapFrameCaptured;
     this.Title = String.Format("Dashboard - {0} > {1}", mission.Name, deployment.DateTime.ToString());
     YawOffsetSlider.ValueChanged += YawOffsetSliderValueChanged;
     PitchOffsetSlider.ValueChanged += PitchOffsetSliderValueChanged;
     FinRangeSlider.ValueChanged += FinRangeSliderValueChanged;
     TopFinOffsetSlider.ValueChanged += TopFinOffsetSliderValueChanged;
     RightFinOffsetSlider.ValueChanged += RightFinOffsetSliderValueChanged;
     BottomFinOffsetSlider.ValueChanged += BottomFinOffsetSliderValueChanged;
     LeftFinOffsetSlider.ValueChanged += LeftFinOffsetSliderValueChanged;
     illuminationSlider.ValueChanged += IlluminationSliderValueChanged;
     focusSlider.ValueChanged += focusSliderValueChanged;
     buoyancySlider.ValueChanged += buoyancySliderValueChanged;
 }
示例#3
0
 public void CollectMission(IMission mission)
 {
     if (mission != null && !mission.Complete)
     {
         missions.Add(mission);
     }
 }
示例#4
0
        public Controller()  //Judge gives 0/150 if you pass anything throughout the constructor... ffs...
                             //IRepository<IAstronaut> astronauts
                             //, IRepository<IPlanet> planets
                             //, IMission mission
        {
            //this.astronauts = astronauts;
            //this.planets = planets;
            //this.mission = mission;

            this.planets              = new PlanetRepository();
            this.astronauts           = new AstronautRepository();
            this.mission              = new Mission();
            this.exploredPlanetsCount = 0;
        }
示例#5
0
    public void CompleteMission(IMission mission)
    {
        Experience += mission.EnduranceRequired;
        Endurance  -= mission.EnduranceRequired;

        foreach (var x in Weapons.Values.Where(w => w != null).ToList())
        {
            x.DecreaseWearLevel(mission.WearLevelDecrement);
            if (x.WearLevel <= 0)
            {
                Weapons[x.Name] = null;
            }
        }
    }
示例#6
0
    private bool ExecuteMission(IMission mission, List <ISoldier> missionTeam)
    {
        if (missionTeam.Sum(w => w.OverallSkill) >= mission.ScoreToComplete)
        {
            foreach (ISoldier soldier in missionTeam)
            {
                soldier.CompleteMission(mission);
            }
            this.SuccessMissionCounter++;
            return(true);
        }

        return(false);
    }
    public void GiveInputToGameController(string input)
    {
        var data = input.Split();

        if (data[0].Equals("Soldier"))
        {
            string type       = string.Empty;
            string name       = string.Empty;
            int    age        = 0;
            double experience = 0d;
            double endurance  = 0d;

            if (data.Length == 3)
            {
                this.army.RegenerateTeam(data[2]);
            }
            else
            {
                type       = data[1];
                name       = data[2];
                age        = int.Parse(data[3]);
                experience = double.Parse(data[4]);
                endurance  = double.Parse(data[5]);

                ISoldier soldier = this.soldierFactory.CreateSoldier(type, name, age, experience, endurance);

                if (this.wareHouse.TryAddSoldier(soldier))
                {
                    this.army.AddSoldier(soldier);
                }
                else
                {
                    throw new ArgumentException(string.Format(OutputMessages.SoldierCannotBeEquiped, type, name));
                }
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            string name   = data[1];
            int    number = int.Parse(data[2]);

            this.wareHouse.AddWeapon(name, number);
        }
        else if (data[0].Equals("Mission"))
        {
            IMission mission = this.missionFactory.CreateMission(data[1], double.Parse(data[2]));
            this.writer.AppendLine(this.missionController.PerformMission(mission).Trim());
        }
    }
示例#8
0
    public void CompleteMission(IMission mission)
    {
        this.Experience += mission.EnduranceRequired;
        this.Endurance  -= mission.EnduranceRequired;

        foreach (var weapon in this.Weapons.Values.Where(w => w != null).ToList())
        {
            weapon.DecreaseWearLevel(mission.WearLevelDecrement);

            if (weapon.WearLevel <= 0)
            {
                this.Weapons[weapon.Name] = null;
            }
        }
    }
        public Controller(
            AstronautRepository astronautRepository,
            PlanetRepository planetRepository,
            IAstronautFactory astronautFactory,
            IPlanetFactory planetFactory,
            IMission mission)
        {
            this.astronautRepository = astronautRepository;
            this.planetRepository    = planetRepository;

            this.astronautFactory = astronautFactory;
            this.planetFactory    = planetFactory;

            this.mission = mission;
        }
示例#10
0
    public void CompleteMission(IMission mission)
    {
        this.Experience += mission.EnduranceRequired;
        this.Endurance  -= mission.EnduranceRequired;

        foreach (var weapon in Weapons.Values.Where(w => w != null).ToList()) //с ToList() правим нова колекция, за да не гърми(пълним колекция докато я обхождаме)
        {
            weapon.DecreaseWearLevel(mission.WearLevelDecrement);

            if (weapon.WearLevel <= 0)
            {
                this.Weapons[weapon.Name] = null;
            }
        }
    }
示例#11
0
 public void AddMission(IMission mission)
 {
     if (this.missions.Any(m => m.CodeName == mission.CodeName))
     {
         int index = this.missions.FindIndex(m => m.CodeName == mission.CodeName);
         this.missions[index].CompleteMission();
     }
     else
     {
         if (mission.State != null)
         {
             this.missions.Add(mission);
         }
     }
 }
示例#12
0
    public bool ReadyForMission(IMission mission)
    {
        if (this.Endurance < mission.EnduranceRequired)
        {
            return(false);
        }

        bool hasAllEquipment = this.Weapons.Values.Count(weapon => weapon == null) == 0;

        if (!hasAllEquipment)
        {
            return(false);
        }

        return(this.Weapons.Values.All(weapon => weapon.WearLevel > 0));
    }
示例#13
0
    public static void DecreaseAmmunitionsWearLevel(IMission mission, Dictionary <string, List <IAmmunition> > wearHouse)
    {
        string weaponName = string.Empty;

        foreach (var weapon in wearHouse.Keys)
        {
            weaponName = weapon;
            foreach (var ammunition in wearHouse[weaponName])
            {
                if (weaponName.Equals(ammunition.Name))
                {
                    ammunition.DecreaseWearLevel(ammunition.WearLevel);
                }
            }
        }
    }
示例#14
0
        public void CombatBattle(IMission imission)
        {
            if (null == this._spousesStats)
            {
                this._spousesStats = new List <SpousesHeroStatistic>();
            }

            Mission mission = imission as Mission;

            if (null != mission && (mission.CombatType == Mission.MissionCombatType.Combat ||
                                    mission.CombatType == Mission.MissionCombatType.ArenaCombat)
                )
            {
                Mission.Current.AddMissionBehaviour(new SpousesStatsMissionLogic(GetSpouseStatsBusiness()));
            }
        }
    public void GiveInputToGameController(string input)
    {
        string[] data = input.Split();

        if (data[0].Equals("Soldier"))
        {
            if (data[1] == "Regenerate")
            {
                army.RegenerateTeam(data[2]);
            }
            else
            {
                string soldierType = data[1];
                string name        = data[2];
                int    age         = int.Parse(data[3]);
                double experience  = double.Parse(data[4]);
                double endurance   = double.Parse(data[5]);

                ISoldier soldier = this.soldierFactory.CreateSoldier(soldierType, name, age, experience, endurance);

                if (this.wareHouse.TryEquipSoldier(soldier))
                {
                    this.army.AddSoldier(soldier);
                }
                else
                {
                    throw new ArgumentException(string.Format(OutputMessages.SoldierNotAdded, soldier.GetType().Name, soldier.Name));
                }
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            string name  = data[1];
            int    count = int.Parse(data[2]);

            this.wareHouse.AddAmmunition(name, count);
        }
        else if (data[0].Equals("Mission"))
        {
            string missionType  = data[1];
            double neededPoints = double.Parse(data[2]);

            IMission mission = this.missionFactory.CreateMission(missionType, neededPoints);

            this.writer.AppendLine(this.missionController.PerformMission(mission).Trim());
        }
    }
示例#16
0
 public HomeController(IEmployee employee
                       , IDepartment department
                       , IStringLocalizer <HomeController> localizer
                       , IStringLocalizer <SharedResources> sharedLocalizer
                       , IHttpContextAccessor httpContextAccessor
                       , IEducation education
                       , IMission mission
                       )
 {
     _employee            = employee;
     _department          = department;
     _localizer           = localizer;
     _sharedLocalizer     = sharedLocalizer;
     _httpContextAccessor = httpContextAccessor;
     _education           = education;
     _mission             = mission;
 }
示例#17
0
        private void AddMission(Commando commando, string[] missionArgs)
        {
            for (int i = 0; i < missionArgs.Length; i += 2)
            {
                try
                {
                    string name  = missionArgs[i];
                    string state = missionArgs[i + 1];

                    IMission mission = this.missionFactory.MakeMission(name, state);
                    commando.AddMission(mission);
                }
                catch (InvalidStateException)
                {
                    continue;
                }
            }
        }
示例#18
0
    public bool ReadyForMission(IMission mission)
    {
        if (this.Endurance < mission.EnduranceRequired)
        {
            return(false);
        }

        // Check whether all weapons are not null
        bool hasAllEquipment = this.Weapons.Values.All(weapon => weapon != null);

        if (!hasAllEquipment)
        {
            return(false);
        }

        // If all weapons' wear level is above zero, soldier is ready for mission
        return(this.Weapons.Values.All(weapon => weapon.WearLevel > 0));
    }
示例#19
0
        private void StartMission(string missionKey)
        {
            if (CURRENT_MISSION != null || missionRunning)
            {
                throw new MissionAlreadyRunningException();
            }
            else
            {
                TriggerServerEvent(Events.MISSION_RUNNING, Game.Player.ServerId, Game.Player.Handle, true);

                if (Game.PlayerPed != null)
                {
                    MissionItem missionItem = MISSIONS.Where(i => i.NAME == missionKey).First();
                    CURRENT_MISSION = (IMission)Activator.CreateInstance(missionItem.MISSION);
                    CURRENT_MISSION.Start();
                }
            }
        }
    public bool ReadyForMission(IMission mission)
    {
        if (this.Endurance < mission.EnduranceRequired)
        {
            return(false);
        }

        bool hasMissingEquipment = this.Weapons.Values.Any(weapon => weapon == null);

        if (hasMissingEquipment)
        {
            return(false);
        }

        bool allEquipmentIsFunctional = this.Weapons.Values.All(weapon => weapon.WearLevel > 0);

        return(allEquipmentIsFunctional);
    }
    public void GiveInputToGameController(string input)
    {
        var data = input.Split();

        if (data[0].Equals("Soldier"))
        {
            if (data[1] == "Regenerate")
            {
                army.RegenerateTeam(data[2]);
            }
            else
            {
                string soldierType = data[1];
                string soldierName = data[2];
                int    age         = int.Parse(data[3]);
                double experience  = double.Parse(data[4]);
                double endurance   = double.Parse(data[5]);

                ISoldier soldier = this.soldierFactory
                                   .CreateSoldier(soldierType, soldierName, age, experience, endurance);
                if (!this.wareHouse.TryEquipSoldier(soldier))
                {
                    string message = string.Format(OutputMessages.SoldierCannotBeEquiped, soldierType, soldierName);
                    throw new ArgumentException(message);
                }
                army.AddSoldier(soldier);
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            string name   = data[1];
            int    number = int.Parse(data[2]);

            this.wareHouse.AddAmmunition(name, number);
        }
        else if (data[0].Equals("Mission"))
        {
            string   missionType     = data[1];
            double   scoreToComplete = double.Parse(data[2]);
            IMission mission         = this.missionFactory.CreateMission(missionType, scoreToComplete);

            writer.AppendLine(this.missionController.PerformMission(mission).Trim());
        }
    }
示例#22
0
    public IMission CreateMission(string difficultyLevel, double neededPoints)
    {
        Type missionType = Assembly.GetExecutingAssembly()
                           .GetTypes()
                           .FirstOrDefault(t => t.Name == difficultyLevel &&
                                           typeof(IMission).IsAssignableFrom(t));

        if (missionType == null)
        {
            throw new ArgumentException(
                      string.Format(OutputMessages.UnknownMissionDifficulty, difficultyLevel));
        }

        IMission mission = (IMission)Activator.CreateInstance(
            missionType,
            new object[] { neededPoints });

        return(mission);
    }
示例#23
0
    public bool ReadyForMission(IMission mission)
    {
        if (this.Endurance < mission.EnduranceRequired)
        {
            return(false);
        }

        if (this.Weapons.Any(w => w.Value == null || w.Value.WearLevel <= 0))
        {
            return(false);
        }

        if (this.Weapons.Any(w => w.Value.WearLevel < 1))
        {
            return(false);
        }

        return(true);
    }
示例#24
0
        public IMission CreateMission(string difficultyLevel, double neededPoints)
        {
            var clazz = Assembly.GetExecutingAssembly()
                        .GetTypes()
                        .FirstOrDefault(p => p.Name == difficultyLevel);

            if (clazz == null)
            {
                throw new ArgumentException("No such mission name exists");
            }

            var ctor = clazz.GetConstructors()[0];

            object[] parameters = new object[] { neededPoints };

            IMission mission = (IMission)ctor.Invoke(parameters);

            return(mission);
        }
示例#25
0
        public string ExplorePlanet(string planetName)
        {
            var astronautsOnMission = astronautRepository.Models.Where(x => x.Oxygen > 60).ToList();

            if (!astronautsOnMission.Any())
            {
                throw new InvalidOperationException("You need at least one astronaut to explore the planet");
            }

            IPlanet planet = planetRepository.FindByName(planetName);

            this.mission = new Mission();
            this.mission.Explore(planet, astronautsOnMission);

            int deadAstronauts = astronautsOnMission.Count(x => !x.CanBreath);

            this.exploredPlanetsCount++;

            return($"Planet: {planetName} was explored! Exploration finished with {deadAstronauts} dead astronauts!");
        }
示例#26
0
    private void MissionLoad()
    {
        _firstSelectedMissionNum  = PlayerPrefs.GetInt(_firstMissionName);
        _secondSelectedMissionNum = PlayerPrefs.GetInt(_secondMissionName);

        _allMissionProgressbar.SetFromStart(GetMaxMissionCanBeCompleted());

        _firstMission  = GetNextUnlockMissionOrNull(ref _firstSelectedMissionNum, _firstMissions);
        _secondMission = GetNextUnlockMissionOrNull(ref _secondSelectedMissionNum, _secondMissions);

        MissionButtonsFromStart();

        _rendererMissionOnce.SetNewMission(_firstMission, _firstMission.missionLevel);
        _rendererMissionWhole.SetNewMission(_secondMission, _secondMission.missionLevel);

        SetFirstMissionsRenderer();
        SetSecondMissionsRenderer();

        _allMissionProgressbar.FillProgressbasByMissionPass(GetAllCompletedMission());
    }
    public void InterpretCommand(string input)
    {
        string[] data = input.Split();

        switch (data[0])
        {
        case nameof(WareHouse):
            string ammunitionType = data[1];
            int    count          = int.Parse(data[2]);

            this.wareHouse.AddAmmunitions(ammunitionType, count);
            break;

        case nameof(Soldier):

            switch (data[1])
            {
            case RegenerateCommand:
                string soldierType = data[2];

                this.army.RegenerateTeam(soldierType);
                break;

            default:
                this.AddSoldierToArmy(data.Skip(1).ToArray());
                break;
            }

            break;

        case nameof(Mission):
            string difficultyLevel = data[1];
            double scoreToComplete = double.Parse(data[2]);

            IMission mission = this.missionFactory
                               .CreateMission(difficultyLevel, scoreToComplete);

            this.writer.WriteLine(this.missionController.PerformMission(mission).TrimEnd());
            break;
        }
    }
示例#28
0
        //private readonly Logger _logger = Logger.L<MissionItem>();

        /// <summary> 构造函数 </summary>
        /// <param name="mc"></param>
        public MissionItem(Mission mc)
        {
            _mc = mc;
            _autoEvent = new AutoResetEvent(false);
            var tp = Type.GetType(mc.Type);
            if (tp == null)
            {
                //_logger.W(string.Format("没有找到类型 {0} ", mc.Type));
                return;
            }
            var obj = Activator.CreateInstance(tp);
            if (!(obj is IMission))
            {
                //_logger.W(string.Format("类型 {0} 创建实例失败或没有实现 IMission 接口", mc.Type));
                return;
            }
            _mission = (IMission) obj;
            _mission.Error += Mission_Error;
            var ths = new ThreadStart(Run);
            _th = new Thread(ths);
        }
    public string PerformMission(IMission mission)
    {
        StringBuilder sb = new StringBuilder();

        if (this.missionQueue.Count >= 3)
        {
            sb.AppendLine(string.Format(OutputMessages.MissionDeclined,
                                        this.missionQueue.Dequeue().Name));
            this.FailedMissionCounter++;
        }

        this.missionQueue.Enqueue(mission);

        int currentMissionsCount = this.missionQueue.Count;

        for (int i = 0; i < currentMissionsCount; i++)
        {
            this.wareHouse.EquipArmy(this.army);

            IMission currentMission = this.missionQueue.Dequeue();

            List <ISoldier> missionTeam = this.CollectMissionTeam(mission);

            bool successful = this.ExecuteMission(currentMission, missionTeam);

            if (successful)
            {
                sb.AppendLine(string.Format(OutputMessages.MissionSuccessful,
                                            currentMission.Name));
            }
            else
            {
                this.missionQueue.Enqueue(currentMission);
                sb.AppendLine(string.Format(OutputMessages.MissionOnHold,
                                            currentMission.Name));
            }
        }

        return(sb.ToString());
    }
示例#30
0
    public void GiveInputToGameController(string input)
    {
        var data = input.Split();

        if (data[0].Equals("Soldier"))
        {
            if (data[1] == "Regenerate")
            {
                this.army.RegenerateTeam(data[2]);
            }
            else
            {
                ISoldier soldier = soldierFactory.CreateSoldier(
                    data[1], data[2], int.Parse(data[3]),
                    double.Parse(data[4]), double.Parse(data[5]));
                if (wareHouse.TryEquipSoldier(soldier))
                {
                    this.army.AddSoldier(soldier);
                }
                else
                {
                    throw new ArgumentException(
                              string.Format(OutputMessages.NoWeaponForSoldier, data[1], data[2]));
                }
            }
        }
        else if (data[0].Equals("WareHouse"))
        {
            string name   = data[1];
            int    number = int.Parse(data[2]);

            this.wareHouse.AddAmmo(name, number);
        }
        else if (data[0].Equals("Mission"))
        {
            IMission mission = this.missionFactory.CreateMission(data[1], double.Parse(data[2]));
            writer.AppendLine(this.missionController.PerformMission(mission).Trim());
        }
    }
示例#31
0
    public IMission CreateMission(string difficultyLevel, double neededPoints)
    {
        Type missionType = Assembly.GetCallingAssembly() //Assembly.GetCallingAssembly() е необходимо АКО НЕ СА ИЗТРИТИ NAMESPACES
                           .GetTypes().FirstOrDefault(t => t.Name == difficultyLevel);

        if (missionType == null)
        {
            throw new ArgumentException($"{difficultyLevel} is not a valid Mission type!");
        }

        if (!typeof(IMission).IsAssignableFrom(missionType))
        {
            throw new InvalidOperationException($"{difficultyLevel} does not inherit IMission!");
        }

        // Type ammunitionType = Type.GetType(name); АКО СА ИЗТРИТИ NAMESPACES

        IMission mission = (IMission)Activator
                           .CreateInstance(missionType, neededPoints);

        return(mission);
    }
示例#32
0
    public bool ReadyForMission(IMission mission)
    {
        if (this.Endurance < mission.EnduranceRequired)
        {
            return(false);
        }

        bool hasAllEquipment = this.Weapons.Values.All(w => w != null);

        if (!hasAllEquipment)
        {
            return(false);
        }

        bool hasAllWeaponsPositiveWearLevel = this.Weapons.Values.All(w => w.WearLevel > 0);

        if (!hasAllWeaponsPositiveWearLevel)
        {
            return(false);
        }
        return(true);
    }
示例#33
0
    public IMission CreateMission(string difficultyLevel, double neededPoints)
    {
        Assembly assembly = Assembly.GetExecutingAssembly();

        Type missionType = assembly.GetTypes()
                           .FirstOrDefault(t => t.Name.Equals(difficultyLevel));

        if (missionType == null)
        {
            throw new ArgumentException($"Mission type {difficultyLevel} doesn't exists!");
        }
        if (!typeof(IMission).IsAssignableFrom(missionType))
        {
            throw new ArgumentException($"Mission type {difficultyLevel} is not valid!");
        }

        object[] args = new object[] { neededPoints };

        IMission mission = (IMission)Activator.CreateInstance(missionType, args);

        return(mission);
    }
示例#34
0
 public void DoAlgoritm(CheckEx checkEx)
 {
     if (checkEx.RGR)
     {
         _ex = new RGR(_graf);
     }
     if (checkEx.Laba4BFS)
     {
         _ex = new Laba4BFS(_mainDrawer, _graf);
         if (_mainDrawer.GetCheckedVetex() < 0)
         {
             return;
         }
     }
     if (checkEx.Laba4DFS)
     {
         _ex = new Laba4DFS(_mainDrawer, _graf);
         if (_mainDrawer.GetCheckedVetex() < 0)
         {
             return;
         }
     }
     if (checkEx.Laba5)
     {
         _ex = new Laba5(_mainDrawer, _graf);
     }
     if (checkEx.Laba6)
     {
         if (!_mainDrawer.FullListForDej())
         {
             return;
         }
         _ex = new Laba6(_mainDrawer, _graf);
     }
     _ex.DoIt();
     algoritmComplete?.Invoke();
 }
示例#35
0
文件: Game.cs 项目: aule/resistance
        public bool StartMission(IMission nextMission)
        {
            if (State != GameState.WaitingForMission) return false;
            if (!_missions.Remove(nextMission)) return false;

            CurrentMission = nextMission;
            State = GameState.SelectingMissionOperatives;
            Task<IEnumerable<IPlayer>> task = Leader.ChooseOperatives(CurrentMission);
            if (task!=null)
            {
                task.ContinueWith(completeTask => HandleOperativesChosen(completeTask.Result));
            }

            return true;
        }
示例#36
0
        public override void Update()
        {
            base.Update();
            tickCount++;
            if (Mission != null && Mission.Complete)
            {
                if (towedObject != null)
                {
                    towedObject.Expired = true;
                }
                towedObject = null;
                Mission = parent.GetNextMission();
                if (Mission == null)
                {
                    this.Expired = true;

                    return;
                }
            }

            IMissionTarget t = Mission.GetNextUncompletedTarget();
            if (t == null || t.Target == null)
            {
                return;
            }

            IEntity currentTarget = Mission.GetNextUncompletedTarget().Target;
            double targetDistance = MatrixPoint.DistanceBetween(this.Centre, currentTarget.Centre);

            if (nearestObject != null && nearestObject.Distance < 30 && nearestObject.Distance < targetDistance && IsAhead(nearestObject))
            {
                AvoidTarget(nearestObject);
            }
            else
            {
                SeekTarget(base.DetectProximity(currentTarget));
            }

            if (nextMove != 0.0)
            {
                this.Move(nextMove);
            }

            if (nextRotate != 0.0)
            {
                this.Rotate(nextRotate);
            }

            nextMove = 0.0;
            nextRotate = 0.0;
        }