68 lines
1.8 KiB
C#
68 lines
1.8 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Zenject.SpaceFighter
|
|
{
|
|
public class PlayerShootHandler : ITickable
|
|
{
|
|
readonly AudioPlayer _audioPlayer;
|
|
readonly Player _player;
|
|
readonly Settings _settings;
|
|
readonly Bullet.Factory _bulletFactory;
|
|
readonly PlayerInputState _inputState;
|
|
|
|
float _lastFireTime;
|
|
|
|
public PlayerShootHandler(
|
|
PlayerInputState inputState,
|
|
Bullet.Factory bulletFactory,
|
|
Settings settings,
|
|
Player player,
|
|
AudioPlayer audioPlayer)
|
|
{
|
|
_audioPlayer = audioPlayer;
|
|
_player = player;
|
|
_settings = settings;
|
|
_bulletFactory = bulletFactory;
|
|
_inputState = inputState;
|
|
}
|
|
|
|
public void Tick()
|
|
{
|
|
if (_player.IsDead)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_inputState.IsFiring && Time.realtimeSinceStartup - _lastFireTime > _settings.MaxShootInterval)
|
|
{
|
|
_lastFireTime = Time.realtimeSinceStartup;
|
|
Fire();
|
|
}
|
|
}
|
|
|
|
void Fire()
|
|
{
|
|
_audioPlayer.Play(_settings.Laser, _settings.LaserVolume);
|
|
|
|
var bullet = _bulletFactory.Create(
|
|
_settings.BulletSpeed, _settings.BulletLifetime, BulletTypes.FromPlayer);
|
|
|
|
bullet.transform.position = _player.Position + _player.LookDir * _settings.BulletOffsetDistance;
|
|
bullet.transform.rotation = _player.Rotation;
|
|
}
|
|
|
|
[Serializable]
|
|
public class Settings
|
|
{
|
|
public AudioClip Laser;
|
|
public float LaserVolume = 1.0f;
|
|
|
|
public float BulletLifetime;
|
|
public float BulletSpeed;
|
|
public float MaxShootInterval;
|
|
public float BulletOffsetDistance;
|
|
}
|
|
}
|
|
}
|