Fixed nested entities stuff
This commit is contained in:
		@@ -29,26 +29,21 @@ ambient_light_source = 1
 | 
			
		||||
script = ExtResource("1_ru75d")
 | 
			
		||||
mapName = "My cool map"
 | 
			
		||||
 | 
			
		||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
 | 
			
		||||
environment = SubResource("Environment_nyivo")
 | 
			
		||||
 | 
			
		||||
[node name="Rosa" parent="." instance=ExtResource("1_7b7hx")]
 | 
			
		||||
[node name="Entities" type="Node3D" parent="."]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.19857, 0.684572, 0.968477)
 | 
			
		||||
 | 
			
		||||
[node name="Green" parent="." node_paths=PackedStringArray("interactEvent") instance=ExtResource("2_cg1ph")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.68747, 0.459578, -0.399262)
 | 
			
		||||
interactEvent = NodePath("../Events/TestConversation")
 | 
			
		||||
[node name="Rosa" parent="Entities" instance=ExtResource("1_7b7hx")]
 | 
			
		||||
 | 
			
		||||
[node name="Sign" parent="." node_paths=PackedStringArray("interactEvent") instance=ExtResource("9_xfqoe")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.36525, 0.136824, 2.58137)
 | 
			
		||||
interactEvent = NodePath("../Events/TestConversation")
 | 
			
		||||
[node name="Green" parent="Entities" node_paths=PackedStringArray("interactEvent") instance=ExtResource("2_cg1ph")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.88604, -0.224994, -1.36774)
 | 
			
		||||
interactEvent = NodePath("../../Events/TestConversation")
 | 
			
		||||
 | 
			
		||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.20244, 3.80554)
 | 
			
		||||
light_energy = 3.375
 | 
			
		||||
shadow_bias = 0.0
 | 
			
		||||
shadow_normal_bias = 0.9
 | 
			
		||||
omni_range = 281.646
 | 
			
		||||
[node name="Sign" parent="Entities" node_paths=PackedStringArray("interactEvent") instance=ExtResource("9_xfqoe")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.56382, -0.547748, 1.61289)
 | 
			
		||||
interactEvent = NodePath("../../Events/TestConversation")
 | 
			
		||||
 | 
			
		||||
[node name="ItemOnGround" parent="Entities" instance=ExtResource("4_ejcqv")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.546944, -0.547748, -3.46628)
 | 
			
		||||
 | 
			
		||||
[node name="Map" type="Node3D" parent="."]
 | 
			
		||||
metadata/_edit_lock_ = true
 | 
			
		||||
@@ -65,6 +60,16 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.92766, 2.37929, -4.38178)
 | 
			
		||||
collision_layer = 256
 | 
			
		||||
collision_mask = 2
 | 
			
		||||
 | 
			
		||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="Map"]
 | 
			
		||||
environment = SubResource("Environment_nyivo")
 | 
			
		||||
 | 
			
		||||
[node name="OmniLight3D" type="OmniLight3D" parent="Map"]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.20244, 3.80554)
 | 
			
		||||
light_energy = 3.375
 | 
			
		||||
shadow_bias = 0.0
 | 
			
		||||
shadow_normal_bias = 0.9
 | 
			
		||||
omni_range = 281.646
 | 
			
		||||
 | 
			
		||||
[node name="Events" type="Node" parent="."]
 | 
			
		||||
 | 
			
		||||
[node name="TestConversation" type="Node" parent="Events"]
 | 
			
		||||
@@ -89,7 +94,3 @@ metadata/_custom_type_script = "uid://tkfc88q8m86f"
 | 
			
		||||
[node name="Get Item" type="Node" parent="Events"]
 | 
			
		||||
script = ExtResource("10_avybc")
 | 
			
		||||
metadata/_custom_type_script = "uid://b41umpbgqfuc2"
 | 
			
		||||
 | 
			
		||||
[node name="ItemOnGround" parent="." node_paths=PackedStringArray("interactEvent") instance=ExtResource("4_ejcqv")]
 | 
			
		||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.651626, 0.136824, -2.4978)
 | 
			
		||||
