/// <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)); } }
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; } } }
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); } }
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); } }
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); }
public Errand(ICanPerformErrand actor, ErrandType errandType) { Actor = actor; Type = errandType; Status = ErrandStatus.Not_Started; }
private async Task CompleteErrand(ICanPerformErrand actor, Errand errand) { errand.TimeToComplete = Convert.ToInt32(_stopwatch.ElapsedMilliseconds); actor.Errands.Add(errand); await _botOMatContext.SaveChangesAsync(); }
public PerformErrandResult(ICanPerformErrand actor, Errand errand) { PerformingActor = actor; PerformedErrand = errand; }