public void ScheduleHitFeedbackOnSelfHitEvent(SelfHitEvent e, DiscreteWeaponNode weapon, [JoinByTank] SelfTankNode tank, [JoinByBattle] BattleNode battle) { if (this.ValidateSelfHit(e, tank, battle)) { base.ScheduleEvent <HitFeedbackEvent>(tank); } }
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 SendTargetsToServer(CollectTargetsInRadius evt, ExplosiveMassEffectNode effect, SelfTankNode tank) { SelfHitEvent eventInstance = new SelfHitEvent { Targets = new List <HitTarget>() }; foreach (Entity entity in evt.Targets) { Entity tankIncarnation = entity.SendEvent <GetTankIncarnationEvent>(new GetTankIncarnationEvent()).TankIncarnation; if (tankIncarnation != null) { HitTarget item = new HitTarget { Entity = entity, LocalHitPoint = Vector3.zero, HitDirection = Vector3.zero, HitDistance = 0f, IncarnationEntity = tankIncarnation, TargetPosition = Vector3.zero }; eventInstance.Targets.Add(item); } } base.ScheduleEvent <SynchronizeSelfTankPositionBeforeEffectEvent>(tank); base.ScheduleEvent(eventInstance, effect); }
public void DrawHitDecal(SelfHitEvent evt, SingleNode <ShaftQuickShotDecalProjectorComponent> decalProjectorNode, [JoinByTank] SingleNode <MuzzlePointComponent> muzzlePointNode, [JoinAll] SingleNode <DecalManagerComponent> decalManagerNode) { if (decalManagerNode.component.EnableDecals) { base.DrawHitDecal(evt, decalManagerNode.component, decalProjectorNode.component, muzzlePointNode.component); } }
public void SendHitToServer(SendHitToServerEvent e, UnblockedWeaponNode weapon) { SelfHitEvent eventInstance = new SelfHitEvent(e.Targets, e.StaticHit) { ShotId = weapon.shotId.ShotId }; base.ScheduleEvent(eventInstance, weapon); }
public void AddStreamWeaponHitFeedback(SelfHitEvent e, StreamWeaponWorkingFeedbackControllerNode weapon, [JoinByTank] SelfTankNode tank, [JoinByBattle] BattleNode battle) { if (this.ValidateSelfHit(e, tank, battle)) { weapon.Entity.AddComponentIfAbsent <StreamHitEnemyFeedbackComponent>(); } else { weapon.Entity.RemoveComponentIfPresent <StreamHitEnemyFeedbackComponent>(); } }
public void ValidateHitEvent(SelfHitEvent e, HitNode weapon) { if ((e.Targets != null) && (e.Targets.Count > 0)) { if (e.Targets.Count > 1) { throw new Exception("Invalid stream hit. Targets.Count=" + e.Targets.Count); } Entity entity = e.Targets.Single <HitTarget>().Entity; Entity entity2 = weapon.streamHit.TankHit.Entity; if (!entity.Equals(entity2)) { object[] objArray1 = new object[] { "Invalid stream hit. targetTankInEvent=", entity, " targetTankInComponent=", entity2 }; throw new Exception(string.Concat(objArray1)); } } }
private bool ValidateSelfHit(SelfHitEvent e, SelfTankNode tank, BattleNode battle) => (e.Targets != null) ? ((e.Targets.Count != 0) ? this.ValidateTargets(e.Targets, tank, battle) : false) : false;
public void CreateShaftQuickHitSoundEffect(SelfHitEvent evt, ShaftQuickHitSoundNode weapon, [JoinAll] SingleNode <SoundListenerBattleStateComponent> soundListener) { this.CreateShaftHitSoundEffect(evt, weapon.shaftQuickHitSoundEffect); }