diff --git a/addons/godot_projectile_engine/core/projectile_spawner/projectile_spawner.gd b/addons/godot_projectile_engine/core/projectile_spawner/projectile_spawner.gd index 689b443d..bbac73d5 100644 --- a/addons/godot_projectile_engine/core/projectile_spawner/projectile_spawner.gd +++ b/addons/godot_projectile_engine/core/projectile_spawner/projectile_spawner.gd @@ -284,7 +284,6 @@ func disconnect_timing_scheduler() -> void: func play_audio() -> void: # audio_stream.playing = true if audio_stream_2d: - print("play aduio") audio_stream_2d.playing = true pass diff --git a/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_piercing.gd b/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_piercing.gd index 7f73f549..43c1cdeb 100644 --- a/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_piercing.gd +++ b/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_piercing.gd @@ -16,18 +16,18 @@ func _request_persist_behavior_context() -> Array[ProjectileEngine.BehaviorConte ProjectileEngine.BehaviorContext.ARRAY_VARIABLE ] -@export var piercing_count : int = 3 -@export var pierce_area : bool = false -@export_flags_2d_physics var pierce_area_layer : int = 0 -@export var pierce_body : bool = false -@export_flags_2d_physics var pierce_body_layer : int = 0 +@export var piercing_count: int = 3 +@export var pierce_area: bool = false +@export_flags_2d_physics var pierce_area_layer: int = 0 +@export var pierce_body: bool = false +@export_flags_2d_physics var pierce_body_layer: int = 0 -var _variable_array : Array -var _behavior_variable_piercing : BehaviorVariablePiercing -var _should_piercing : bool = false +var _variable_array: Array +var _behavior_variable_piercing: BehaviorVariablePiercing +var _should_piercing: bool = false -var _piercing_behavior_values : Dictionary +var _piercing_behavior_values: Dictionary ## Processes the piercing behavior and returns whether piercing should occur ## Returns bool: true if projectile should pierce, false if it should be stopped/destroyed @@ -123,8 +123,9 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary: else: _behavior_variable_piercing.is_overlap_piercing = false - elif _behavior_owner is ProjectileInstance2D: - var _projectile_updater : ProjectileUpdater2D = _behavior_owner.projectile_updater + if _behavior_owner is ProjectileInstance2D: + 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): @@ -141,15 +142,11 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary: _behavior_variable_piercing.is_overlap_piercing = true _behavior_variable_piercing.pierced_targets.append(_overlap_area) - if piercing_count == 1: - _behavior_variable_piercing.is_piercing_just_done = true - elif _behavior_variable_piercing.current_piercing_count < piercing_count - 1: + if _behavior_variable_piercing.current_piercing_count <= piercing_count: _behavior_variable_piercing.current_piercing_count += 1 - else: + + if _behavior_variable_piercing.current_piercing_count > piercing_count: _behavior_variable_piercing.is_piercing_just_done = true - else: - _behavior_variable_piercing.is_overlap_piercing = false - 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): @@ -157,7 +154,7 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary: continue if _behavior_variable_piercing.pierced_targets.has(_overlap_body): continue - if not _overlap_body.collision_layer & pierce_area_layer: + if not _overlap_body.collision_layer & pierce_body_layer: continue _should_piercing = true @@ -166,13 +163,8 @@ func process_behavior(_value, _context: Dictionary) -> Dictionary: _behavior_variable_piercing.is_overlap_piercing = true _behavior_variable_piercing.pierced_targets.append(_overlap_body) - if piercing_count == 1: - _behavior_variable_piercing.is_piercing_just_done = true - elif _behavior_variable_piercing.current_piercing_count < piercing_count - 1: + if _behavior_variable_piercing.current_piercing_count <= piercing_count: _behavior_variable_piercing.current_piercing_count += 1 - else: + if _behavior_variable_piercing.current_piercing_count > piercing_count: _behavior_variable_piercing.is_piercing_just_done = true - else: - _behavior_variable_piercing.is_overlap_piercing = false - return _piercing_behavior_values diff --git a/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/destroy/behaviors/projectile_destroy_collision.gd b/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/destroy/behaviors/projectile_destroy_collision.gd index 089dbe83..50466493 100644 --- a/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/destroy/behaviors/projectile_destroy_collision.gd +++ b/addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/destroy/behaviors/projectile_destroy_collision.gd @@ -10,12 +10,18 @@ class_name ProjectileDestroyCollision @export var destroy_on_body_collide: bool = true ## Wait for Piercing is done before destroy -@export var wait_projectile_piercing : bool = false +@export var wait_projectile_piercing: bool = false ## Wait for Boucing is done before destroy -@export var wait_projectile_bouncing : bool = false +@export var wait_projectile_bouncing: bool = false + +var _projectile_updater: ProjectileUpdater2D + +var _behavior_variable_piercing: BehaviorVariablePiercing +var _behavior_variable_bouncing: BehaviorVariableBouncingReflect + +var _overlap_area_collision_layer: int +var _overlap_body_collision_layer: int -var _behavior_variable_piercing : BehaviorVariablePiercing -var _behavior_variable_bouncing : BehaviorVariableBouncingReflect func _request_behavior_context() -> Array[ProjectileEngine.BehaviorContext]: return [ @@ -30,7 +36,6 @@ func _request_persist_behavior_context() -> Array[ProjectileEngine.BehaviorConte ## Processes collision-based destroy behavior func process_behavior(_value, _context: Dictionary) -> bool: - if !destroy_on_area_collide and !destroy_on_body_collide: return false @@ -43,6 +48,8 @@ func process_behavior(_value, _context: Dictionary) -> bool: var _behavior_owner = _context.get(ProjectileEngine.BehaviorContext.BEHAVIOR_OWNER) if !_behavior_owner: return false + if !_projectile_updater: + _projectile_updater = _behavior_owner.projectile_updater if _behavior_owner is Projectile2D: if !_behavior_owner.monitorable or !_behavior_owner.monitoring: @@ -125,19 +132,14 @@ func process_behavior(_value, _context: Dictionary) -> bool: return false return true - elif _behavior_owner is ProjectileInstance2D: - var _projectile_updater : ProjectileUpdater2D = _behavior_owner.projectile_updater + if _behavior_owner is ProjectileInstance2D: if destroy_on_area_collide: if _projectile_updater.has_overlapping_areas(_behavior_owner.area_index): - # print("ProjectileEngine ProjectileEngine: ", ProjectileEngine) for _overlap_area in _projectile_updater.get_overlapping_areas(_behavior_owner.area_index): if !_overlap_area: _projectile_updater.get_overlapping_areas(_behavior_owner.area_index).erase(_overlap_area) - return true - # print("ProjectileEngine ProjectileEngine: ", ProjectileEngine) - - var _overlap_area_collision_layer : int = ProjectileEngine.get_collider_collision_layer(_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: continue @@ -177,11 +179,15 @@ func process_behavior(_value, _context: Dictionary) -> bool: 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): - var _overlap_body_collision_layer : int = ProjectileEngine.get_collider_collision_layer(_overlap_body) + if !_overlap_body: + _projectile_updater.get_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: continue if wait_projectile_piercing: + var _variable_array := _context.get(ProjectileEngine.BehaviorContext.ARRAY_VARIABLE) if _variable_array.size() <= 0: _behavior_variable_piercing = null @@ -196,23 +202,24 @@ func process_behavior(_value, _context: Dictionary) -> bool: if _behavior_variable_piercing.is_overlap_piercing == false and _behavior_variable_piercing.is_piercing_done: return true return false - - if wait_projectile_bouncing: - var _variable_array := _context.get(ProjectileEngine.BehaviorContext.ARRAY_VARIABLE) - if _variable_array.size() <= 0: - _behavior_variable_bouncing = null - return false - for _variable in _variable_array: - if _variable is BehaviorVariableBouncingReflect: - _behavior_variable_bouncing = _variable - break - _behavior_variable_bouncing = null - if !_behavior_variable_bouncing: - return false - if _behavior_variable_bouncing.is_bouncing == false and _behavior_variable_bouncing.is_bouncing_done: - return true - return false - + return true + + # if wait_projectile_bouncing: + # var _variable_array := _context.get(ProjectileEngine.BehaviorContext.ARRAY_VARIABLE) + # if _variable_array.size() <= 0: + # _behavior_variable_bouncing = null + # return false + # for _variable in _variable_array: + # if _variable is BehaviorVariableBouncingReflect: + # _behavior_variable_bouncing = _variable + # break + # _behavior_variable_bouncing = null + # if !_behavior_variable_bouncing: + # return false + # if _behavior_variable_bouncing.is_bouncing == false and _behavior_variable_bouncing.is_bouncing_done: + # return true + # return false + return false diff --git a/addons/godot_projectile_engine/core/projectile_template/projectile_template_custom_2d/projectile_updater_custom_2d.gd b/addons/godot_projectile_engine/core/projectile_template/projectile_template_custom_2d/projectile_updater_custom_2d.gd index 159bd259..10505bbf 100644 --- a/addons/godot_projectile_engine/core/projectile_template/projectile_template_custom_2d/projectile_updater_custom_2d.gd +++ b/addons/godot_projectile_engine/core/projectile_template/projectile_template_custom_2d/projectile_updater_custom_2d.gd @@ -13,55 +13,55 @@ class_name ProjectileUpdaterCustom2D # var projectile_behaviors : Array[ProjectileBehavior] = [] -var velocity : Vector2 +var velocity: Vector2 var life_time_second: float -var life_distance : float - -var base_speed : float -var speed_final : float -var _speed_addition : float -var _speed_multiply : float -var behavior_values : Dictionary -var _speed_behavior_additions : Dictionary -var _speed_behavior_multiplies : Dictionary -var _base_speed_behavior_multiplies : Dictionary - -var _speed_multiply_value : float - -var base_direction : Vector2 -var raw_direction : Vector2 -var direction_final : Vector2 -var _direction_behavior_values : Dictionary -var _direction_behavior_additions : Dictionary -var _direction_behavior_rotations : Dictionary -var _direction_rotation_value : float -var _direction_addition_value : Vector2 -var _direction_addition : Vector2 - -var projectile_rotation : float -var base_rotation : float -var rotation_final : float +var life_distance: float + +var base_speed: float +var speed_final: float +var _speed_addition: float +var _speed_multiply: float +var behavior_values: Dictionary +var _speed_behavior_additions: Dictionary +var _speed_behavior_multiplies: Dictionary +var _base_speed_behavior_multiplies: Dictionary + +var _speed_multiply_value: float + +var base_direction: Vector2 +var raw_direction: Vector2 +var direction_final: Vector2 +var _direction_behavior_values: Dictionary +var _direction_behavior_additions: Dictionary +var _direction_behavior_rotations: Dictionary +var _direction_rotation_value: float +var _direction_addition_value: Vector2 +var _direction_addition: Vector2 + +var projectile_rotation: float +var base_rotation: float +var rotation_final: float # var behavior_values : Dictionary -var _rotation_behavior_additions : Dictionary -var _rotation_behavior_multiplies : Dictionary -var _rotation_multiply_value : float -var _rotation_multiply : float -var _rotation_addition : float - -var projectile_scale : Vector2 -var base_scale : Vector2 -var scale_final : Vector2 +var _rotation_behavior_additions: Dictionary +var _rotation_behavior_multiplies: Dictionary +var _rotation_multiply_value: float +var _rotation_multiply: float +var _rotation_addition: float + +var projectile_scale: Vector2 +var base_scale: Vector2 +var scale_final: Vector2 # var behavior_values : Dictionary -var _scale_behavior_additions : Dictionary -var _scale_behavior_multiplies : Dictionary -var _scale_multiply_value : Vector2 -var _scale_multiply : Vector2 -var _scale_addition : Vector2 +var _scale_behavior_additions: Dictionary +var _scale_behavior_multiplies: Dictionary +var _scale_multiply_value: Vector2 +var _scale_multiply: Vector2 +var _scale_addition: Vector2 -var _behavior_context_requests_normal : Array[ProjectileEngine.BehaviorContext] -var _behavior_contest_requests_persist : Array[ProjectileEngine.BehaviorContext] +var _behavior_context_requests_normal: Array[ProjectileEngine.BehaviorContext] +var _behavior_contest_requests_persist: Array[ProjectileEngine.BehaviorContext] -var projectile_behaviors : Array[ProjectileBehavior] = [] +var projectile_behaviors: Array[ProjectileBehavior] = [] func init_updater_variable() -> void: projectile_template_2d = projectile_template_2d as ProjectileTemplateCustom2D @@ -87,7 +87,7 @@ func init_updater_variable() -> void: func spawn_projectile_pattern(pattern_composer_pack: Array[PatternComposerData]) -> void: projectile_template_2d = projectile_template_2d as ProjectileTemplateCustom2D - for _pattern_composer_data : PatternComposerData in pattern_composer_pack: + for _pattern_composer_data: PatternComposerData in pattern_composer_pack: _projectile_instance = projectile_instance_array[projectile_pooling_index] _projectile_instance = _projectile_instance as ProjectileInstanceCustom2D @@ -138,13 +138,13 @@ func spawn_projectile_pattern(pattern_composer_pack: Array[PatternComposerData]) if projectile_template_2d.collision_shape: PS.area_set_shape_transform( - projectile_area_rid, - projectile_pooling_index, + projectile_area_rid, + projectile_pooling_index, _projectile_instance.transform ) PS.area_set_shape_disabled( - projectile_area_rid, - projectile_pooling_index, + projectile_area_rid, + projectile_pooling_index, false ) @@ -170,7 +170,7 @@ func spawn_projectile_pattern(pattern_composer_pack: Array[PatternComposerData]) func update_projectile_instances(delta: float) -> void: # Check for projectile destroy condition - for index : int in projectile_active_index: + for index: int in projectile_active_index: _projectile_instance = projectile_instance_array[index] _projectile_instance.behavior_context.clear() @@ -213,7 +213,7 @@ func update_projectile_instances(delta: float) -> void: continue if !_trigger_behavior.active: continue - var _trigger_behavior_values : Dictionary = _trigger_behavior.process_behavior( + var _trigger_behavior_values: Dictionary = _trigger_behavior.process_behavior( null, _projectile_instance.behavior_context ) if _trigger_behavior_values.has("is_trigger"): @@ -230,11 +230,10 @@ func update_projectile_instances(delta: float) -> void: for _projectile_behavior in projectile_template_2d.piercing_projectile_behaviors: if !_projectile_behavior: continue - if !_projectile_behavior.active: continue - var _piercing_behavior_values : Dictionary = _projectile_behavior.process_behavior( + var _piercing_behavior_values: Dictionary = _projectile_behavior.process_behavior( null, _projectile_instance.behavior_context ) @@ -250,7 +249,6 @@ func update_projectile_instances(delta: float) -> void: for _projectile_behavior in projectile_template_2d.bouncing_projectile_behaviors: if !_projectile_behavior: continue - if !_projectile_behavior.active: continue @@ -263,12 +261,12 @@ func update_projectile_instances(delta: float) -> void: ProjectileEngine.projectile_environment.projectile_bouncing_helper.collision_layer = self.projectile_collision_layer ProjectileEngine.projectile_environment.projectile_bouncing_helper.collision_mask = self.projectile_collision_mask - var _bouncing_behavior_values : Dictionary = _projectile_behavior.process_behavior( + var _bouncing_behavior_values: Dictionary = _projectile_behavior.process_behavior( null, _projectile_instance.behavior_context ) if _bouncing_behavior_values.size() <= 0: continue - if _bouncing_behavior_values.has("is_bouncing"): #and _bouncing_behavior_values.has(ProjectileEngine.DirectionModify.DIRECTION_OVERWRITE): + if _bouncing_behavior_values.has("is_bouncing"): # and _bouncing_behavior_values.has(ProjectileEngine.DirectionModify.DIRECTION_OVERWRITE): _projectile_instance.direction = _bouncing_behavior_values.get(ProjectileEngine.DirectionModify.DIRECTION_OVERWRITE) pass @@ -278,12 +276,14 @@ func update_projectile_instances(delta: float) -> void: continue if !_projectile_behavior.active: continue + if _projectile_behavior.process_behavior(null, _projectile_instance.behavior_context): projectile_remove_index.append(index) + # Destroy projectile if projectile_remove_index.size() > 0: - for index : int in projectile_remove_index: + for index: int in projectile_remove_index: projectile_active_index.erase(index) if projectile_template_2d.collision_shape: PS.area_set_shape_disabled(projectile_area_rid, index, true) @@ -291,12 +291,12 @@ func update_projectile_instances(delta: float) -> void: # Update active projectile instances array _active_projectile_instances.clear() - for index : int in projectile_active_index: + for index: int in projectile_active_index: _active_projectile_instances.append(projectile_instance_array[index]) if _active_projectile_instances.size() <= 0: return ## Update Active Projectile Instances - for _active_projectile_instance : ProjectileInstanceCustom2D in _active_projectile_instances: + for _active_projectile_instance: ProjectileInstanceCustom2D in _active_projectile_instances: ## Process Projectile Transform Behaviors ## Projectile Behavior Speed if projectile_template_2d.speed_projectile_behaviors.size() > 0: @@ -481,8 +481,8 @@ func update_projectile_instances(delta: float) -> void: # _active_projectile_instance.speed_final _projectile_instance.speed_clamp if _projectile_instance.speed_clamp != Vector2.ZERO: _active_projectile_instance.speed_final = clamp( - _active_projectile_instance.speed_final, - _projectile_instance.speed_clamp.x, + _active_projectile_instance.speed_final, + _projectile_instance.speed_clamp.x, _projectile_instance.speed_clamp.y ) diff --git a/addons/godot_projectile_engine/core/projectile_template/projectile_template_simple_2d/projectile_updater_simple_2d.gd b/addons/godot_projectile_engine/core/projectile_template/projectile_template_simple_2d/projectile_updater_simple_2d.gd index fe24e233..ed3cd17d 100644 --- a/addons/godot_projectile_engine/core/projectile_template/projectile_template_simple_2d/projectile_updater_simple_2d.gd +++ b/addons/godot_projectile_engine/core/projectile_template/projectile_template_simple_2d/projectile_updater_simple_2d.gd @@ -122,10 +122,10 @@ func update_projectile_instances(delta: float) -> void: projectile_remove_index.append(index) continue + if destroy_on_area_collide: if has_overlapping_areas(index): for _overlap_area in get_overlapping_areas(index): - # if !ProjectileEngine: return _overlap_collision_layer = ProjectileEngine.get_collider_collision_layer(_overlap_area) if not _overlap_collision_layer & projectile_collision_mask: continue @@ -134,8 +134,6 @@ func update_projectile_instances(delta: float) -> void: if destroy_on_body_collide: if has_overlapping_bodies(index): for _overlap_body in get_overlapping_bodies(index): - # print("ProjectileEngine ProjectileEngine: ", ProjectileEngine) - # print(_overlap_body) if !_overlap_body: get_overlapping_bodies(index).erase(_overlap_body) continue diff --git a/experiments/experiment_collision/area_collision_2d.gd b/experiments/experiment_collision/area_collision_2d.gd new file mode 100644 index 00000000..94a9431b --- /dev/null +++ b/experiments/experiment_collision/area_collision_2d.gd @@ -0,0 +1,7 @@ +extends Area2D + + +# func _on_area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) -> void: +# # if ProjectileEngine.projectile_updater_2d_nodes.has(area_rid): +# # print(ProjectileEngine.projectile_updater_2d_nodes.get(area_rid).projectile_template_2d.custom_data) +# pass \ No newline at end of file diff --git a/experiments/experiment_collision/area_collision_2d.gd.uid b/experiments/experiment_collision/area_collision_2d.gd.uid new file mode 100644 index 00000000..89dd073b --- /dev/null +++ b/experiments/experiment_collision/area_collision_2d.gd.uid @@ -0,0 +1 @@ +uid://cyaiiufjywo0g diff --git a/experiments/experiment_collision/body_collision_2d.gd b/experiments/experiment_collision/body_collision_2d.gd new file mode 100644 index 00000000..9bd486f1 --- /dev/null +++ b/experiments/experiment_collision/body_collision_2d.gd @@ -0,0 +1,7 @@ +extends StaticBody2D + + + + +# func _physics_process(delta: float) -> void: +# pass \ No newline at end of file diff --git a/experiments/experiment_collision/body_collision_2d.gd.uid b/experiments/experiment_collision/body_collision_2d.gd.uid new file mode 100644 index 00000000..728dbac0 --- /dev/null +++ b/experiments/experiment_collision/body_collision_2d.gd.uid @@ -0,0 +1 @@ +uid://dpxtdopu17nru diff --git a/experiments/experiment_collision/character_collision_2d.gd b/experiments/experiment_collision/character_collision_2d.gd new file mode 100644 index 00000000..b4e09d94 --- /dev/null +++ b/experiments/experiment_collision/character_collision_2d.gd @@ -0,0 +1 @@ +extends CharacterBody2D diff --git a/experiments/experiment_collision/character_collision_2d.gd.uid b/experiments/experiment_collision/character_collision_2d.gd.uid new file mode 100644 index 00000000..f0d79182 --- /dev/null +++ b/experiments/experiment_collision/character_collision_2d.gd.uid @@ -0,0 +1 @@ +uid://2ixyq3ier51e diff --git a/experiments/experiment_collision/experiment_collision_1.tscn b/experiments/experiment_collision/experiment_collision_1.tscn new file mode 100644 index 00000000..70460626 --- /dev/null +++ b/experiments/experiment_collision/experiment_collision_1.tscn @@ -0,0 +1,288 @@ +[gd_scene load_steps=30 format=3 uid="uid://b6lex8httuuux"] + +[ext_resource type="Script" uid="uid://dn7rm61wq3t3s" path="res://addons/godot_projectile_engine/core/projectile_environment/projectile_environment.gd" id="1_tit6q"] +[ext_resource type="Script" uid="uid://cnqgcej10tinn" path="res://addons/godot_projectile_engine/core/projectile_spawner/projectile_spawner.gd" id="2_cujoe"] +[ext_resource type="Script" uid="uid://cgi5wxrd3qs15" path="res://addons/godot_projectile_engine/core/projectile_wrapper/projectile_wrapper_2d.gd" id="2_l4o06"] +[ext_resource type="Script" uid="uid://dg832mp2dyxuh" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_bouncing.gd" id="3_xua5m"] +[ext_resource type="Texture2D" uid="uid://xej5ti53m73n" path="res://addons/godot_projectile_engine/examples/assets/projectile/projectile_circle_1.png" id="4_l4o06"] +[ext_resource type="Script" uid="uid://b8xk7m2n5qr3w" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_destroy.gd" id="4_q2ber"] +[ext_resource type="Script" uid="uid://chtssqssdvls7" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_direction.gd" id="5_v51ro"] +[ext_resource type="Script" uid="uid://f77iu3txs7r5" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_piercing.gd" id="6_n7q0r"] +[ext_resource type="Script" uid="uid://bkjnay24vltjg" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/destroy/behaviors/projectile_destroy_collision.gd" id="6_tit6q"] +[ext_resource type="Script" uid="uid://lr7r36tmtarr" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_rotation.gd" id="7_pbvgo"] +[ext_resource type="Script" uid="uid://dqtdroky03dsm" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_scale.gd" id="8_2ac4a"] +[ext_resource type="Script" uid="uid://d3yyxyx6shhya" path="res://addons/godot_projectile_engine/core/projectile_template/projectile_template_custom_2d/projectile_template_custom_2d.gd" id="9_a2knd"] +[ext_resource type="Script" uid="uid://sjpvs4m6jk71" path="res://addons/godot_projectile_engine/core/timing_scheduler/repeater/tsc_repeater.gd" id="9_l4o06"] +[ext_resource type="Texture2D" uid="uid://dckkwf5fftsyf" path="res://icon.svg" id="10_5qxhe"] +[ext_resource type="Script" uid="uid://cyaiiufjywo0g" path="res://experiments/experiment_collision/area_collision_2d.gd" id="10_hmwhn"] +[ext_resource type="Script" uid="uid://1xodvevoujyr" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_speed.gd" id="10_og3i8"] +[ext_resource type="Script" uid="uid://dpxtdopu17nru" path="res://experiments/experiment_collision/body_collision_2d.gd" id="12_7so6a"] +[ext_resource type="Script" uid="uid://cmlvc7d6q6iec" path="res://addons/godot_projectile_engine/core/projectile_template/base/projectile_behaviors/base/projectile_behavior_trigger.gd" id="12_cgiv7"] +[ext_resource type="Script" uid="uid://cs3yq53jlx0po" path="res://addons/godot_projectile_engine/core/projectile_spawner/spawn_marker/projectile_spawn_maker_2d.gd" id="13_mgua7"] +[ext_resource type="Script" uid="uid://bc73oiea731jc" path="res://addons/godot_projectile_engine/core/pattern_composer/pattern_composer.gd" id="14_yjiyj"] +[ext_resource type="Script" uid="uid://co24jiat0y46s" path="res://addons/godot_projectile_engine/core/pattern_composer/component/PCCSingle2D.gd" id="15_7scfr"] +[ext_resource type="Script" uid="uid://b8nclaklcf4uu" path="res://addons/godot_projectile_engine/core/timing_scheduler/timing_scheduler.gd" id="19_cl0ke"] + +[sub_resource type="Gradient" id="Gradient_td4cq"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0.0705882, 0.0705882, 0.121569, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_0ehko"] +gradient = SubResource("Gradient_td4cq") + +[sub_resource type="CircleShape2D" id="CircleShape2D_t4xol"] + +[sub_resource type="Resource" id="Resource_cujoe"] +script = ExtResource("6_tit6q") +wait_projectile_piercing = true +metadata/_custom_type_script = "uid://bkjnay24vltjg" + +[sub_resource type="Resource" id="Resource_xua5m"] +script = ExtResource("6_n7q0r") +piercing_count = 2 +pierce_area = true +pierce_area_layer = 256 +pierce_body = true +pierce_body_layer = 512 +metadata/_custom_type_script = "uid://f77iu3txs7r5" + +[sub_resource type="Resource" id="Resource_tit6q"] +script = ExtResource("9_a2knd") +texture = ExtResource("4_l4o06") +collision_shape = SubResource("CircleShape2D_t4xol") +collision_layer = 1 +collision_mask = 768 +destroy_projectile_behaviors = Array[ExtResource("4_q2ber")]([SubResource("Resource_cujoe")]) +piercing_projectile_behaviors = Array[ExtResource("6_n7q0r")]([SubResource("Resource_xua5m")]) +custom_data = [{ +"damage": 5 +}, null] +metadata/_custom_type_script = "uid://d3yyxyx6shhya" + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_vha0g"] + +[node name="ExperimentCollision1" type="Node2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(0, 1.9073486e-06) +scale = Vector2(59.75, 39.625) +texture = SubResource("GradientTexture2D_0ehko") + +[node name="ProjectileEnvironment2D" type="Node2D" parent="."] +script = ExtResource("1_tit6q") +metadata/_custom_type_script = "uid://dn7rm61wq3t3s" + +[node name="Camera2D" type="Camera2D" parent="."] + +[node name="ProjectileWrapper2D" type="Node2D" parent="." node_paths=PackedStringArray("projectile_spawner_2d")] +script = ExtResource("2_l4o06") +projectile_spawner_2d = NodePath("ProjectileSpawner2D4") +metadata/_custom_type_script = "uid://cgi5wxrd3qs15" + +[node name="ProjectileSpawner2D4" type="Node2D" parent="ProjectileWrapper2D" node_paths=PackedStringArray("timing_scheduler")] +position = Vector2(-192, 0) +script = ExtResource("2_cujoe") +projectile_composer_name = "pattern_collision" +projectile_template_2d = SubResource("Resource_tit6q") +timing_scheduler = NodePath("../TimingScheduler") +use_spawn_markers = true +metadata/_custom_type_script = "uid://cnqgcej10tinn" + +[node name="ProjectileSpawnMarker2D" type="Marker2D" parent="ProjectileWrapper2D/ProjectileSpawner2D4"] +script = ExtResource("13_mgua7") +metadata/_custom_type_script = "uid://cs3yq53jlx0po" + +[node name="ProjectileSpawnMarker2D2" type="Marker2D" parent="ProjectileWrapper2D/ProjectileSpawner2D4"] +position = Vector2(0, 64) +script = ExtResource("13_mgua7") +metadata/_custom_type_script = "uid://cs3yq53jlx0po" + +[node name="ProjectileSpawnMarker2D3" type="Marker2D" parent="ProjectileWrapper2D/ProjectileSpawner2D4"] +position = Vector2(0, 128) +script = ExtResource("13_mgua7") +metadata/_custom_type_script = "uid://cs3yq53jlx0po" + +[node name="ProjectileSpawnMarker2D4" type="Marker2D" parent="ProjectileWrapper2D/ProjectileSpawner2D4"] +position = Vector2(0, -64) +script = ExtResource("13_mgua7") +metadata/_custom_type_script = "uid://cs3yq53jlx0po" + +[node name="PatternComposer2D" type="Node" parent="ProjectileWrapper2D"] +script = ExtResource("14_yjiyj") +composer_name = "pattern_collision" +metadata/_custom_type_script = "uid://bc73oiea731jc" + +[node name="PCCSingle2D" type="Node" parent="ProjectileWrapper2D/PatternComposer2D"] +script = ExtResource("15_7scfr") +metadata/_custom_type_script = "uid://co24jiat0y46s" + +[node name="TimingScheduler" type="Node" parent="ProjectileWrapper2D"] +script = ExtResource("19_cl0ke") +metadata/_custom_type_script = "uid://b8nclaklcf4uu" + +[node name="TSCRepeater" type="Node" parent="ProjectileWrapper2D/TimingScheduler"] +script = ExtResource("9_l4o06") +duration = 5.0 +metadata/_custom_type_script = "uid://sjpvs4m6jk71" + +[node name="CollisionSet1" type="Node2D" parent="."] +position = Vector2(0, 64) + +[node name="AreaCollision2D" type="Area2D" parent="CollisionSet1"] +position = Vector2(-64, 64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet1/AreaCollision2D"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet1/AreaCollision2D"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="AreaCollision2D2" type="Area2D" parent="CollisionSet1"] +position = Vector2(32, 64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet1/AreaCollision2D2"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet1/AreaCollision2D2"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="AreaCollision2D3" type="Area2D" parent="CollisionSet1"] +position = Vector2(128, 64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet1/AreaCollision2D3"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet1/AreaCollision2D3"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="CollisionSet2" type="Node2D" parent="."] +position = Vector2(0, 64) + +[node name="BodyCollision2D" type="StaticBody2D" parent="CollisionSet2"] +position = Vector2(-64, 0) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet2/BodyCollision2D"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet2/BodyCollision2D"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="BodyCollision2D2" type="StaticBody2D" parent="CollisionSet2"] +position = Vector2(32, 0) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet2/BodyCollision2D2"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet2/BodyCollision2D2"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="BodyCollision2D3" type="StaticBody2D" parent="CollisionSet2"] +position = Vector2(128, 0) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet2/BodyCollision2D3"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet2/BodyCollision2D3"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="CollisionSet3" type="Node2D" parent="."] +position = Vector2(0, 64) + +[node name="AreaCollision2D4" type="Area2D" parent="CollisionSet3"] +position = Vector2(-64, -64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet3/AreaCollision2D4"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet3/AreaCollision2D4"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="BodyCollision2D4" type="StaticBody2D" parent="CollisionSet3"] +position = Vector2(32, -64) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet3/BodyCollision2D4"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet3/BodyCollision2D4"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="AreaCollision2D5" type="Area2D" parent="CollisionSet3"] +position = Vector2(128, -64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet3/AreaCollision2D5"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet3/AreaCollision2D5"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="CollisionSet4" type="Node2D" parent="."] + +[node name="BodyCollision2D4" type="StaticBody2D" parent="CollisionSet4"] +position = Vector2(128, -64) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet4/BodyCollision2D4"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet4/BodyCollision2D4"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="AreaCollision2D5" type="Area2D" parent="CollisionSet4"] +position = Vector2(32, -64) +collision_layer = 256 +script = ExtResource("10_hmwhn") + +[node name="Icon" type="Sprite2D" parent="CollisionSet4/AreaCollision2D5"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet4/AreaCollision2D5"] +shape = SubResource("RectangleShape2D_vha0g") + +[node name="BodyCollision2D5" type="StaticBody2D" parent="CollisionSet4"] +position = Vector2(-64, -64) +collision_layer = 512 +script = ExtResource("12_7so6a") + +[node name="Icon" type="Sprite2D" parent="CollisionSet4/BodyCollision2D5"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("10_5qxhe") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionSet4/BodyCollision2D5"] +shape = SubResource("RectangleShape2D_vha0g") + +[connection signal="area_shape_entered" from="CollisionSet1/AreaCollision2D" to="CollisionSet1/AreaCollision2D" method="_on_area_shape_entered"] +[connection signal="area_shape_entered" from="CollisionSet1/AreaCollision2D2" to="CollisionSet1/AreaCollision2D2" method="_on_area_shape_entered"] +[connection signal="area_shape_entered" from="CollisionSet1/AreaCollision2D3" to="CollisionSet1/AreaCollision2D3" method="_on_area_shape_entered"] +[connection signal="area_shape_entered" from="CollisionSet3/AreaCollision2D4" to="CollisionSet3/AreaCollision2D4" method="_on_area_shape_entered"] +[connection signal="area_shape_entered" from="CollisionSet3/AreaCollision2D5" to="CollisionSet3/AreaCollision2D5" method="_on_area_shape_entered"] +[connection signal="area_shape_entered" from="CollisionSet4/AreaCollision2D5" to="CollisionSet4/AreaCollision2D5" method="_on_area_shape_entered"] diff --git a/experiments/experiment_projectile_template/area_2d.gd b/experiments/experiment_projectile_template/area_2d.gd index 3691dc8d..b4fae841 100644 --- a/experiments/experiment_projectile_template/area_2d.gd +++ b/experiments/experiment_projectile_template/area_2d.gd @@ -25,5 +25,5 @@ func _on_area_shape_entered(area_rid:RID, area:Area2D, area_shape_index:int, loc var _projectile_instance : ProjectileInstance2D = ProjectileEngine.get_projectile_instance(area_rid, area_shape_index) if !_projectile_instance: return - print(_projectile_instance.custom_data) + # print(_projectile_instance.custom_data) pass # Replace with function body. diff --git a/tests/pattern_composer/test_gdunit_pattern_composer.gd b/tests/pattern_composer/test_gdunit_pattern_composer.gd index ec927ef5..d5125892 100644 --- a/tests/pattern_composer/test_gdunit_pattern_composer.gd +++ b/tests/pattern_composer/test_gdunit_pattern_composer.gd @@ -3,42 +3,42 @@ extends GdUnitTestSuite func test_pattern_composer_single() -> void: var runner := scene_runner("uid://c100r43aw5b57") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass func test_pattern_composer_polygon() -> void: var runner := scene_runner("uid://dlxrdpvh8mcpu") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass func test_pattern_composer_spread() -> void: var runner := scene_runner("uid://dtmk56w332se2") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass func test_pattern_composer_stack() -> void: var runner := scene_runner("uid://yypoytt7an8h") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass func test_pattern_composer_shape_2d() -> void: var runner := scene_runner("uid://vnh02vjautdp") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass func test_pattern_composer_custom_shape_2d() -> void: var runner := scene_runner("uid://s3visbj8dq43") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass @@ -46,13 +46,13 @@ func test_pattern_composer_custom_shape_2d() -> void: func test_pattern_composer_loop() -> void: var runner := scene_runner("uid://vuaj15gpwguh") runner._scene_auto_free = false - await runner.simulate_frames(5) + runner.simulate_frames(5) assert_object(runner).is_not_null() pass func test_pattern_composer_group() -> void: var runner := scene_runner("uid://crdq3kd2tjy82") - await runner.simulate_frames(5) + runner.simulate_frames(5) runner._scene_auto_free = false assert_object(runner).is_not_null() pass