Adds a modifier system allowing dynamic modification of weapon stats and behavior. This includes: - Creating ModifierLibrary to manage available modifiers. - Adds ModifierManager to handle equipping and unequipping modifiers - Adds a new RangedWeaponComponent to handle firing projectiles and managing modifiers. - Introduces a DebugUI for in-game modifier management. - Introduces an "Unlimited Power" modifier that changes the projectile scene. - Modifies stats components to work with the new modifier system. This system allows for more flexible and customizable weapon functionality.
53 lines
1.5 KiB
GDScript
53 lines
1.5 KiB
GDScript
extends CharacterBody2D
|
|
|
|
class_name Player
|
|
|
|
@export var speed = 200
|
|
@export var special_ability: Ability
|
|
@export var ranged: RangedWeaponComponent
|
|
@export var melee: MeleeWeaponComponent
|
|
@export var stats: StatsComponent
|
|
|
|
var movement: PlayerMovement
|
|
var combat: PlayerCombat
|
|
|
|
# Last direction for idle state
|
|
var last_direction = Vector2.DOWN
|
|
|
|
@onready var animated_sprite = $PlayerSprite
|
|
|
|
func _ready():
|
|
combat = PlayerCombat.new()
|
|
|
|
movement = PlayerMovement.new()
|
|
movement.player = self
|
|
movement.animated_sprite = animated_sprite
|
|
movement.speed = speed
|
|
|
|
combat.player = self
|
|
combat.animated_sprite = animated_sprite
|
|
|
|
Log.pr("Adding projectile size additive modifier")
|
|
ranged.add_modifier(ProjectileSizeAdditive.new())
|
|
#Log.pr(weapon.stats.get_stat("projectile_size")) # Size is now 1.0 + 0.5 = 1.5
|
|
# Size is now 1.0 + 0.5 = 1.5
|
|
|
|
# Add the multiplicative size modifier (1.5x multiplier)
|
|
Log.pr("Adding projectile size multiplicative modifier")
|
|
#weapon.add_modifier(ProjectileSizeMultiplicative.new())
|
|
#Log.pr(weapon.stats.get_stat("projectile_size"))
|
|
# Size is now 1.5 * 1.5 = 2.25
|
|
|
|
# Add another additive size modifier (+0.7 or 70% increase)
|
|
Log.pr("Adding another projectile size additive modifier", 2)
|
|
var another_size_mod = ProjectileSizeAdditive.new()
|
|
another_size_mod.size_increase = 0.7
|
|
#weapon.add_modifier(another_size_mod)
|
|
#Log.pr(weapon.stats.get_stat("projectile_size"))
|
|
|
|
ranged.add_modifier(FireRateAdditive.new())
|
|
|
|
|
|
func _physics_process(delta):
|
|
movement.process(delta)
|
|
combat.process(delta)
|