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

[RequireComponent (typeof(MeshCollider))]
[RequireComponent (typeof(DynamicDamageSource))]
public class Player_Basic_Sword : PlayerWeapon
{
    //needs these to actual hit and damage the target
    private DynamicDamageSource m_damageSource;
    private Collider m_collider;

    private MeshRenderer m_renderer;

    protected override void Start()
    {
        base.Start();
        m_collider = GetComponent<Collider>();
        m_renderer = GetComponent<MeshRenderer>();
        m_damageSource = GetComponent<DynamicDamageSource>();
        m_damageSource.i_sources = new List<GameObject>
        {
            r_owner.gameObject
        };
        ToggleOnOff(false);
    }

    public override void Attack()
    {
        base.Attack();
        r_owner.SetPlayerImmobile(true);
        r_owner.r_animator.SetInteger("Weapon Animation ID", Random.Range(0, 4));
        r_owner.r_animator.SetTrigger("Attack");
        m_damageSource.StartAttacking();
    }

    public override void SetIsAttacking(bool attacking)
    {
        base.SetIsAttacking(attacking);
        if (!attacking)
        {
            r_owner.SetPlayerImmobile(false);
            m_damageSource.StopAttacking();
        }
    }

    //Secondary for base sword is to block
    public override void SecondaryHeld()
    {
        if (!IsAttacking())
        {
            r_owner.r_animator.SetBool("Blocking", true);
            r_owner.m_isInvulnerable = true;
        }
        else
        {
            r_owner.m_isInvulnerable = false;
        }
    }

    public override void SecondaryReleased()
    {
        r_owner.r_animator.SetBool("Blocking", false);
        r_owner.m_isInvulnerable = false;
    }

    public override void Reload(){}

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

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

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