Files
ai-game-2/Scene.gd
2024-06-10 16:53:55 -07:00

131 lines
4.1 KiB
GDScript

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 and 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