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 UpdateLaserTargetPosition(UpdateEvent evt, AimingLaserTargetPointNode weapon, [JoinByTank] RemoteTankNode tank, [JoinAll] CameraNode camera) { Vector3 barrelOriginWorld = new MuzzleVisualAccessor(weapon.muzzlePoint).GetBarrelOriginWorld(); this.InterpolateLaser(weapon, barrelOriginWorld, Vector3.Lerp(weapon.shaftAimingLaser.CurrentLaserDirection, Vector3.Normalize(weapon.shaftAimingTargetPoint.Point - barrelOriginWorld), weapon.shaftAimingLaser.InterpolationCoeff).normalized); }
public void ShowAndInitLaser(NodeAddedEvent evt, AimingLaserTargetPointNode weapon, [Context, JoinByTank] ActiveTankNode tank, [JoinAll, Context] CameraNode camera) { Vector3 barrelOriginWorld = new MuzzleVisualAccessor(weapon.muzzlePoint).GetBarrelOriginWorld(); this.InterpolateLaser(weapon, barrelOriginWorld, Vector3.Normalize(weapon.shaftAimingTargetPoint.Point - barrelOriginWorld)).Show(); }
public void HideLaser(NodeRemoveEvent evt, AimingLaserTargetPointNode weapon) { weapon.shaftAimingLaser.EffectInstance.Hide(); }