interactEvent = NodePath("../Events/Get Item")
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ func getDirectionToFace(position:Vector3) -> Direction:
 | 
			
		||||
	if !characterBody:
 | 
			
		||||
		return Direction.SOUTH;
 | 
			
		||||
 | 
			
		||||
	var diff = position - characterBody.position;
 | 
			
		||||
	var diff = position - characterBody.global_position;
 | 
			
		||||
	if abs(diff.x) > abs(diff.z):
 | 
			
		||||
		if diff.x > 0:
 | 
			
		||||
			return Direction.EAST;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,8 @@ func getRaycastInteractable() -> EntityInteractable:
 | 
			
		||||
	
 | 
			
		||||
	var rayDirection = entityDirection.getDirectionVector()
 | 
			
		||||
	var query = PhysicsRayQueryParameters3D.create(
 | 
			
		||||
		characterBody.position,
 | 
			
		||||
		characterBody.position + (rayDirection * interactRange)
 | 
			
		||||
		characterBody.global_position,
 | 
			
		||||
		characterBody.global_position + (rayDirection * interactRange)
 | 
			
		||||
	)
 | 
			
		||||
	query.collide_with_bodies = true;
 | 
			
		||||
	query.collide_with_areas = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
class_name ItemOnGround extends StaticBody3D
 | 
			
		||||
 | 
			
		||||
@export var interactEvent:Event = null
 | 
			
		||||
@export var itemType:Item.Type = Item.Type.POTION;
 | 
			
		||||
@export var quantity:int = 1;
 | 
			
		||||
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	$Entity/EntityInteractable.onInteract.connect(
 | 
			
		||||
@@ -12,16 +13,15 @@ func _exit_tree() -> void:
 | 
			
		||||
		self.onEntityInteract
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
func selfDispose() -> void:
 | 
			
		||||
	get_parent().remove_child(self)
 | 
			
		||||
	self.queue_free()
 | 
			
		||||
 | 
			
		||||
func onEntityInteract(
 | 
			
		||||
	interactor:EntityInteractor,
 | 
			
		||||
	interactee:EntityInteractable
 | 
			
		||||
) -> void:
 | 
			
		||||
	if interactEvent == null || (interactEvent.started && !interactEvent.isDone()):
 | 
			
		||||
		return
 | 
			
		||||
	
 | 
			
		||||
	interactEvent.onEntityInteract(interactor, $Entity/EntityInteractable)
 | 
			
		||||
	self.selfDispose()
 | 
			
		||||
	print("Interact?")
 | 
			
		||||
	var event = EventGetItem.new()
 | 
			
		||||
	event.itemType = itemType;
 | 
			
		||||
	event.quantity = quantity;
 | 
			
		||||
	event.onEntityInteract(interactor, interactee)
 | 
			
		||||
 | 
			
		||||
	get_parent().remove_child(self)
 | 
			
		||||
	self.queue_free()
 | 
			
		||||
@@ -20,7 +20,7 @@ func _process(delta: float) -> void:
 | 
			
		||||
		(viewportHeight / 2.0)
 | 
			
		||||
	) / unitScale;
 | 
			
		||||
	
 | 
			
		||||
	var look = follow.position;
 | 
			
		||||
	var look = follow.global_position;
 | 
			
		||||
	var position = Vector3(0, 0, 2) + look;
 | 
			
		||||
 | 
			
		||||
	look_at_from_position(
 | 
			
		||||
 
 | 
			
		||||
@@ -16,13 +16,13 @@ func start() -> void:
 | 
			
		||||
		if turnInteractee && interactee.entityDirection && interactor.characterBody:
 | 
			
		||||
			var turn = EventEntityTurn.new()
 | 
			
		||||
			turn.entity = interactee.entityDirection
 | 
			
		||||
			turn.direction = turn.entity.getDirectionToFace(interactor.characterBody.position)
 | 
			
		||||
			turn.direction = turn.entity.getDirectionToFace(interactor.characterBody.global_position)
 | 
			
		||||
			addExtraEvent(turn, 0)
 | 
			
		||||
 | 
			
		||||
		if turnInteractor && interactor.entityDirection && interactee.characterBody:
 | 
			
		||||
			var turn = EventEntityTurn.new()
 | 
			
		||||
			turn.entity = interactor.entityDirection
 | 
			
		||||
			turn.direction = turn.entity.getDirectionToFace(interactee.characterBody.position)
 | 
			
		||||
			turn.direction = turn.entity.getDirectionToFace(interactee.characterBody.global_position)
 | 
			
		||||
			addExtraEvent(turn, 0)
 | 
			
		||||
 | 
			
		||||
	# Create start pause event
 | 
			
		||||
 
 | 
			
		||||
@@ -2,4 +2,5 @@ class_name EventGetItem extends "res://scripts/Event/Item/EventItem.gd"
 | 
			
		||||
 | 
			
		||||
func start() -> void:
 | 
			
		||||
	super.start()
 | 
			
		||||
	print("Got item")
 | 
			
		||||
	getInventory().addItem(itemType, quantity)
 | 
			
		||||
		Reference in New Issue
	
	Block a user