OverviewFilesCommitsIssuesDocsReleasesPeers

godot-witchy_world_demo / game / maps / map_core.gd

84 lines · gd ref:
extends Spatial

onready var playerSpawnNodes : Node = find_node("PlayerSpawnNodes")

export(String) var map_name : String = ""
export(NodePath) var map_asset_node : NodePath

var scatterAreas : Array
var scatterAreasFound = false

func _ready():
	randomize()
	addGrapplingHookCollisionMaskToMap()

func _process(_delta):
	pass
	
func toggleScatterAreaVisibility():
	if(!scatterAreasFound):
		getListOfScatterNodes(self, 0)
		scatterAreasFound = true
		
	var numAreas : int = scatterAreas.size()
	
	for cnt in range(0, numAreas):
		# scatterAreas[cnt].visible = !scatterAreas[cnt].visible
		if(scatterAreas[cnt] == null):
			scatterAreas[cnt].free()
		
func getListOfScatterNodes(_Node, indentLevel : int):
	var _strIndents : String = ""
	for _i in range(indentLevel):
		_strIndents += "\t"
		
	if( str(_Node.name).begins_with("Scatter") and (str(_Node.name).length() == 7 or (str(_Node.name).length() == 8) ) ):
		# scatterAreas.append(_Node)
		_Node.free()
		
	var childCount = _Node.get_child_count()
	for i in range(childCount):
		getListOfScatterNodes(_Node.get_child(i), indentLevel + 1)
	
func getSpawnLocation() -> Vector3:
	var childCount : int = playerSpawnNodes.get_child_count()
	var spawnNode : Spatial = playerSpawnNodes.get_child( randi() % childCount )
	return spawnNode.global_transform.origin
	
func getInstanceOfMapWorldEnvironmentScene():
	var path = "res://assets/maps/" + map_name + "/" + map_name + "_environment.scn"
	var worldEnvironment = load(path)
	return worldEnvironment
	
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.instance())

func addGrapplingHookCollisionMaskToMap():
	checkAndSetChildrenGrapplingHookMask(self, 0)
				
func checkAndSetChildrenGrapplingHookMask(var _Node, indentLevel : int):
	var _strIndents : String = ""
	for _i in range(indentLevel):
		_strIndents += "\t"
		
	if(_Node is StaticBody):
		_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 KinematicBody):
		var mapNode = get_tree().get_current_scene().find_node(map_name, true, false)
		body.currentMap = mapNode
		body.playerWantsNewWorldEnvironment = true