Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions addons/godot_projectile_engine/GodotProjectileEngine.gd
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,9 @@ func get_projectile_instance(area_rid: RID, area_shape_index: int) -> Projectile
var _projectile_updater_2d_node : ProjectileUpdater2D = projectile_updater_2d_nodes.get(area_rid)
if !_projectile_updater_2d_node:
return null
if _projectile_updater_2d_node.projectile_instance_array.size() < area_shape_index:
if _projectile_updater_2d_node.projectile_instances.size() < area_shape_index:
return null
return _projectile_updater_2d_node.projectile_instance_array[area_shape_index]
return _projectile_updater_2d_node.projectile_instances[area_shape_index]
pass


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ func _physics_process(delta: float) -> void:
pass


func spawner_destroyed(area_rid: RID) -> void:
if !ProjectileEngine.projectile_updater_2d_nodes.get(area_rid): return
ProjectileEngine.projectile_updater_2d_nodes.get(area_rid).spawner_destroyed = true
pass


func projectile_collided(projectile_area_rid: RID, shape_idx: int) -> void:
if !ProjectileEngine.projectile_updater_2d_nodes.has(projectile_area_rid): return
if !is_instance_valid(ProjectileEngine.projectile_updater_2d_nodes[projectile_area_rid]):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,7 @@ func setup_projectile_spawner() -> void:
)

ProjectileTemplateAdvanced2D:
if !is_instance_valid(
ProjectileEngine.projectile_updater_2d_nodes.get(
projectile_template_2d.projectile_area_rid
)
):
create_projectile_updater_advanced_2d()
projectile_updater_2d = ProjectileEngine.projectile_updater_2d_nodes.get(
projectile_template_2d.projectile_area_rid
)
create_projectile_updater_advanced_2d()

