private ShaftAimingLaserBehaviour InterpolateLaser(AimingLaserTargetPointNode weapon, Vector3 startPosition, Vector3 laserDir)
        {
            bool    flag;
            bool    flag2;
            Vector3 vector3;
            Vector3 leftDirectionWorld = new MuzzleVisualAccessor(weapon.muzzlePoint).GetLeftDirectionWorld();

            laserDir = Vector3.ProjectOnPlane(laserDir, leftDirectionWorld).normalized;
            ShaftAimingLaserBehaviour effectInstance = weapon.shaftAimingLaser.EffectInstance;
            float         maxLength = weapon.shaftAimingLaser.MaxLength;
            float         minLength = weapon.shaftAimingLaser.MinLength;
            DirectionData data      = weapon.targetCollector.Collect(startPosition, laserDir, maxLength, LayerMasks.VISUAL_TARGETING);

            if (data.HasAnyHit())
            {
                flag    = true;
                flag2   = data.FirstAnyHitDistance() >= minLength;
                vector3 = data.FirstAnyHitPosition();
            }
            else
            {
                flag    = false;
                flag2   = true;
                vector3 = startPosition + (laserDir * maxLength);
            }
            bool flag3 = !weapon.shaftAimingTargetPoint.IsInsideTankPart;

            effectInstance.UpdateTargetPosition(weapon.shaftAimingLaserSource.transform.position, vector3, flag2 & flag3, flag & flag3);
            weapon.shaftAimingLaser.CurrentLaserDirection = laserDir;
            return(effectInstance);
        }
 public void InstantiateLaserForRemoteTank(NodeAddedEvent evt, ShaftAimingLaserNode weapon, [Context, JoinByTank] RemoteTankNode remoteTank)
 {
     if (remoteTank.assembledTank.AssemblyRoot)
     {
         GameObject gameObject = Object.Instantiate <GameObject>(weapon.shaftAimingLaser.Asset);
         ShaftAimingLaserBehaviour component = gameObject.GetComponent <ShaftAimingLaserBehaviour>();
         weapon.shaftAimingLaser.EffectInstance = component;
         CustomRenderQueue.SetQueue(gameObject, 0xc4e);
         Transform transform = weapon.shaftAimingLaserSource.gameObject.transform;
         gameObject.transform.position = transform.position;
         gameObject.transform.rotation = transform.rotation;
         component.Init();
         component.SetColor(weapon.shaftAimingColorEffect.ChoosenColor);
         weapon.Entity.AddComponent <ShaftAimingLaserReadyComponent>();
     }
 }