diff --git a/Battle Pong/GameSettings.gd b/Battle Pong/GameSettings.gd index 68109b6f51d00ec4443ff6dc54f513b7d3d06f32..4647f076c0f2c439d444431334d7120a494b3d49 100644 --- a/Battle Pong/GameSettings.gd +++ b/Battle Pong/GameSettings.gd @@ -16,6 +16,7 @@ var image_width var trainer_ip var trainer_port var trainer_position +var trainer_realtime_enabled var ball_height var ball_width @@ -45,7 +46,8 @@ var default_data = { "trainer":{ "ip":"127.0.0.1", "port":"9080", - "position":"Right" + "position":"Right", + "realtime_enabled":true }, "ball":{ "height":30, @@ -99,7 +101,8 @@ func save_data(): "trainer":{ "ip":$"/root/GameSettings".trainer_ip, "port":$"/root/GameSettings".trainer_port, - "position":$"/root/GameSettings".trainer_position + "position":$"/root/GameSettings".trainer_position, + "realtime_enabled":$"/root/GameSettings".trainer_realtime_enabled }, "ball":{ "height":$"/root/GameSettings".ball_height, @@ -139,7 +142,7 @@ func update_settings(): trainer_ip = data["trainer"]["ip"] trainer_port = data["trainer"]["port"] as int trainer_position = data["trainer"]["position"] - + trainer_realtime_enabled = data["trainer"]["realtime_enabled"] as bool ball_height =data["ball"]["height"] as int ball_width = data["ball"]["width"] as int diff --git a/Battle Pong/Main.gd b/Battle Pong/Main.gd index 293e7430418be2d0040bdfc0765d96a98b5383c4..79510193be0a063cfde55970f4c07aefe6b59537 100644 --- a/Battle Pong/Main.gd +++ b/Battle Pong/Main.gd @@ -7,10 +7,15 @@ var _server = WebSocketServer.new() var player_one_client_id var player_two_client_id + + var action_player_one = InputEventAction.new() var next_step_player_one = false +var action_trainer_one = "" + var action_player_two = InputEventAction.new() var next_step_player_two = false +var action_trainer_two = "" var Ball = preload("Ball.tscn") var ball = Ball.instance() @@ -56,11 +61,11 @@ func _ready(): # in a loop for each connected peer. _server.connect("data_received", self, "_on_data") # Start listening on the given port. - var err = _server.listen(PORT) - if err != OK: + var server_err = _server.listen(PORT) + if server_err != OK: print("Unable to start server") set_process(false) - + set_ball() $PlayerOne.start($StartPositionPlayerOne.position) $PlayerTwo.start($StartPositionPlayerTwo.position) @@ -89,7 +94,7 @@ func _process(delta): # Call this in _process or _physics_process. # Data transfer, and signals emission will only happen when calling this function. _server.poll() - + check_point_scored() handle_score_event() handle_game_end() @@ -172,8 +177,6 @@ func _on_PlayerOne_hit(): pass # Replace with function body. - - func _connected(id, proto): # This is called when a new peer connects, "id" will be the assigned peer id, # "proto" will be the selected WebSocket sub-protocol (which is optional) @@ -193,12 +196,8 @@ func _disconnected(id, was_clean = false): if( player_one_client_id == id ): player_one_client_id = null #print("Player One with Client %d disconnected, clean: %s" % [id, str(was_clean)]) - if(player_two_client_id== id): + if(player_two_client_id == id): player_two_client_id = null - #print("Player Two with Client %d disconnected, clean: %s" % [id, str(was_clean)]) - #else: - #print("Client %d disconnected, clean: %s" % [id, str(was_clean)]) - func _on_data(id): @@ -208,7 +207,7 @@ func _on_data(id): #print("Got data from client %d: %s ... echoing" % [id, pkt.get_string_from_utf8()]) var data = (JSON.parse(pkt.get_string_from_utf8())).get_result() - #print(data) + print(data) if(data): for i in data: #print(i) @@ -254,14 +253,33 @@ func _on_data(id): return_value = get_return_value_as_utf8_JSON() _server.get_peer(id).put_packet(return_value) pass - if($"/root/GameSettings".trainings_mode_enabled): - if(($"/root/GameSettings".trainer_position == "Left" and next_step_player_two) or ($"/root/GameSettings".trainer_position == "Right" and next_step_player_one)): - unpause() - $PlayerOne.run(game_playtime_per_step) - $PlayerTwo.run(game_playtime_per_step) - ball.run(game_playtime_per_step) - timeout() - elif(next_step_player_one and next_step_player_two): + if($"/root/GameSettings".trainings_mode_enabled): + if(i=="player_one_training"): + next_step_player_one = true + # is w pressed => up + #elif is s pressed => down + # else => nothing + if(Input.is_action_pressed("player_one_up")): + action_trainer_one = "up" + elif Input.is_action_pressed("player_one_down"): + action_trainer_one = "down" + else: + action_trainer_one = "nothing" + if(i=="player_two_training"): + next_step_player_two = true + # is arrow_up pressed => up + #elif is arrow_down pressed => down + # else => nothing + if(Input.is_action_pressed("player_two_up")): + action_trainer_two = "up" + elif Input.is_action_pressed("player_two_down"): + action_trainer_two = "down" + else: + action_trainer_two = "nothing" + + if(next_step_player_one and next_step_player_two): + if($"/root/GameSettings".trainer_realtime_enabled): + yield(get_tree().create_timer(game_playtime_per_step), "timeout") unpause() $PlayerOne.run(game_playtime_per_step) $PlayerTwo.run(game_playtime_per_step) @@ -270,7 +288,7 @@ func _on_data(id): func get_observarion(): - return {"PlayerOne":{"X":$PlayerOne.position.x,"Y":$PlayerOne.position.y}, "PlayerTwo":{"X":$PlayerTwo.position.x,"Y":$PlayerTwo.position.y}, "ball":ball.get_observation()} + return {"PlayerOne":{"X":$PlayerOne.position.x,"Y":$PlayerOne.position.y, "TrainingAction":action_trainer_one}, "PlayerTwo":{"X":$PlayerTwo.position.x,"Y":$PlayerTwo.position.y, "TrainingAction":action_trainer_two}, "ball":ball.get_observation()} func get_return_value_as_utf8_JSON(): var observation = get_observarion() @@ -330,6 +348,7 @@ func timeout(): if(player_two_client_id): _server.get_peer(player_two_client_id).put_packet(return_value) + func pause(): #print("pause") ball.set_pause(true) @@ -341,9 +360,3 @@ func unpause(): ball.set_pause(false) $PlayerOne.set_pause(false) $PlayerTwo.set_pause(false) - - -# Wenn Trainerfunktion aktiv ist wird für einen menschlichen Spieler der Playtimer gestartet und die Eingabe -func _on_Playtimer_timeout(): - - pass # Replace with function body. diff --git a/Battle Pong/Main.tscn b/Battle Pong/Main.tscn index 92314128a94f3ee4083e02600ff43288c6f285c7..9240734d80fbbf9392d771bd3413eb7d67f4352e 100644 --- a/Battle Pong/Main.tscn +++ b/Battle Pong/Main.tscn @@ -27,8 +27,13 @@ __meta__ = { } [node name="DisplayMessage" type="Label" parent="."] -margin_right = 40.0 -margin_bottom = 14.0 +anchor_left = 0.5 +anchor_right = 0.5 +margin_left = 388.214 +margin_top = 43.0813 +margin_right = 638.214 +margin_bottom = 73.0813 +align = 1 __meta__ = { "_edit_use_anchors_": false } @@ -79,9 +84,5 @@ __meta__ = { [node name="WallBottom" parent="." instance=ExtResource( 3 )] position = Vector2( 0, 600 ) - -[node name="Playtimer" type="Timer" parent="."] -one_shot = true [connection signal="hit" from="PlayerTwo" to="." method="_on_PlayerTwo_hit"] [connection signal="hit" from="PlayerOne" to="." method="_on_PlayerOne_hit"] -[connection signal="timeout" from="Playtimer" to="." method="_on_Playtimer_timeout"] diff --git a/Battle Pong/MainMenu.gd b/Battle Pong/MainMenu.gd index 6b66d933ecfde2333e08bbfbd05e063023e1508b..d44016d220fa9325b963963a46e68c62aae7ae6a 100644 --- a/Battle Pong/MainMenu.gd +++ b/Battle Pong/MainMenu.gd @@ -52,6 +52,7 @@ func _on_but_trainer_with_images_pressed(): $"/root/GameSettings".rendering_enabled = true $"/root/GameSettings".learn_with_images = true $"/root/GameSettings".trainings_mode_enabled = true + get_tree().change_scene("res://Main.tscn") @@ -59,6 +60,7 @@ func _on_but_trainer_with_position_pressed(): $"/root/GameSettings".rendering_enabled = true $"/root/GameSettings".learn_with_images = false $"/root/GameSettings".trainings_mode_enabled = true + get_tree().change_scene("res://Main.tscn") diff --git a/Battle Pong/SettingsWindow.gd b/Battle Pong/SettingsWindow.gd index 2b23516f288f03535963e48e04a21c16588f8d83..fc400064a09ea0ab1b625ad597c89dfa41d21a38 100644 --- a/Battle Pong/SettingsWindow.gd +++ b/Battle Pong/SettingsWindow.gd @@ -21,15 +21,15 @@ func update_gui(): $VBoxContainer/grid_settings/vbox_image_settings/grid_image_settings/input_image_height.text = str($"/root/GameSettings".image_heigth) $VBoxContainer/grid_settings/vbox_image_settings/grid_image_settings/input_image_width.text = str($"/root/GameSettings".image_width) - $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_ip.text = $"/root/GameSettings".trainer_ip - $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_port.text = str($"/root/GameSettings".trainer_port) - if $"/root/GameSettings".trainer_position =="Left": - $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.pressed = false - elif $"/root/GameSettings".trainer_position =="Right": - $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.pressed = true - - $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.text = $"/root/GameSettings".trainer_position + #$VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_ip.text = $"/root/GameSettings".trainer_ip + #$VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_port.text = str($"/root/GameSettings".trainer_port) + #if $"/root/GameSettings".trainer_position =="Left": + # $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.pressed = false + #elif $"/root/GameSettings".trainer_position =="Right": + # $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.pressed = true + #$VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.text = $"/root/GameSettings".trainer_position + $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_realtime_enabled.pressed = $"/root/GameSettings".trainer_realtime_enabled $VBoxContainer/grid_settings/vbox_ball_settings/grid_ball_settings/input_ball_height.text = str($"/root/GameSettings".ball_height) $VBoxContainer/grid_settings/vbox_ball_settings/grid_ball_settings/input_ball_width.text = str($"/root/GameSettings".ball_width) @@ -61,9 +61,10 @@ func _on_but_save_pressed(): $"/root/GameSettings".image_heigth = $VBoxContainer/grid_settings/vbox_image_settings/grid_image_settings/input_image_height.text as int $"/root/GameSettings".image_width = $VBoxContainer/grid_settings/vbox_image_settings/grid_image_settings/input_image_width.text as int - $"/root/GameSettings".trainer_ip = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_ip.text - $"/root/GameSettings".trainer_port = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_port.text as int + #$"/root/GameSettings".trainer_ip = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_ip.text + #$"/root/GameSettings".trainer_port = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_port.text as int $"/root/GameSettings".trainer_position = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position.text + $"/root/GameSettings".trainer_realtime_enabled = $VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_realtime_enabled.pressed $"/root/GameSettings".ball_height = $VBoxContainer/grid_settings/vbox_ball_settings/grid_ball_settings/input_ball_height.text as int $"/root/GameSettings".ball_width = $VBoxContainer/grid_settings/vbox_ball_settings/grid_ball_settings/input_ball_width.text as int diff --git a/Battle Pong/SettingsWindow.tscn b/Battle Pong/SettingsWindow.tscn index d19e3b1032907c6a14fd5b6e867cae7daa5d1c79..c86b6595d7feefddc8e1a3a18f47013b0e56d0ed 100644 --- a/Battle Pong/SettingsWindow.tscn +++ b/Battle Pong/SettingsWindow.tscn @@ -36,7 +36,7 @@ __meta__ = { } [node name="grid_settings" type="GridContainer" parent="VBoxContainer"] -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 353.0 columns = 3 __meta__ = { @@ -44,17 +44,17 @@ __meta__ = { } [node name="vbox_game_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 105.0 [node name="lbl_title_game_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_game_settings"] -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 14.0 text = "Game:" [node name="grid_game_settings" type="GridContainer" parent="VBoxContainer/grid_settings/vbox_game_settings"] margin_top = 18.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 105.0 columns = 2 @@ -95,13 +95,13 @@ margin_right = 151.0 margin_bottom = 87.0 [node name="VSeparator" type="VSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 164.0 -margin_right = 168.0 +margin_left = 167.0 +margin_right = 171.0 margin_bottom = 105.0 [node name="vbox_image_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] -margin_left = 172.0 -margin_right = 344.0 +margin_left = 175.0 +margin_right = 347.0 margin_bottom = 105.0 [node name="lbl_title_image_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_image_settings"] @@ -156,83 +156,95 @@ margin_bottom = 80.0 [node name="HSeparator" type="HSeparator" parent="VBoxContainer/grid_settings"] margin_top = 109.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 113.0 [node name="HSeparator6" type="HSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 164.0 +margin_left = 167.0 margin_top = 109.0 -margin_right = 168.0 +margin_right = 171.0 margin_bottom = 113.0 [node name="HSeparator5" type="HSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 172.0 +margin_left = 175.0 margin_top = 109.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 113.0 [node name="vbox_trainer_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] margin_top = 117.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 271.0 [node name="lbl_title_trainer_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_trainer_settings"] -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 14.0 text = "Trainer:" [node name="grid_trainer_settings" type="GridContainer" parent="VBoxContainer/grid_settings/vbox_trainer_settings"] margin_top = 18.0 -margin_right = 160.0 -margin_bottom = 114.0 +margin_right = 163.0 +margin_bottom = 58.0 columns = 2 [node name="lbl_trainer_ip" type="Label" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] -margin_top = 5.0 -margin_right = 52.0 -margin_bottom = 19.0 +visible = false +margin_right = 104.0 +margin_bottom = 14.0 text = "IP" [node name="input_trainer_ip" type="LineEdit" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] +visible = false margin_left = 56.0 margin_right = 160.0 margin_bottom = 24.0 [node name="lbl_trainer_port" type="Label" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] -margin_top = 33.0 +visible = false +margin_top = 5.0 margin_right = 52.0 -margin_bottom = 47.0 +margin_bottom = 19.0 text = "Port" [node name="input_trainer_port" type="LineEdit" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] -margin_left = 56.0 -margin_top = 28.0 -margin_right = 160.0 -margin_bottom = 52.0 +visible = false +margin_right = 104.0 +margin_bottom = 24.0 [node name="lbl_trainer_position" type="Label" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] -margin_top = 69.0 -margin_right = 52.0 -margin_bottom = 83.0 +visible = false +margin_top = 13.0 +margin_right = 83.0 +margin_bottom = 27.0 text = "Position" [node name="input_trainer_position" type="CheckButton" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] -margin_left = 56.0 -margin_top = 56.0 -margin_right = 160.0 -margin_bottom = 96.0 +visible = false +margin_right = 104.0 +margin_bottom = 40.0 text = "Left" +[node name="lbl_trainer_realtime_enabled" type="Label" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] +margin_top = 13.0 +margin_right = 83.0 +margin_bottom = 27.0 +text = "Use realtime" + +[node name="input_trainer_realtime_enabled" type="CheckButton" parent="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings"] +margin_left = 87.0 +margin_right = 163.0 +margin_bottom = 40.0 + [node name="VSeparator2" type="VSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 164.0 +margin_left = 167.0 margin_top = 117.0 -margin_right = 168.0 +margin_right = 171.0 margin_bottom = 271.0 [node name="vbox_ball_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] -margin_left = 172.0 +margin_left = 175.0 margin_top = 117.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 271.0 [node name="lbl_title_ball_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_ball_settings"] @@ -307,34 +319,34 @@ margin_bottom = 136.0 [node name="HSeparator7" type="HSeparator" parent="VBoxContainer/grid_settings"] margin_top = 275.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 279.0 [node name="VSeparator3" type="HSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 164.0 +margin_left = 167.0 margin_top = 275.0 -margin_right = 168.0 +margin_right = 171.0 margin_bottom = 279.0 [node name="HSeparator2" type="HSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 172.0 +margin_left = 175.0 margin_top = 275.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 279.0 [node name="vbox_player_one_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] margin_top = 283.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 353.0 [node name="lbl_title_player_one_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_player_one_settings"] -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 14.0 text = "Player 1:" [node name="grid_player_one_settings" type="GridContainer" parent="VBoxContainer/grid_settings/vbox_player_one_settings"] margin_top = 18.0 -margin_right = 160.0 +margin_right = 163.0 margin_bottom = 70.0 columns = 2 @@ -362,15 +374,15 @@ margin_right = 105.0 margin_bottom = 52.0 [node name="VSeparator4" type="VSeparator" parent="VBoxContainer/grid_settings"] -margin_left = 164.0 +margin_left = 167.0 margin_top = 283.0 -margin_right = 168.0 +margin_right = 171.0 margin_bottom = 353.0 [node name="vbox_player_two_settings" type="VBoxContainer" parent="VBoxContainer/grid_settings"] -margin_left = 172.0 +margin_left = 175.0 margin_top = 283.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 353.0 [node name="lbl_title_player_two_settings" type="Label" parent="VBoxContainer/grid_settings/vbox_player_two_settings"] @@ -409,24 +421,24 @@ margin_bottom = 52.0 [node name="VSeparator5" type="HSeparator" parent="VBoxContainer"] margin_top = 357.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 361.0 [node name="but_save" type="Button" parent="VBoxContainer"] margin_top = 365.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 385.0 text = "Save" [node name="but_cancel" type="Button" parent="VBoxContainer"] margin_top = 389.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 409.0 text = "Cancel" [node name="but_reset" type="Button" parent="VBoxContainer"] margin_top = 413.0 -margin_right = 344.0 +margin_right = 347.0 margin_bottom = 433.0 text = "Reset" [connection signal="pressed" from="VBoxContainer/grid_settings/vbox_trainer_settings/grid_trainer_settings/input_trainer_position" to="." method="_on_input_trainer_position_pressed"]