public void InitLaser(NodeAddedEvent e, SelfActiveTankNode activeTank, [JoinByTank] WeaponWithLaser weapon, [JoinAll] SingleNode <LaserSightSettingsComponent> settings)
 {
     if (settings.component.Enabled)
     {
         GameObject asset = weapon.shaftAimingLaser.Asset;
         for (int i = 0; i < weapon.muzzlePoint.Points.Length; i++)
         {
             GetInstanceFromPoolEvent eventInstance = new GetInstanceFromPoolEvent {
                 Prefab = asset
             };
             base.ScheduleEvent(eventInstance, activeTank);
             Transform  instance   = eventInstance.Instance;
             GameObject gameObject = instance.gameObject;
             ShaftAimingLaserBehaviour component = gameObject.GetComponent <ShaftAimingLaserBehaviour>();
             weapon.shaftAimingLaser.EffectInstance = component;
             CustomRenderQueue.SetQueue(gameObject, 0xc4e);
             Transform transform = weapon.weaponInstance.WeaponInstance.transform;
             instance.position = transform.position;
             instance.rotation = transform.rotation;
             gameObject.SetActive(true);
             component.Init();
             component.SetColor(Color.red);
             component.Show();
         }
         weapon.Entity.AddComponent <ShaftAimingLaserReadyComponent>();
     }
 }
        private void UpdateLaser(TargetingData targeting, WeaponWithLaser weapon)
        {
            float maxLength = weapon.shaftAimingLaser.MaxLength;
            float minLength = weapon.shaftAimingLaser.MinLength;

            for (int i = 0; i < weapon.muzzlePoint.Points.Length; i++)
            {
                Vector3   forward                   = weapon.weaponInstance.WeaponInstance.transform.forward;
                Transform transform                 = weapon.muzzlePoint.Points[i];
                Vector3   localPosition             = transform.localPosition;
                Vector3   vector2                   = transform.position - (forward * localPosition.magnitude);
                ShaftAimingLaserBehaviour behaviour = weapon.shaftAimingLaser.EffectInstances[i];
                if (targeting.HasTargetHit() && ((targeting.BestDirection != null) && (targeting.BestDirection.Targets.Count > 0)))
                {
                    Vector3 hitPoint = targeting.BestDirection.Targets[0].HitPoint;
                    float   num4     = Vector3.Distance(vector2, hitPoint);
                    behaviour.UpdateTargetPosition(vector2, hitPoint, num4 >= (minLength + transform.localPosition.magnitude), num4 > transform.localPosition.magnitude);
                }
                else
                {
                    bool    flag;
                    bool    flag2;
                    Vector3 point;