using System;
using System.Collections;
using System.Collections.Generic;
using DragonLi.Frame;
using UnityEngine;
using Random = UnityEngine.Random;
public enum PlayerWeaponType
{
PlayerWeapon1=1,
PlayerWeapon2=2,
PlayerWeapon3=3,
PlayerWeapon4=4,
PlayerWeapon5=5,
PlayerWeapon6=6,
PlayerWeapon7=7,
PlayerWeapon8=8,
PlayerWeapon9=9,
PlayerWeapon10=10,
}
public class PlayerBullet : MonoBehaviour
{
public PlayerWeaponType bulletType;
private int[] _damages;//伤害
public LayerMask layerMask = ~0;
public Vector3 fixedDirection; // ← 用来存储“第一次”拿到的枪口方向
public Vector3 fixedOrigin; // ← 用来存储“第一次”拿到的枪口位置
public Transform fixedTransform;
///
/// 在外层(Spawn Laser 的地方)调用,用来把 muzzle.forward/muzzle.position 传进来。
///
public virtual void Initialize(Vector3 origin, Vector3 direction,Transform curFixedTransform)
{
fixedOrigin = origin;
fixedDirection = direction.normalized;
fixedTransform = curFixedTransform;
// 我们还可以把 laser.SetPosition(0, origin) 等放到这里
}
private void Awake()
{
layerMask=LayerMask.GetMask("Enemy","Wall","Ground");
}
public virtual void AttackDamage(RaycastHit handlingHit)
{
IDamagable component = handlingHit.transform.GetComponent();
if (component != null)
{
int randomDamage = GetDamage(out var isCriticalHit);
component.ApplyDamage(randomDamage, isCriticalHit, transform);
}
}
public int GetDamage(out bool isCriticalHit)
{
if(GameManager.Ins.PlayerBulletDataDic.Count>0)
_damages = GameManager.Ins.PlayerBulletDataDic[(int)bulletType].Damage;
int randomDamage = Random.Range(_damages[0], _damages[1]);
randomDamage += (Mathf.FloorToInt(GameManager.Ins.buffAtk * randomDamage));
isCriticalHit=randomDamage > (_damages[1] - (_damages[1] - _damages[0]) * 0.35f);
return randomDamage;
}
}