Additional resource tweaks.
This commit is contained in:
parent
2c2b23f0bb
commit
6c41810add
5 changed files with 36 additions and 7 deletions
|
|
@ -14,4 +14,5 @@ spacing = 30.0
|
||||||
origin = -15
|
origin = -15
|
||||||
horizontal_offset = 8.5
|
horizontal_offset = 8.5
|
||||||
stagger_offset = 0.2
|
stagger_offset = 0.2
|
||||||
|
stagger_animation = true
|
||||||
metadata/_custom_type_script = "uid://7n1itonn35fm"
|
metadata/_custom_type_script = "uid://7n1itonn35fm"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[gd_resource type="Resource" script_class="WeaponShot" format=3 uid="uid://bhc6aja38vyr"]
|
[gd_resource type="Resource" script_class="WeaponShot" format=3 uid="uid://bhc6aja38vyr"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clpyd8qfwthk2" path="res://scenes/player_weapons/weapon_spreadshot.tscn" id="1_hm46f"]
|
[ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_hm46f"]
|
||||||
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_w7xlm"]
|
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_w7xlm"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
|
|
@ -14,4 +14,5 @@ spacing = 30.0
|
||||||
origin = -15
|
origin = -15
|
||||||
horizontal_offset = 8.25
|
horizontal_offset = 8.25
|
||||||
stagger_offset = 0.5
|
stagger_offset = 0.5
|
||||||
|
stagger_animation = true
|
||||||
metadata/_custom_type_script = "uid://7n1itonn35fm"
|
metadata/_custom_type_script = "uid://7n1itonn35fm"
|
||||||
|
|
|
||||||
|
|
@ -41,3 +41,21 @@ func _on_visible_on_screen_notifier_2d_screen_exited():
|
||||||
func set_weapon_data(bullet_scene_param: PackedScene, shot_data_param: WeaponShot):
|
func set_weapon_data(bullet_scene_param: PackedScene, shot_data_param: WeaponShot):
|
||||||
bullet_scene = bullet_scene_param
|
bullet_scene = bullet_scene_param
|
||||||
shot_data = shot_data_param
|
shot_data = shot_data_param
|
||||||
|
|
||||||
|
# Function to offset animation playback for staggered visual effect
|
||||||
|
func set_animation_offset(offset: float) -> void:
|
||||||
|
var sprite = $AnimatedSprite2D
|
||||||
|
if sprite:
|
||||||
|
var frames = sprite.sprite_frames
|
||||||
|
if frames:
|
||||||
|
var animation = sprite.animation
|
||||||
|
var frame_count = frames.get_frame_count(animation)
|
||||||
|
if frame_count > 0:
|
||||||
|
# Calculate average frame duration from actual frame timings
|
||||||
|
var total_duration = 0.0
|
||||||
|
for i in range(frame_count):
|
||||||
|
total_duration += frames.get_frame_duration(animation, i)
|
||||||
|
var avg_frame_duration = total_duration / frame_count
|
||||||
|
# Convert time offset to frame offset, wrap within animation length
|
||||||
|
var frame_offset = fposmod(offset / avg_frame_duration, float(frame_count))
|
||||||
|
sprite.frame = int(frame_offset)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ func shoot():
|
||||||
|
|
||||||
# Calculate horizontal offset for this bullet (symmetrical: left=-ve, right=+ve)
|
# Calculate horizontal offset for this bullet (symmetrical: left=-ve, right=+ve)
|
||||||
var bullet_horizontal_offset: float = index_from_center * weapon_data.horizontal_offset
|
var bullet_horizontal_offset: float = index_from_center * weapon_data.horizontal_offset
|
||||||
print("horizontal_offset: ", weapon_data.horizontal_offset, " index: ", index_from_center, " result: ", bullet_horizontal_offset)
|
|
||||||
|
|
||||||
# Calculate vertical offset from center point (symmetrical vertical spread)
|
# Calculate vertical offset from center point (symmetrical vertical spread)
|
||||||
var distance_from_center: float = abs(index_from_center)
|
var distance_from_center: float = abs(index_from_center)
|
||||||
|
|
@ -42,5 +41,9 @@ func shoot():
|
||||||
# Set the bullet data
|
# Set the bullet data
|
||||||
bullet.set_weapon_data(weapon_data.bullet_scene, weapon_data)
|
bullet.set_weapon_data(weapon_data.bullet_scene, weapon_data)
|
||||||
|
|
||||||
|
# Offset animation playback per projectile if enabled
|
||||||
|
if weapon_data.stagger_animation:
|
||||||
|
bullet.set_animation_offset(index_from_center * weapon_data.stagger_offset)
|
||||||
|
|
||||||
# Subtract projectile spacing from current Player travel for next shot
|
# Subtract projectile spacing from current Player travel for next shot
|
||||||
player.travel -= weapon_data.spacing
|
player.travel -= weapon_data.spacing
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,23 @@
|
||||||
class_name WeaponShot
|
class_name WeaponShot
|
||||||
extends Resource
|
extends Resource
|
||||||
|
|
||||||
@export_category("Info")
|
@export_category("Parameters")
|
||||||
@export var shot_name: String
|
@export var shot_name: String
|
||||||
@export var bullet_scene: PackedScene = null
|
@export var bullet_scene: PackedScene = null
|
||||||
|
|
||||||
@export_category("Shot Data")
|
|
||||||
@export var damage: int = 1
|
@export var damage: int = 1
|
||||||
@export var speed: int = 135
|
@export var speed: int = 135
|
||||||
@export var projectiles: int = 2
|
@export var projectiles: int = 2
|
||||||
|
# Vertical spacing between projectiles
|
||||||
@export var spacing: float = 35
|
@export var spacing: float = 35
|
||||||
|
# Origin offset from center of player
|
||||||
@export var origin: int = -23
|
@export var origin: int = -23
|
||||||
|
|
||||||
@export_category("Spread")
|
@export_category("Spread")
|
||||||
@export var horizontal_offset: float = 6.5 # Horizontal distance between projectiles
|
# Horizontal distance between projectiles
|
||||||
@export var stagger_offset: float = 0.25 # Time delay per projectile index
|
@export var horizontal_offset: float = 6.5
|
||||||
|
# Time delay per projectile index
|
||||||
|
@export var stagger_offset: float = 0.25
|
||||||
|
|
||||||
|
@export_category("Effects")
|
||||||
|
# Offset animation playback per projectile index
|
||||||
|
@export var stagger_animation: bool = false
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue