private async void ActorOnUsedAct(object sender, UsedActEventArgs e) { await Task.Factory.StartNew(() => { var actor = GetActorFromEventSender(sender); var actorHexNode = actor.Node as HexNode; var targetHexNode = e.TargetNode as HexNode; // Визуализируем удар. var actorViewModel = ActorViewModels.Single(x => x.Actor == actor); var actEffect = e.TacticalAct.Stats.Effect; switch (actEffect) { case TacticalActEffectType.Damage: ProcessDamage(e.TargetNode, e.TacticalAct, actor, actorViewModel); break; case TacticalActEffectType.Heal: ProcessHeal(actorViewModel); break; case TacticalActEffectType.Undefined: default: throw new InvalidOperationException($"Неизвестный тип воздействия {actEffect}."); } }, CancellationToken.None, TaskCreationOptions.None, _taskScheduler); }
private void CreateBullet(IActor actor, IGraphNode targetNode) { var actorViewModel = ActorViewModels.Single(x => x.Actor == actor); var targetActorViewModel = ActorViewModels.SingleOrDefault(x => x.Actor.Node == targetNode); var targetStaticObjectViewModel = _staticObjectViewModels.SingleOrDefault(x => x.StaticObject.Node == targetNode); var canBeHitViewModel = (ICanBeHitSectorObject)targetActorViewModel ?? targetStaticObjectViewModel; var bulletTracer = Instantiate(GunShootTracer, transform); bulletTracer.FromPosition = actorViewModel.transform.position; bulletTracer.TargetPosition = canBeHitViewModel.Position; }
private void Actor_DepositMined(object sender, MineDepositEventArgs e) { var actor = GetActorFromEventSender(sender); var depositViewModel = _staticObjectViewModels.Single(x => x.StaticObject == e.Deposit); var actorViewModel = ActorViewModels.Single(x => x.Actor == actor); actorViewModel.GraphicRoot.ProcessMine(depositViewModel.transform.position); var propContainer = e.Deposit.GetModule <IPropContainer>(); if (e.Result is SuccessMineDepositResult) { ShowFoundPropsModalOrNotFound(actor, propContainer); } }