public void HandleFrame(UpdateBulletEvent e, BulletNode bulletNode) { BulletComponent bullet = bulletNode.bullet; BulletConfigComponent bulletConfig = bulletNode.bulletConfig; DirectionData data = e.TargetingData.Directions[0]; if (data.StaticHit != null) { Vector3 position = data.StaticHit.Position; base.ScheduleEvent(new RicochetBulletBounceEvent(position), bulletNode); bullet.Distance += (bullet.Position - data.StaticHit.Position).magnitude; this.ProcessRicochet(bullet, data.StaticHit); } else { if (base.DestroyOnAnyTargetHit(bulletNode.Entity, bullet, bulletConfig, e.TargetingData)) { return; } base.MoveBullet(bulletNode.Entity, bullet); } if (bullet.Distance > bulletConfig.FullDistance) { base.DestroyBullet(bulletNode.Entity); } }
public void HandleFrame(UpdateBulletEvent e, BulletNode bulletNode) { BulletComponent bullet = bulletNode.bullet; BulletConfigComponent bulletConfig = bulletNode.bulletConfig; DirectionData data = e.TargetingData.Directions[0]; if (data.StaticHit != null) { bullet.Distance += (bullet.Position - data.StaticHit.Position).magnitude; base.SetPositionNearHitPoint(bullet, data.StaticHit.Position); base.SendBulletStaticHitEvent(bulletNode.Entity, bullet); base.DestroyBullet(bulletNode.Entity); } else if (!base.DestroyOnAnyTargetHit(bulletNode.Entity, bullet, bulletConfig, e.TargetingData)) { base.MoveBullet(bulletNode.Entity, bullet); if (bullet.Distance > bulletConfig.FullDistance) { base.DestroyBullet(bulletNode.Entity); } } }
protected bool DestroyOnAnyTargetHit(Entity bulletEntity, BulletComponent bullet, BulletConfigComponent config, TargetingData targeting) { bool flag; using (List <DirectionData> .Enumerator enumerator = targeting.Directions.GetEnumerator()) { while (true) { if (enumerator.MoveNext()) { DirectionData current = enumerator.Current; if (current.Targets.Count <= 0) { continue; } TargetData data2 = current.Targets.First <TargetData>(); this.SetPositionNearHitPoint(bullet, data2.HitPoint); this.SendBulletTargetHitEvent(bulletEntity, bullet, data2.TargetEntity); this.DestroyBullet(bulletEntity); flag = true; } else { return(false); } break; } } return(flag); }