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>(); } }