private void UpdateShooting() { CanHitEnemy = false; if (ShootLock || !PrimaryEnemy.vehicle) { return; } Transform currentShootTransform = Vehicle.GetCurrentShootTransform(); if (!currentShootTransform) { return; } BulletDefinition bulletDef = Vehicle.BulletDef; int mask = (self.team == Team.Right) ? LayerMask.GetMask("PlayerTank") : LayerMask.GetMask("PlayerTankRight"); if (TankGame.instance.PredictTrajectory(bulletDef, currentShootTransform.position, currentShootTransform.right, mask, PrimaryEnemy.vehicle) == float.MaxValue || !(DistanceToEnemy < 20f)) { return; } CanHitEnemy = true; ShootLock = true; float shootReactionDelay = GetShootReactionDelay(); float afterShootDelay = GetAfterShootDelay(); if (bulletDef.type == BulletType.Cannon || bulletDef.type == BulletType.Grenade || bulletDef.type == BulletType.Laser || bulletDef.type == BulletType.Missile) { TankGame.instance.Delay(shootReactionDelay, delegate { Vehicle.Shoot(); }); if (bulletDef.type != BulletType.Missile && bulletDef.type != BulletType.Laser) { TankGame.instance.Delay(shootReactionDelay + afterShootDelay, delegate { Vehicle.Shoot(val: false); }); } TankGame.instance.Delay(shootReactionDelay + afterShootDelay + bulletDef.maxTime * UnityEngine.Random.value, delegate { ShootLock = false; }); } else { TankGame.instance.Delay(shootReactionDelay, delegate { Vehicle.Shoot(); }); float t = bulletDef.warmupTime + Mathf.Max(0.5f, UnityEngine.Random.value) * bulletDef.maxTime; TankGame.instance.Delay(t, delegate { Vehicle.Shoot(val: false); }); TankGame.instance.Delay(shootReactionDelay + afterShootDelay * UnityEngine.Random.value, delegate { ShootLock = false; }); } }
private void OnPlayerShot(BulletDefinition bulletDef) { }