Files
dungeons/Assets/Plugins/Zenject/OptionalExtras/SampleGame2 (Advanced)/Scripts/Player/PlayerShootHandler.cs

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