extends Spatial # Declare member variables here. Examples: # var a = 2 # var b = "text" # Called when the node enters the scene tree for the first time. var frame_tf: Transform = Transform() var ball_game : BallGameAI3D var master func master_control(pos): print("walkto: ", pos) var n = lerp(world.master_node.get_walk_speed(), 3.8, 0.1) world.master_node.set_walk_speed(n) master.walkto(pos) func update_quests(): $info/task/task.text = "No active tasks" for q in world.quests: if q.is_active(): $info/task/task.text = q.get_cur_task_text() break for q in world.quests: if q.is_active(): q.update() func start_quest(quest: Quest): notifications.quest_notfication(quest.get_title(), quest.get_description()) func complete_quest(quest: Quest): notifications.quest_complete_notfication(quest.get_title(), quest.get_description()) func start_interaction(obj): print("started interaction") if obj.is_in_group("characters"): $interaction.start_interaction(obj) else: obj.activate() func start_training(ball): print("start training") ball_game = BallGameAI3D.new() var t0 = $team0 var t1 = $team1 for k in t0.get_children(): if k.name.begins_with("cheer"): ball_game.add_cheer_game_location(0, k.global_transform.origin) elif k.name == "start": ball_game.set_team_start(0, k.global_transform.origin) elif k.name == "gate": ball_game.set_team_gate(0, k) for k in t1.get_children(): if k.name.begins_with("cheer"): ball_game.add_cheer_game_location(1, k.global_transform.origin) elif k.name == "start": ball_game.set_team_start(1, k.global_transform.origin) elif k.name == "gate": ball_game.set_team_gate(1, k) var t_start = randi() % 2 for ch in world.cheer_team.keys(): assert(world.cheer_team[ch] != null) ball_game.add_cheer(t_start, world.cheer_team[ch]) t_start ^= 1 for ch in world.team.keys(): assert(world.team[ch] != null) ball_game.add_player(t_start, world.team[ch]) t_start ^= 1 ball_game.set_ball(ball) ball_game.set_main(self) add_child(ball_game) ball_game.connect("stopped_game", self, "stop_training") ball_game.connect("started_game", self, "init_training") ball_game.connect("update_score", self, "update_training") ball_game.start_game() func stop_training(score): print("score:", score) ball_game.queue_free() world.team_train_count += 1 $score.hide() func init_training(score): $score.show() $score.release_focus() update_training(score) func update_training(score): var v:String = "" var sdata = [] for k in score.keys(): sdata.push_back("%02d" % (score[k])) print("score update = ", score) v = PoolStringArray(sdata).join(":") $score/v/l.text = v $score/v/footer.text = "%.1f seconds left" % (ball_game.max_training_time - ball_game.training_time) func spawn_character(cd, xform, k): var char_sc = characters.spawn_character(cd.gender, xform) cd.scene = char_sc if !cd.has("look"): cd.look = {} for k in characters.get_modifier_list(char_sc): cd.look[k] = (randf() - 0.5) * 1.7 for k in cd.look: characters.set_modifier_value(char_sc, k, cd.look[k]) cd.id = k char_sc.set_meta("data", cd) return char_sc func characters_done(): characters.update() characters.update() func _ready(): notifications.set_main(self) var tstart = $nav/navmesh/level_level world.arrow = $Camera/arrow var queue = [tstart] while queue.size() > 0: var item = queue[0] queue.pop_front() if item is StaticBody: item.collision_layer = 512 item.collision_mask = 1 | 512 for c in item.get_children(): queue.push_back(c) var master_xform = $master.global_transform $master.queue_free() master = characters.spawn_character(0, master_xform) master.add_to_group("master") for e in world.master_stats.look.keys(): characters.set_modifier_value(master, e, world.master_stats.look[e]) controls.master_node = master world.master_node = master # $master.add_to_group("master") # controls.master_node = $master # world.master_node = $master world.init_data() world.nav = $nav controls.camera = $Camera controls.connect("user_click", self, "master_control") for k in world.line.keys(): var cd = world.line[k] var char_xform = Transform() var nav: Navigation = get_node("nav") var p = nav.get_closest_point(get_node("line_spawn").global_transform.origin + Vector3(randf() * 20.0 - 10.0, 0.0, randf() * 20 - 10.0)) char_xform.origin = p call_deferred("spawn_character", cd, char_xform, k) call_deferred("characters_done") var tut_quest = Quest.new("Tutorial", "This quest shortly introduces to a game") tut_quest.connect("started", self, "start_quest") tut_quest.connect("complete", self, "complete_quest") world.quests.push_back(tut_quest) var tut1_quest = WalkQuest.new("Walk to closet room", "Walk to closet room designated location", get_node("quest_dst_closet")) tut1_quest.connect("started", self, "start_quest") tut1_quest.connect("complete", self, "complete_quest") var tut2_quest = StatsQuest.new("Hire 6 team members", "Hire six team members to start with your team", {"player_count": 6}) tut2_quest.connect("started", self, "start_quest") tut2_quest.connect("complete", self, "complete_quest") var tut3_quest = WalkQuest.new("Walk to gym", "Walk to gym designated location", get_node("quest_dst_gym")) tut3_quest.connect("started", self, "start_quest") tut3_quest.connect("complete", self, "complete_quest") var tut4_quest = StatsQuest.new("Train your team once", "Complete your team training once", {"team_train_count": 1}) tut4_quest.connect("started", self, "start_quest") tut4_quest.connect("complete", self, "complete_quest") tut1_quest.set_next_quest(tut2_quest) tut2_quest.set_next_quest(tut3_quest) tut3_quest.set_next_quest(tut4_quest) tut_quest.add_child(tut1_quest) tut_quest.start() update_quests() var quest_timer : = Timer.new() quest_timer.wait_time = 2.0 add_child(quest_timer) quest_timer.connect("timeout", self, "update_quests") quest_timer.start() controls.connect("action1", self, "start_interaction") world.connect("start_training", self, "start_training") $info/task/show_journal.connect("pressed", $quest_journal, "show") $score.hide() func _process(delta): var pos = master.global_transform.origin pos.y = $Camera.global_transform.origin.y $Camera.global_transform.origin = $Camera.global_transform.origin.linear_interpolate(pos, 0.8 * delta) if $score.visible && ball_game != null: update_training(ball_game._scores)