public void SendHitEvent(TargetingEvent e, SingleNode <BulletComponent> bulletNode, [JoinByTank] UnblockedWeaponNode weaponNode, [JoinByTank] SingleNode <TankSyncComponent> tankNode) { if (!e.TargetingData.HasBaseStaticHit()) { foreach (DirectionData data in e.TargetingData.Directions) { if (data.HasTargetHit()) { TargetData targetData = data.Targets.First <TargetData>(); if (targetData.TargetEntity.HasComponent <TankActiveStateComponent>()) { this.PrepareTargetData(targetData, bulletNode.component); SelfHitEvent event3 = new SelfHitEvent(); List <HitTarget> list = new List <HitTarget> { HitTargetAdapter.Adapt(targetData) }; event3.Targets = list; event3.ShotId = bulletNode.component.ShotId; SelfHitEvent eventInstance = event3; base.ScheduleEvent(eventInstance, weaponNode.Entity); break; } } } } }
public void PrepareHitByUnblockedWeapon(SendHitToServerIfNeedEvent evt, UnblockedWeaponNode weapon) { DirectionData bestDirection = evt.TargetingData.BestDirection; if (bestDirection.HasAnyHit()) { SplashHitData splashHit = SplashHitData.CreateSplashHitData(HitTargetAdapter.Adapt(bestDirection.Targets), bestDirection.StaticHit, weapon.Entity); base.ScheduleEvent(new CollectSplashTargetsEvent(splashHit), weapon); } }
public void SendHitToServer(SendHitToServerEvent e, ShaftNode weapon) { if (e.TargetingData.BestDirection.HasAnyHit()) { SelfShaftAimingHitEvent eventInstance = new SelfShaftAimingHitEvent(HitTargetAdapter.Adapt(e.TargetingData.BestDirection.Targets), e.TargetingData.BestDirection.StaticHit) { HitPower = 0f }; base.ScheduleEvent(eventInstance, weapon); } }
public void SendHit(SendHitToServerIfNeedEvent evt, UnblockedWeaponNode weapon) { WeaponHitComponent weaponHit = weapon.weaponHit; StaticHit staticHit = null; List <HitTarget> targets = new List <HitTarget>(4); if (evt.TargetingData.HasTargetHit()) { if (!weaponHit.RemoveDuplicateTargets) { targets = HitTargetAdapter.Adapt(evt.TargetingData.BestDirection.Targets); } else { HashSet <Entity> set = new HashSet <Entity>(); int num = 0; while (num < evt.TargetingData.Directions.Count) { DirectionData data = evt.TargetingData.Directions[num]; int num2 = 0; while (true) { if (num2 >= data.Targets.Count) { num++; break; } TargetData targetData = data.Targets[num2]; if (set.Add(targetData.TargetEntity)) { targets.Add(HitTargetAdapter.Adapt(targetData)); } num2++; } } } } if (weaponHit.SendStaticHit && evt.TargetingData.HasStaticHit()) { staticHit = evt.TargetingData.BestDirection.StaticHit; } if ((staticHit == null) && (targets.Count == 0)) { base.ScheduleEvent <SelfHitSkipEvent>(weapon); } else { base.ScheduleEvent(new SendHitToServerEvent(evt.TargetingData, targets, staticHit), weapon); } }
private void CompleteTargets(SelfShaftAimingHitEvent hitEvent, TargetingData targeting, float energy) { hitEvent.Targets = HitTargetAdapter.Adapt(targeting.BestDirection.Targets); hitEvent.StaticHit = targeting.BestDirection.StaticHit; hitEvent.HitPower = 1f - energy; }
private static HitTarget GetTankHit(TargetingData targetingData) => !targetingData.BestDirection.HasTargetHit() ? null : HitTargetAdapter.Adapt(targetingData.BestDirection.Targets[0]);