Skip to content

Instantly share code, notes, and snippets.

@jweimann
jweimann / Weapon.cs
Created November 14, 2016 05:04
Weapon Script
using UnityEngine;
public class Weapon : MonoBehaviour
{
[SerializeField]
private WeaponSettings _weaponSettings;
[SerializeField]
private Transform _muzzlePoint;
private SteamVR_TrackedController _controller;
using System;
public class WeaponAmmo
{
private int _ammoNotInClip;
private int _ammoInClip;
private int _maxAmmoPerClip;
private bool HasAmmoReady { get { return _ammoInClip > 0; } }
internal interface ITakeDamage
{
void TakeDamage(int damage);
}
using UnityEngine;
[CreateAssetMenu(menuName = "Weapons/WeaponSettings")]
public class WeaponSettings : ScriptableObject
{
[SerializeField]
[Tooltip("Time required between trigger clicks to fire.")]
[Range(0, 2f)]
private float _fireDelay = 0.25f;
@jweimann
jweimann / WeaponAmmo.cs
Created November 14, 2016 06:02
WeaponAmmo constructor
public WeaponAmmo(WeaponSettings weaponSettings)
{
_ammoNotInClip = weaponSettings.StartingAmmo;
_maxAmmoPerClip = weaponSettings.AmmoPerClip;
Reload();
}
public void Reload()
{
int spaceRemaining = _maxAmmoPerClip - _ammoInClip;
int desiredAmmoToMove = Math.Min(_maxAmmoPerClip, spaceRemaining);
int amountToMove = Math.Min(desiredAmmoToMove, _ammoNotInClip);
if (amountToMove > 0)
{
_ammoNotInClip -= amountToMove;
_ammoInClip += amountToMove;
public bool TryTakeBullet()
{
if (HasAmmoReady == false)
return false;
_ammoInClip--;
return true;
}
[CreateAssetMenu(menuName = "Weapons/WeaponSettings")]
[SerializeField]
private WeaponSettings _weaponSettings;
[SerializeField]
private Transform _muzzlePoint;
private SteamVR_TrackedController _controller;
private WeaponAmmo _weaponAmmo;
private float _nextFireTime;
private bool CanFire { get { return Time.time >= _nextFireTime; } }