Hark-the-Moon-Men-Cometh / Assets / Scripts / Weapons / Player_Basic_Rifle.cs
Player_Basic_Rifle.cs
Raw
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(ParticleSystem))]
public class Player_Basic_Rifle : PlayerWeapon, IDamageSource
{
    public List<GameObject> i_sources { get => m_sources; 
        set => m_sources = value; }
    public float i_damage { get => m_damage; set => m_damage = value; }

    [SerializeField]
    private List<GameObject> m_sources;
    [SerializeField]
    private float m_damage;

    //Gives muzzle flash
    public ParticleSystem m_ParticleSystem;

    private MeshRenderer m_renderer;

    protected override void Start()
    {
        base.Start();
        m_renderer = GetComponent<MeshRenderer>();
        m_ParticleSystem = GetComponent<ParticleSystem>();
        m_ParticleSystem.Stop();
        ToggleOnOff(false);
    }

    public override void Attack()
    {
        m_ParticleSystem.Play();
        base.Attack();
        r_owner.r_animator.SetInteger("Weapon Animation ID", Random.Range(0, 4));
        r_owner.r_animator.SetTrigger("Attack");   
        //player controls aiming/targeting. Might need to be changed later.
        RaycastHit hit = r_owner.GetAimTarget();
        GameObject other = hit.transform.gameObject;
        if (!m_sources.Contains(other))
        {
            IHarmable harmable = other.GetComponent<IHarmable>();
            if (harmable != null)
            {
                InflictDamage(harmable);
            }
        }
    }

    public override void SecondaryHeld()
    {
        r_owner.m_isOTSCamera = true;
    }

    public override void SecondaryReleased()
    {
        r_owner.m_isOTSCamera = false;
    }

    public override void Reload()
    {
        //TODO: whole ammunition system. For now, gow nuts
    }

    public override void Equip()
    {
        base.Equip();
        ToggleOnOff(true);
    }

    public override void UnEquip()
    {
        base.UnEquip();
        ToggleOnOff(false);
    }

    private void ToggleOnOff(bool isOn)
    {
        m_renderer.enabled = isOn;
    }

    public void InflictDamage(IHarmable target)
    {
        target.TakeDamage(m_damage);
    }    
}