From a4201c9aa077df6492497cb919ee76b1a29629b7 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 4 Feb 2018 17:04:00 -0500 Subject: [PATCH] Remove hero scenes, have player.tscn instance AI --- scenes/ai.tscn | 9 ++++++ scenes/ai/ai-player.tscn | 10 ------- scenes/ai/heroes/0.tscn | 14 ---------- scripts/ai.gd | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ scripts/ai/ai-player.gd | 73 ------------------------------------------------ scripts/lobby.gd | 2 -- scripts/player.gd | 3 ++ 7 files changed, 85 insertions(+), 99 deletions(-) create mode 100644 scenes/ai.tscn delete mode 100644 scenes/ai/ai-player.tscn delete mode 100644 scenes/ai/heroes/0.tscn create mode 100644 scripts/ai.gd delete mode 100644 scripts/ai/ai-player.gd diff --git a/scenes/ai.tscn b/scenes/ai.tscn new file mode 100644 index 0000000..43c8512 --- /dev/null +++ b/scenes/ai.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://scripts/ai.gd" type="Script" id=1] + +[node name="Node" type="Node" index="0"] + +script = ExtResource( 1 ) + + diff --git a/scenes/ai/ai-player.tscn b/scenes/ai/ai-player.tscn deleted file mode 100644 index 99742fd..0000000 --- a/scenes/ai/ai-player.tscn +++ /dev/null @@ -1,10 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://scenes/player.tscn" type="PackedScene" id=1] -[ext_resource path="res://scripts/ai/ai-player.gd" type="Script" id=2] - -[node name="RigidBody" index="0" instance=ExtResource( 1 )] - -script = ExtResource( 2 ) - - diff --git a/scenes/ai/heroes/0.tscn b/scenes/ai/heroes/0.tscn deleted file mode 100644 index 6a4e274..0000000 --- a/scenes/ai/heroes/0.tscn +++ /dev/null @@ -1,14 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://scenes/heroes/0.tscn" type="PackedScene" id=1] -[ext_resource path="res://scripts/ai/ai-player.gd" type="Script" id=2] - -[node name="RigidBody" index="0" instance=ExtResource( 1 )] - -[node name="AIController" type="Node" parent="." index="7"] - -pause_mode = 2 -script = ExtResource( 2 ) -_sections_unfolded = [ "Pause" ] - - diff --git a/scripts/ai.gd b/scripts/ai.gd new file mode 100644 index 0000000..1c7b345 --- /dev/null +++ b/scripts/ai.gd @@ -0,0 +1,73 @@ +extends Node + +var recording +var time + +func _ready(): + if is_network_master(): + print("readdyyyyy") + read_recording() + time = 0 + get_node("..").set_translation(str2var(recording.spawn)) + set_physics_process(true) + +func _physics_process(delta): + if is_network_master(): + time += delta + play_keys() + +func read_recording(): + + # Gather all existing recordings + var possible = [] + var begin = "%d-%d" % [get_node("..").player_info.level, get_node("..").player_info.hero] + var path = "res://recordings/" + var dir = Directory.new() + dir.open(path) + dir.list_dir_begin() + while true: + var fname = dir.get_next() + print(fname) + if fname == "": + # Indicates end of directory + break + if fname.begins_with(begin): + possible.append(fname) + dir.list_dir_end() + + # Now pick a random one + var fname = possible[randi() % possible.size()] + + # Read the file into recording.events for later use + var frec = File.new() + frec.open(path + fname, File.READ) + recording = parse_json(frec.get_as_text()) + frec.close() + +func apply_dict(from, to): + if typeof(from) != TYPE_DICTIONARY: + return from + else: + for key in from: + to[key] = apply_dict(from[key], to[key]) + return to + +func obj_to_event(d): + var e + if d.type == "motion": e = InputEventMouseMotion.new() + if d.type == "key": e = InputEventKey.new() + if d.type == "mb": e = InputEventMouseButton.new() + d.erase("type") # Not in the event + apply_dict(d, e) + return e + +func play_keys(): + # events[0] is first event + # events[0][0] is first event's TIME + while float(recording.events[0][0]) <= time: + # events[0][1] is first event's EVENT2 + var event_obj = recording.events.pop_front()[1] + var event = obj_to_event(event_obj) + Input.parse_input_event(event) + #._input(event) + #get_node("TPCamera")._input(event) diff --git a/scripts/ai/ai-player.gd b/scripts/ai/ai-player.gd deleted file mode 100644 index 1c7b345..0000000 --- a/scripts/ai/ai-player.gd +++ /dev/null @@ -1,73 +0,0 @@ -extends Node - -var recording -var time - -func _ready(): - if is_network_master(): - print("readdyyyyy") - read_recording() - time = 0 - get_node("..").set_translation(str2var(recording.spawn)) - set_physics_process(true) - -func _physics_process(delta): - if is_network_master(): - time += delta - play_keys() - -func read_recording(): - - # Gather all existing recordings - var possible = [] - var begin = "%d-%d" % [get_node("..").player_info.level, get_node("..").player_info.hero] - var path = "res://recordings/" - var dir = Directory.new() - dir.open(path) - dir.list_dir_begin() - while true: - var fname = dir.get_next() - print(fname) - if fname == "": - # Indicates end of directory - break - if fname.begins_with(begin): - possible.append(fname) - dir.list_dir_end() - - # Now pick a random one - var fname = possible[randi() % possible.size()] - - # Read the file into recording.events for later use - var frec = File.new() - frec.open(path + fname, File.READ) - recording = parse_json(frec.get_as_text()) - frec.close() - -func apply_dict(from, to): - if typeof(from) != TYPE_DICTIONARY: - return from - else: - for key in from: - to[key] = apply_dict(from[key], to[key]) - return to - -func obj_to_event(d): - var e - if d.type == "motion": e = InputEventMouseMotion.new() - if d.type == "key": e = InputEventKey.new() - if d.type == "mb": e = InputEventMouseButton.new() - d.erase("type") # Not in the event - apply_dict(d, e) - return e - -func play_keys(): - # events[0] is first event - # events[0][0] is first event's TIME - while float(recording.events[0][0]) <= time: - # events[0][1] is first event's EVENT2 - var event_obj = recording.events.pop_front()[1] - var event = obj_to_event(event_obj) - Input.parse_input_event(event) - #._input(event) - #get_node("TPCamera")._input(event) diff --git a/scripts/lobby.gd b/scripts/lobby.gd index 89471ad..25c6401 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -203,8 +203,6 @@ remote func done_preconfiguring(who): sync func spawn_player(p): var hero = player_info[p].hero var player = load("res://scenes/heroes/" + str(hero) + ".tscn").instance() - if "is_ai" in player_info[p] and player_info[p].is_ai: - player = load("res://scenes/ai/heroes/" + str(hero) + ".tscn").instance() player.set_name(str(p)) player.set_network_master(p) player.player_info = player_info[p] diff --git a/scripts/player.gd b/scripts/player.gd index 293cb1d..138a4bb 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -40,6 +40,9 @@ func _ready(): spawn() else: remove_child(get_node(master_only)) + + if "is_ai" in player_info and player_info.is_ai: + add_child(preload("res://scenes/ai.tscn").instance()) func spawn(): var placement = Vector3()