WeaponItem.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using UnityEngine;
  2. [CreateAssetMenu(fileName = "New Weapon", menuName = "RPG/Items/Weapon")]
  3. [System.Serializable]
  4. public class WeaponItem : Item
  5. {
  6. [Header("Weapon Stats")]
  7. public int minDamage;
  8. public int maxDamage;
  9. public int range;
  10. public int weaponModifier;
  11. public float attackSpeed;
  12. public WeaponType weaponType;
  13. [Header("Weapon Behavior")]
  14. // weaponClassName is no longer needed - behavior determined by weaponType enum
  15. [Header("Weapon Prefabs")]
  16. public GameObject weaponPrefab; // 3D model prefab for the weapon
  17. public GameObject arrowPrefab; // For ranged weapons
  18. public WeaponItem()
  19. {
  20. itemType = ItemType.Weapon;
  21. }
  22. /// <summary>
  23. /// Creates an actual Weapon component instance from this WeaponItem data
  24. /// This is the updated method that works with the enhanced weapon classes
  25. /// </summary>
  26. /// <param name="parent">Parent transform to attach the weapon to</param>
  27. /// <returns>The instantiated Weapon component</returns>
  28. public Weapon CreateWeaponInstance(Transform parent)
  29. {
  30. GameObject weaponObject = new GameObject(itemName);
  31. weaponObject.transform.SetParent(parent, false);
  32. // Use GenericWeapon for all weapons - it will configure itself based on WeaponType
  33. GenericWeapon weaponComponent = weaponObject.AddComponent<GenericWeapon>();
  34. if (weaponComponent != null)
  35. {
  36. weaponComponent.InitializeFromItem(this);
  37. Debug.Log($"Created weapon instance: {itemName} of type {weaponType}");
  38. }
  39. else
  40. {
  41. Debug.LogError($"Failed to create GenericWeapon component for: {itemName}");
  42. DestroyImmediate(weaponObject);
  43. return null;
  44. }
  45. return weaponComponent;
  46. }
  47. public override bool MatchesSearch(string searchTerm)
  48. {
  49. if (base.MatchesSearch(searchTerm)) return true;
  50. // Additional weapon-specific search terms
  51. if (string.IsNullOrEmpty(searchTerm)) return true;
  52. searchTerm = searchTerm.ToLower();
  53. // Check weapon type
  54. if (weaponType.ToString().ToLower().Contains(searchTerm)) return true;
  55. return false;
  56. }
  57. }
  58. [System.Serializable]
  59. public enum WeaponType
  60. {
  61. Fists,
  62. Sword,
  63. Bow,
  64. Crossbow,
  65. Dagger,
  66. Mace,
  67. Staff,
  68. Spear,
  69. Axe,
  70. Hammer
  71. }