Initial Commit
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user