diff --git a/Battle Pong/Main.gd b/Battle Pong/Main.gd index 5a743b882a8826c24808b146b72aa220c6b7937d..f5320cad36d047912684ded9042ded1635a24dd7 100644 --- a/Battle Pong/Main.gd +++ b/Battle Pong/Main.gd @@ -43,6 +43,7 @@ func _ready(): learn_with_images = $"/root/GameSettings".learn_with_images game_playtime_per_step = $"/root/GameSettings".game_playtime_per_step max_wins = $"/root/GameSettings".game_wins_to_reset + if not enable_rendering: VisualServer.render_loop_enabled = false # disable rendering to create a massive boost if learn_with_images: @@ -248,11 +249,18 @@ func _on_data(id): play() var return_value = null if learn_with_images: - return_value = yield(get_yielded_return_value_as_utf8_JSON(), "completed") + return_value = yield(get_yielded_return_value(), "completed") + else: + return_value = get_return_value() + + if (player_one_client_id != null) and (player_one_client_id == id): + _server.get_peer(id).put_packet((JSON.print(return_value['player_one'])).to_utf8()) + elif player_two_client_id != null and player_two_client_id == id: + _server.get_peer(id).put_packet((JSON.print(return_value['player_two'])).to_utf8()) else: - return_value = get_return_value_as_utf8_JSON() - _server.get_peer(id).put_packet(return_value) + _server.get_peer(id).put_packet((JSON.print(return_value)).to_utf8()) # Fallback, if the id is unknown pass + if($"/root/GameSettings".trainings_mode_enabled): if(i=="player_one_training"): next_step_player_one = true @@ -287,19 +295,25 @@ func _on_data(id): timeout() -func get_observarion(): - 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_observation(): + var ball_observation=ball.get_observation() + var player_one = {"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_observation['player_one']} + var player_two = {"PlayerOne":{"X":abs($PlayerTwo.position.x - $"/root/GameSettings".display_window_width),"Y":$PlayerTwo.position.y, "TrainingAction":action_trainer_two}, "PlayerTwo":{"X":abs($PlayerOne.position.x- $"/root/GameSettings".display_window_width),"Y":$PlayerOne.position.y, "TrainingAction":action_trainer_one}, "ball":ball_observation['player_two']} + return {"player_one":player_one, "player_two":player_two} -func get_return_value_as_utf8_JSON(): - var observation = get_observarion() - var return_value = {"observation":observation, "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two}} - return (JSON.print(return_value)).to_utf8() - -func get_yielded_return_value_as_utf8_JSON(): - var observation = get_observarion() +func get_return_value(): + var observation = get_observation() + var return_value_player_one = {"observation":observation['player_one'], "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two}} + var return_value_player_two = {"observation":observation['player_two'], "reward":{"PlayerOne":reward_player_two, "PlayerTwo":reward_player_one}, "done":(not playing), "info":{"PlayerOneScore":score_player_two, "PlayerTwoScore":score_player_one}} + return {'player_one':return_value_player_one, 'player_two':return_value_player_two} + +func get_yielded_return_value(): + var observation = get_observation() var screenshot = yield(get_screenshot(), "completed") - var return_value = {"observation":observation, "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two, "screenshot":screenshot}} - return (JSON.print(return_value)).to_utf8() + + var return_value_player_one = {"observation":observation['player_one'], "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two, "screenshot":screenshot['player_one']}} + var return_value_player_two = {"observation":observation['player_two'], "reward":{"PlayerOne":reward_player_two, "PlayerTwo":reward_player_one}, "done":(not playing), "info":{"PlayerOneScore":score_player_two, "PlayerTwoScore":score_player_one, "screenshot":screenshot['player_two']}} + return {'player_one':return_value_player_one, 'player_two':return_value_player_two} func get_screenshot(): get_viewport().set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME) @@ -318,16 +332,24 @@ func get_screenshot(): #thumbnail.save_png('test.png') # Save Image as file - to debug - var array : PoolByteArray = thumbnail.get_data() var sg_width = thumbnail.get_width() var sg_height = thumbnail.get_height() var sg_format = thumbnail.get_format() - var sg_u_size = array.size() - var sg_saved_img = Marshalls.raw_to_base64(array) - - var metadata = {"image" : sg_saved_img, "size" : sg_u_size, "width" : sg_width, "height" : sg_height, "format" : sg_format} - return metadata + var array_player_one : PoolByteArray = thumbnail.get_data() + var sg_saved_img_player_one = Marshalls.raw_to_base64(array_player_one) + var sg_u_size_player_one = array_player_one.size() + var screenshot_player_one = {"image" : sg_saved_img_player_one, "size" : sg_u_size_player_one, "width" : sg_width, "height" : sg_height, "format" : sg_format} + + thumbnail.flip_x() + var array_player_two : PoolByteArray = thumbnail.get_data() + var sg_saved_img_player_two = Marshalls.raw_to_base64(array_player_two) + var sg_u_size_player_two = array_player_two.size() + var screenshot_player_two = {"image" : sg_saved_img_player_one, "size" : sg_u_size_player_two, "width" : sg_width, "height" : sg_height, "format" : sg_format} + + + return {"player_one":screenshot_player_one, "player_two":screenshot_player_two} + func timeout(): pause() @@ -340,17 +362,17 @@ func timeout(): var return_value = null if learn_with_images: - return_value = yield(get_yielded_return_value_as_utf8_JSON(), "completed") + return_value = yield(get_yielded_return_value(), "completed") else: - return_value = get_return_value_as_utf8_JSON() + return_value = get_return_value() reward_player_one = 0 reward_player_two = 0 ##print(return_value) if(player_one_client_id): - _server.get_peer(player_one_client_id).put_packet(return_value) + _server.get_peer(player_one_client_id).put_packet((JSON.print(return_value['player_one'])).to_utf8()) if(player_two_client_id): - _server.get_peer(player_two_client_id).put_packet(return_value) + _server.get_peer(player_two_client_id).put_packet((JSON.print(return_value['player_two'])).to_utf8()) func pause():