Esempio n. 1
0
 /// <summary>
 /// actor destroyed another actor!!!!
 /// </summary>
 /// <param name="actor"></param>
 /// <returns></returns>
 public async Task <ICanPerformErrand> KillAnotherActor(ICanPerformErrand actor)
 {
     if (actor.ActorType == ActorType.Cyborg)
     {
         return(await DeactivateRandomRobot(actor));
     }
     else
     {
         return(await DeactivateRandomCyborg(actor));
     }
 }
Esempio n. 2
0
        private async Task AttemptToFailErrand(ICanPerformErrand actor, ErrandType errandType, Errand errand, PerformErrandResult result)
        {
            //higher actorTypes have extra chances to kill an opponent, but have extra 'dice rolls' to fail their task
            foreach (var item in Enumerable.Range(0, ((int)actor.ActorType) + 1))
            {
                _stopwatch.Start();
                Thread.Sleep((int)errandType / ((int)actor.ActorType + 1) + _randomGenerator.Next(1000));
                if (TaskedFailedDiceRoll())
                {
                    //actor destroyed the errand task!!!!
                    errand.Status          = ErrandStatus.Failed;
                    result.TerminatedActor = await _battleService.KillAnotherActor(actor);

                    break;
                }
            }
        }
Esempio n. 3
0
        private async Task <ICanPerformErrand> DeactivateRandomRobot(ICanPerformErrand actor)
        {
            var targettedActors = await _robotService.GetRobotsBy(string.Empty, null);

            int randomSkipCount   = _randomGenerator.Next(0, targettedActors.Count());
            var actorToDeactivate = targettedActors.Skip(randomSkipCount).Take(1).First();

            if (actorToDeactivate != null)
            {
                actorToDeactivate.IsActive   = false;
                actorToDeactivate.KilledById = actor.Id;
                return(actorToDeactivate);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 4
0
        private async Task <ICanPerformErrand> DeactivateRandomCyborg(ICanPerformErrand actor)
        {
            var targettedActors = await _cyborgService.GetCyborgsBy(string.Empty, null);

            var randomSkipCount   = _randomGenerator.Next(1, targettedActors.Count());
            var actorToDeactivate = await _cyborgService.GetCyborg(randomSkipCount);

            if (actorToDeactivate != null)
            {
                actorToDeactivate.IsActive   = false;
                actorToDeactivate.KilledById = actor.Id;
                return(actorToDeactivate);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 5
0
        public async Task <PerformErrandResult> PerformErrand(ICanPerformErrand actor, ErrandType errandType)
        {
            var errandToExecute = new Errand(actor, errandType)
            {
                Status = ErrandStatus.In_Progress
            };
            var performanceResult = new PerformErrandResult(actor, errandToExecute);

            await AttemptToFailErrand(actor, errandType, errandToExecute, performanceResult);

            if (ErrandDidNotFail(errandToExecute))
            {
                errandToExecute.Status = ErrandStatus.Completed;
            }
            await CompleteErrand(actor, errandToExecute);

            return(performanceResult);
        }
Esempio n. 6
0
 public Errand(ICanPerformErrand actor, ErrandType errandType)
 {
     Actor  = actor;
     Type   = errandType;
     Status = ErrandStatus.Not_Started;
 }
Esempio n. 7
0
 private async Task CompleteErrand(ICanPerformErrand actor, Errand errand)
 {
     errand.TimeToComplete = Convert.ToInt32(_stopwatch.ElapsedMilliseconds);
     actor.Errands.Add(errand);
     await _botOMatContext.SaveChangesAsync();
 }
Esempio n. 8
0
 public PerformErrandResult(ICanPerformErrand actor, Errand errand)
 {
     PerformingActor = actor;
     PerformedErrand = errand;
 }