ProjectileTemplateCustom2D:
if !is_instance_valid(
Expand Down Expand Up @@ -163,7 +155,8 @@ func create_projectile_updater() -> void:
var _projectile_updater := ProjectileUpdater2D.new()

_projectile_updater.projectile_template_2d = projectile_template_2d
_projectile_updater.custom_data = projectile_template_2d.custom_data
if projectile_template_2d.custom_data:
_projectile_updater.custom_data = projectile_template_2d.custom_data

ProjectileEngine.projectile_environment.add_child(_projectile_updater, true)
projectile_area = _projectile_updater.projectile_area_rid
Expand All @@ -177,33 +170,33 @@ func create_projectile_updater_simple_2d() -> void:
if !ProjectileEngine.projectile_environment:
return

var _projectile_updater := ProjectileUpdaterSimple2D.new()
projectile_updater_2d = ProjectileUpdaterSimple2D.new()

_projectile_updater.projectile_template_2d = projectile_template_2d
_projectile_updater.custom_data = projectile_template_2d.custom_data
projectile_updater_2d.projectile_template_2d = projectile_template_2d
if projectile_template_2d.custom_data:
projectile_updater_2d.projectile_custom_data = projectile_template_2d.custom_data

ProjectileEngine.projectile_environment.add_child(_projectile_updater, true)
projectile_area = _projectile_updater.projectile_area_rid
projectile_template_2d.projectile_area_rid = _projectile_updater.projectile_area_rid
ProjectileEngine.projectile_updater_2d_nodes.get_or_add(projectile_area, _projectile_updater)
projectile_updater_2d = _projectile_updater
ProjectileEngine.projectile_environment.add_child(projectile_updater_2d, true)
projectile_area = projectile_updater_2d.projectile_area_rid
projectile_template_2d.projectile_area_rid = projectile_updater_2d.projectile_area_rid
ProjectileEngine.projectile_updater_2d_nodes.get_or_add(projectile_area, projectile_updater_2d)
pass


func create_projectile_updater_advanced_2d() -> void:
if !ProjectileEngine.projectile_environment:
return

var _projectile_updater := ProjectileUpdaterAdvanced2D.new()
projectile_updater_2d = ProjectileUpdaterAdvanced2D.new()

_projectile_updater.projectile_template_2d = projectile_template_2d
_projectile_updater.custom_data = projectile_template_2d.custom_data
projectile_updater_2d.projectile_template_2d = projectile_template_2d
if projectile_template_2d.custom_data:
projectile_updater_2d.projectile_custom_data = projectile_template_2d.custom_data

ProjectileEngine.projectile_environment.add_child(_projectile_updater, true)
projectile_area = _projectile_updater.projectile_area_rid
projectile_template_2d.projectile_area_rid = _projectile_updater.projectile_area_rid
ProjectileEngine.projectile_updater_2d_nodes.get_or_add(projectile_area, _projectile_updater)
projectile_updater_2d = _projectile_updater
ProjectileEngine.projectile_environment.add_child(projectile_updater_2d, true)
projectile_area = projectile_updater_2d.projectile_area_rid
projectile_template_2d.projectile_area_rid = projectile_updater_2d.projectile_area_rid
ProjectileEngine.projectile_updater_2d_nodes.get_or_add(projectile_area, projectile_updater_2d)
pass


Expand All @@ -214,7 +207,7 @@ func create_projectile_updater_custom_2d() -> void:
var _projectile_updater := ProjectileUpdaterCustom2D.new()

_projectile_updater.projectile_template_2d = projectile_template_2d
_projectile_updater.custom_data = projectile_template_2d.custom_data
_projectile_updater.projectile_custom_data = projectile_template_2d.custom_data

ProjectileEngine.projectile_environment.add_child(_projectile_updater, true)
projectile_area = _projectile_updater.projectile_area_rid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:

if _behavior_owner is Projectile2D:
if pierce_area:
if _behavior_owner.has_overlapping_areas():
var _overlap_areas : Array[Area2D] = _behavior_owner.get_overlapping_areas()
if _behavior_owner.hasprojectile_overlapping_areas():
var _overlap_areas : Array[Area2D] = _behavior_owner.getprojectile_overlapping_areas()
for _overlap_area in _overlap_areas:
if _behavior_variable_piercing.pierced_targets.has(_overlap_area):
continue
Expand All @@ -100,8 +100,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:
else:
_behavior_variable_piercing.is_overlap_piercing = false
if pierce_body:
if _behavior_owner.has_overlapping_bodies():
var _overlap_bobies : Array[Area2D] = _behavior_owner.get_overlapping_bodies()
if _behavior_owner.hasprojectile_overlapping_bodies():
var _overlap_bobies : Array[Area2D] = _behavior_owner.getprojectile_overlapping_bodies()
for _overlap_body in _overlap_bobies:
if _behavior_variable_piercing.pierced_targets.has(_overlap_body):
continue
Expand All @@ -127,8 +127,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:
var _projectile_updater: ProjectileUpdater2D = _behavior_owner.projectile_updater
_behavior_variable_piercing.is_overlap_piercing = false
if pierce_area:
if _projectile_updater.has_overlapping_areas(_behavior_owner.area_index):
for _overlap_area in _projectile_updater.get_overlapping_areas(_behavior_owner.area_index):
if _projectile_updater.hasprojectile_overlapping_areas(_behavior_owner.area_index):
for _overlap_area in _projectile_updater.getprojectile_overlapping_areas(_behavior_owner.area_index):
if not _overlap_area.collision_layer & _projectile_updater.projectile_collision_mask:
continue
if _behavior_variable_piercing.pierced_targets.has(_overlap_area):
Expand All @@ -148,8 +148,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:
if _behavior_variable_piercing.current_piercing_count > piercing_count:
_behavior_variable_piercing.is_piercing_just_done = true
if pierce_body:
if _projectile_updater.has_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.get_overlapping_bodies(_behavior_owner.area_index):
if _projectile_updater.hasprojectile_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.getprojectile_overlapping_bodies(_behavior_owner.area_index):
if not _overlap_body.collision_layer & _projectile_updater.projectile_collision_mask:
continue
if _behavior_variable_piercing.pierced_targets.has(_overlap_body):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extends Resource
class_name ProjectileCustomData

@export var custom_data: Array[Variant]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://d2u1cn78hhbf4
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:
var _new_direction : Vector2

if _behavior_owner is Projectile2D:
if _behavior_owner.has_overlapping_bodies():
for _overlap_body in _behavior_owner.get_overlapping_bodies():
if _behavior_owner.hasprojectile_overlapping_bodies():
for _overlap_body in _behavior_owner.getprojectile_overlapping_bodies():
if _behavior_variable_bouncing_reflect.bounced_targets.has(_overlap_body):
continue
if not _overlap_body.collision_layer & _behavior_owner.collision_mask:
Expand Down Expand Up @@ -92,8 +92,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary:

if _behavior_owner is ProjectileInstance2D:
var _projectile_updater : ProjectileUpdater2D = _behavior_owner.projectile_updater
if _projectile_updater.has_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.get_overlapping_bodies(_behavior_owner.area_index):
if _projectile_updater.hasprojectile_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.getprojectile_overlapping_bodies(_behavior_owner.area_index):
if _behavior_variable_bouncing_reflect.bounced_targets.has(_overlap_body):
continue
if not _overlap_body.collision_layer & _projectile_updater.projectile_collision_mask:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ func process_behavior(_value, _context: Dictionary) -> bool:
if !_behavior_owner.monitorable or !_behavior_owner.monitoring:
return false
if destroy_on_area_collide:
if _behavior_owner.has_overlapping_areas():
for _overlap_area in _behavior_owner.get_overlapping_areas():
if _behavior_owner.hasprojectile_overlapping_areas():
for _overlap_area in _behavior_owner.getprojectile_overlapping_areas():
if not _overlap_area.collision_layer & _behavior_owner.collision_mask:
continue
if wait_projectile_piercing:
Expand Down Expand Up @@ -94,8 +94,8 @@ func process_behavior(_value, _context: Dictionary) -> bool:

return true
if destroy_on_body_collide:
if _behavior_owner.has_overlapping_bodies():
for _overlap_body in _behavior_owner.get_overlapping_bodies():
if _behavior_owner.hasprojectile_overlapping_bodies():
for _overlap_body in _behavior_owner.getprojectile_overlapping_bodies():
var _overlap_body_collision_layer : int = ProjectileEngine.get_collider_collision_layer(_overlap_body)
if not _overlap_body_collision_layer & _behavior_owner.collision_mask:
continue
Expand Down Expand Up @@ -136,10 +136,10 @@ func process_behavior(_value, _context: Dictionary) -> bool:
if _behavior_owner is ProjectileInstance2D:
if destroy_on_area_collide:
_projectile_updater = _behavior_owner.projectile_updater
if _projectile_updater.has_overlapping_areas(_behavior_owner.area_index):
for _overlap_area in _projectile_updater.get_overlapping_areas(_behavior_owner.area_index):
if _projectile_updater.hasprojectile_overlapping_areas(_behavior_owner.area_index):
for _overlap_area in _projectile_updater.getprojectile_overlapping_areas(_behavior_owner.area_index):
if !_overlap_area:
_projectile_updater.get_overlapping_areas(_behavior_owner.area_index).erase(_overlap_area)
_projectile_updater.getprojectile_overlapping_areas(_behavior_owner.area_index).erase(_overlap_area)
continue
_overlap_area_collision_layer = ProjectileEngine.get_collider_collision_layer(_overlap_area)
if not _overlap_area_collision_layer & _projectile_updater.projectile_collision_mask:
Expand Down Expand Up @@ -179,10 +179,10 @@ func process_behavior(_value, _context: Dictionary) -> bool:
return true

if destroy_on_body_collide:
if _projectile_updater.has_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.get_overlapping_bodies(_behavior_owner.area_index):
if _projectile_updater.hasprojectile_overlapping_bodies(_behavior_owner.area_index):
for _overlap_body in _projectile_updater.getprojectile_overlapping_bodies(_behavior_owner.area_index):
if !_overlap_body:
_projectile_updater.get_overlapping_bodies(_behavior_owner.body_index).erase(_overlap_body)
_projectile_updater.getprojectile_overlapping_bodies(_behavior_owner.body_index).erase(_overlap_body)
continue
_overlap_body_collision_layer = ProjectileEngine.get_collider_collision_layer(_overlap_body)
if not _overlap_body_collision_layer & _projectile_updater.projectile_collision_mask:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
extends Object
class_name ProjectileInstance2D

var projectile_updater: ProjectileUpdater2D
var projectile_template_2d : ProjectileTemplate2D
var projectile_updater_2d: ProjectileUpdater2D

var area_rid: RID
var area_index: int
var canvas_item_rid: RID

var speed: float
var direction: Vector2 = Vector2.RIGHT
var direction_rotation: float = 0

var velocity: Vector2 = Vector2.ZERO

var transform_2d: Transform2D
var global_position: Vector2 = Vector2.ZERO
var texture_rotation: float = 0
var scale: Vector2 = Vector2.ONE
var skew: float = 0.0
var transform: Transform2D
var texture_scale: Vector2 = Vector2.ONE
var texture_skew: float = 0.0

var life_time_second: float = 0.0
var life_time_tick: float = 0.0
var life_time_tick: int = 0.0
var life_distance: float = 0.0

var life_time_second_max: float = 0.0
var life_time_tick_max: float = 0.0
var life_distance_max: float = 0.0

var custom_data: Array[Variant]
var custom_data: ProjectileCustomData
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
extends Resource
class_name ProjectileTemplate2D

@export var custom_data : Array[Variant]
## Number of projectiles to preload in the object pool for better performance
@export var projectile_pooling_amount: int = 500:
set(value):
projectile_pooling_amount = value
emit_changed()

@export var custom_data : ProjectileCustomData
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
extends ProjectileTemplate2D
class_name ProjectileTemplateObject2D
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bxxteh75p7exo
Loading
Loading