OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-godot4-test / game / maps / map_core.gd

64 lines · gd ref:
extends Node3D

@onready var playerSpawnNodes : Node = get_node("PlayerSpawnNodes")

@export var map_name : String = ""

func _ready():
	randomize()
	addGrapplingHookCollisionMaskToMap()

func _process(_delta):
	pass
	
func getSpawnLocation() -> Vector3:
	var childCount : int = playerSpawnNodes.get_child_count()
	var spawnNode : Node3D = playerSpawnNodes.get_child( randi() % childCount )
	return spawnNode.global_transform.origin
	
func getInstanceOfMapWorldEnvironmentScene():
	# var new_environment_node = WorldEnvironment.new()
	var path = "res://assets/maps/" + map_name + "/" + map_name + "_environment.scn"
	var newNode = load(path).instantiate()
	# new_environment_node.environment = load(path)
	# new_environment_node.name = "WorldEnvironment"
	
	return newNode
	
func updateMapWorldEnvironmentScene():
	# First check to see if we need to delete any existing World Environments
	get_tree().get_current_scene().PurgeAllWorldEnvironmentNodes()
		
	# Spawn in new World Environment
	var worldEnvironment = getInstanceOfMapWorldEnvironmentScene()
	if(worldEnvironment != null):
		add_child(worldEnvironment)

func addGrapplingHookCollisionMaskToMap():
	var _name = self.name
	# var currentMap : Node = get_tree().get_current_scene().get_node("Maps").find_node(_name, true, false)
	# var assetMap : Spatial = currentMap.find_node("asset_" + currentMap.name)
	checkAndSetChildrenGrapplingHookMask(self, 0)
				
func checkAndSetChildrenGrapplingHookMask(_Node, indentLevel : int):
	var _strIndents : String = ""
	for _i in range(indentLevel):
		_strIndents += "\t"
		
	if(_Node is StaticBody3D):
		_Node.collision_layer += 2
		
	var childCount = _Node.get_child_count()
	for i in range(childCount):
		checkAndSetChildrenGrapplingHookMask(_Node.get_child(i), indentLevel + 1)


func _on_Area_body_entered(body, _map_name):
	if(body is CharacterBody3D):
		var mapNodes = get_tree().get_current_scene().get_node("Maps").find_children(_map_name, "", true, false)
		for i in range(0, mapNodes.size()):
			if mapNodes[i].name == _map_name:
				body.currentMap = mapNodes[i]
				body.playerWantsNewWorldEnvironment = true