extends Node2D class_name Scene const gs = preload("res://GameScript.gd") #@onready var gamescript: gs = %GameScript @onready var ScriptBuilder = $GameScript @onready var map = NavigationServer2D.map_create() @onready var region = NavigationServer2D.region_create() @export var camera:Camera2D @onready var pathfind = $pathfind var ego signal transitioned(Scene) @export var background_scale = 1.0 var start_scale_point : ScalePoint var end_scale_point : ScalePoint @export var starting_point: Vector2 func _ready(): ScriptBuilder =get_node("/root/Node2D/GameScript") NavigationServer2D.region_set_navigation_polygon(region, $pathfind.navigation_polygon) NavigationServer2D.region_set_map(region, map) NavigationServer2D.map_set_active(map, true) var graham = load("res://Ego.tscn").instantiate() if starting_point: graham.position = starting_point else: if find_child("default-starting-point"): graham.position = find_child("default-starting-point").position add_child(graham) ego = graham #ego.find_node("AnimationPlayer").play("west") #ego.find_node("AnimationPlayer").stop() self.start_scale_point = $StartScalePoint self.end_scale_point = $EndScalePoint camera = get_viewport().get_camera_2d() # Called every frame. 'delhideta' is the elapsed time since the previous frame. func _process(delta): #print(ScriptBuilder.current_script) if ScriptBuilder.current_script: ScriptBuilder.current_script.step(delta, get_node("/root/Node2D")) #func ego_scale(ego:Node2D): # #var value_sum = 0.0 #var weight_sum = 0.0 # #if $Graham and $Graham.position: #for c in get_children(): #if c is ScalePoint: #var weight = 1.0 / $Graham.position.distance_to(c.position) #weight_sum += weight #var value = c.target_scale * weight #value_sum += value #return value_sum / weight_sum #else: #return 1.0 func ego_scale(ego:Node2D): if start_scale_point and end_scale_point: return remap(ego.position.y, start_scale_point.position.y, end_scale_point.position.y, start_scale_point.target_scale, end_scale_point.target_scale) return 1.0 # var scale_points=[] # var total_distance = 0.0 # for c in get_children(): # if c is ScalePoint: # scale_points.append(c) # total_distance += ego.position.distance_to(c.position) # # var inverse_distance_influence = [] # for p in scale_points: # inverse_distance_influence.append ([ego.position.distance_to(p.position) / total_distance, p.target_scale]) # # inverse_distance_influence.sort() # var target_scale = 0.0 # var remaining = 1.0 # var should_print = rand_range(0.0, 20.0) <= 0.1 # for p in inverse_distance_influence: # var weight = (1.0 - p[0]) * remaining # remaining -= weight # target_scale += weight * p[1] # if should_print: # print("weight:", weight, " scale:", p[1]) # if should_print: # print("") ## inverse_distance_influence.append(z) # # # return target_scale # #var start = ego.position.distance_to(start_scale_point.position) #var end = ego.position.distance_to(end_scale_point.position) #var magnitude = sqrt((start*start) + (end*end)) #var start_influence = 1.0 - start/magnitude #var end_influence = 1.0 - end/magnitude #var start_influence = range_lerp(start * start, 0.0, smallest_influence * smallest_influence, 1.0, 0.0) #var end_influence = range_lerp(end * end, 0.0, smallest_influence * smallest_influence, 1.0, 0.0) #print ( "start:", start_influence, " end:", end_influence) func _on_script_complete(): ScriptBuilder.current_script = null func start_main_script(s): if ScriptBuilder.current_script and ScriptBuilder.current_script.interrupt(): ScriptBuilder.current_script = s if not ScriptBuilder.current_script: ScriptBuilder.current_script = s func _unhandled_input(event): if event is InputEventMouseButton and event.is_pressed(): print (ego.position, pathfind.to_local(get_global_mouse_position())) var path = NavigationServer2D.map_get_path(map, ego.position, pathfind.to_local(get_global_mouse_position()), true) start_main_script(ScriptBuilder.init(ScriptBuilder.walk_path(ego, path)).can_interrupt().build(self, "_on_script_complete")) pass