Added more timelines renamed Global to API

master
Hecht 5 months ago
parent a325679c95
commit 16650b0107

@ -17,7 +17,7 @@ config/icon="res://icon.svg"
[autoload] [autoload]
Global="*res://scenes/Global/Global.tscn" API="*res://scenes/Global/API.tscn"
Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd" Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd"
[dialogic] [dialogic]
@ -26,7 +26,10 @@ directories/dch_directory={
"Master": "res://timelines/Master.dch" "Master": "res://timelines/Master.dch"
} }
directories/dtl_directory={ directories/dtl_directory={
"new_player_wizard": "res://timelines/new_player_wizard.dtl" "characters": "res://timelines/characters.dtl",
"main": "res://timelines/main.dtl",
"new_player_wizard": "res://timelines/new_player_wizard.dtl",
"tournaments": "res://timelines/tournaments.dtl"
} }
layout/style_list=["res://assets/Dialogic/Styles/VisualNovel.tres"] layout/style_list=["res://assets/Dialogic/Styles/VisualNovel.tres"]
layout/default_style="res://assets/Dialogic/Styles/VisualNovel.tres" layout/default_style="res://assets/Dialogic/Styles/VisualNovel.tres"

@ -0,0 +1,141 @@
extends Node2D
@onready var _http_request = $HTTPRequest
const Response = preload("res://scenes/util/Response.gd")
var user_name : String = "FooBar"
var _user_ulid : String = ""
var _dojo_ulid : String = ""
var _dojos: Dictionary = {}
var _users: Dictionary = {}
var _own_characters: Dictionary = {}
var _own_characters_array : Array = []
var _all_characters: Dictionary = {}
var _techniques: Dictionary = {}
var _techniques_array : Array = []
# Called when the node enters the scene tree for the first time.
func _ready():
_http_request.base_address = "http://localhost:8000/api"
_http_request.auth_token = "_sGFrChRV6ML0eWZC2qSUZzEGNLPbAhP4dwmnWhQ5bQ9xIi2pwHWQ1CzybFPDLeK8dTNx6GgWdR-Jcz-Z9_aC0hlY2h0fDIwMjQtMDYtMTNUMTk6MTU6MzkrMDA6MDA="
for argument in OS.get_cmdline_user_args():
print_debug("argument: %s" % argument)
var key_value = argument.split("=", true, 1)
if "--token" == key_value[0]:
_http_request.auth_token = key_value[1]
elif "--env" == key_value[0]:
if key_value[1] == "dev":
_http_request.base_address = "http://localhost:8000/api"
else:
_http_request.base_address = "https://dojo.animegame.eu/api"
var tmp = _http_request.auth_token.replace("-", "/").replace("_", "+")
# replace \-_ with /\+
var chunks = Marshalls.base64_to_raw(tmp)
user_name = chunks.slice(64).get_string_from_utf8().split('|')[0]
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
pass
func get_uri(type: String, entity: Variant) -> String:
return "api/%s/%s" % [type, entity if entity is String else entity["id"]]
func create_dojo(dojo_name : String) -> Response:
var body = JSON.stringify({"name": dojo_name})
return await _http_request.post_http_request("dojos", body)
func create_character(name: String, strength: int, constitution: int, agility: int, chi: int, techniques: Array) -> bool:
var technique_uris : Array[String] = []
for technique in techniques:
technique_uris.append(get_uri("techniques", technique))
var body = JSON.stringify({
"dojo": "/api/dojos/%s" % _dojo_ulid, # meh!
"name": name,
"strength": strength,
"constitution": constitution,
"agility": agility,
"chi": chi,
"techniques": technique_uris
})
var response: Response = await _http_request.post_http_request("characters", body)
return response.status == OK
func update_user_preferences(values: Dictionary) -> Response:
var body = JSON.stringify({"properties": values})
var user = await get_user()
return await _http_request.patch_http_request("users/%s" % user["id"], body)
func get_dojo() -> Dictionary:
if _dojo_ulid == "":
var result: Response = await _http_request.get_http_request_sync("dojo")
if result.status == OK:
_dojo_ulid = result.data["id"]
_dojos[_dojo_ulid] = result.data
else:
return {}
return _dojos[_dojo_ulid]
func get_dojo_by_id(id: String) -> Dictionary:
return await __get_entity_by_id(_dojos, "dojos", id)
func get_user() -> Dictionary:
if _user_ulid == "":
var result = await _http_request.get_http_request_sync("users/authName/%s" % user_name)
if result.status == OK:
_user_ulid = result.data["id"]
_users[_user_ulid] = result.data
else:
return {}
return _users[_user_ulid]
func get_user_by_id(id: String) -> Dictionary:
return await __get_entity_by_id(_users, "users", id)
func get_own_characters() -> Array:
return await __get_entity_list(_own_characters, _own_characters_array, "dojo/characters")
func get_techniques() -> Array:
return await __get_entity_list(_techniques, _techniques_array, "techniques")
func get_tournaments() -> Array:
return await _http_request.get_http_request_sync("tournaments")
func get_character_by_id(id: String) -> Dictionary:
if _own_characters.has(id):
return _own_characters[id]
return await __get_entity_by_id(_all_characters, "characters", id)
func __get_entity_by_id(entities: Dictionary, type: String, id: String) -> Dictionary:
if not entities.has(id):
var result: Response = await _http_request.get_http_request_sync("%s/%s" % [type, id])
if result.status == OK:
entities[id] = result.data
else:
return {}
return entities[id];
func __get_entity_list(entities: Dictionary, _entities_array: Array, type: String) -> Array:
if entities.is_empty():
var result: Response = await _http_request.get_http_request_sync(type)
if result.status == OK:
for entity in result.data:
entities[entity["id"]] = entity
_entities_array.append(entity)
else:
return []
return _entities_array

@ -1,12 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://3qgip1nsocyh"] [gd_scene load_steps=3 format=3 uid="uid://3qgip1nsocyh"]
[ext_resource type="Script" path="res://scenes/Global/Global.gd" id="1_yoteo"] [ext_resource type="Script" path="res://scenes/Global/API.gd" id="1_hqdog"]
[ext_resource type="Script" path="res://scenes/Global/APIRequest.gd" id="2_jxuea"] [ext_resource type="Script" path="res://scenes/Global/APIRequest.gd" id="2_yhpn3"]
[node name="Global" type="Node2D"] [node name="Global" type="Node2D"]
script = ExtResource("1_yoteo") script = ExtResource("1_hqdog")
[node name="HTTPRequest" type="HTTPRequest" parent="."] [node name="HTTPRequest" type="HTTPRequest" parent="."]
script = ExtResource("2_jxuea") script = ExtResource("2_yhpn3")
[connection signal="request_completed" from="HTTPRequest" to="HTTPRequest" method="_on_request_completed"] [connection signal="request_completed" from="HTTPRequest" to="HTTPRequest" method="_on_request_completed"]

@ -1,6 +1,6 @@
extends HTTPRequest extends HTTPRequest
const Response = preload("../util/Response.gd") const Response = preload("res://scenes/util/Response.gd")
var _callback : Callable var _callback : Callable
var auth_token: String var auth_token: String
@ -74,5 +74,7 @@ func _on_request_completed(result, response_code, headers, body):
var json = JSON.new() var json = JSON.new()
json.parse(body.get_string_from_utf8()) json.parse(body.get_string_from_utf8())
response.data = json.get_data() response.data = json.get_data()
else:
print_debug("%s: %s" % [result, response_code])
_callback.call(response) _callback.call(response)

@ -1,60 +0,0 @@
extends Node2D
@onready var _http_request = $HTTPRequest
const Response = preload("../util/Response.gd")
var user_name : String = "FooBar"
var _dojo : Dictionary = {}
var _user: Dictionary = {}
# Called when the node enters the scene tree for the first time.
func _ready():
_http_request.base_address = "http://localhost:8000/api"
_http_request.auth_token = "_sGFrChRV6ML0eWZC2qSUZzEGNLPbAhP4dwmnWhQ5bQ9xIi2pwHWQ1CzybFPDLeK8dTNx6GgWdR-Jcz-Z9_aC0hlY2h0fDIwMjQtMDYtMTNUMTk6MTU6MzkrMDA6MDA="
for argument in OS.get_cmdline_user_args():
print_debug("argument: %s" % argument)
var key_value = argument.split("=", true, 1)
if "--token" == key_value[0]:
_http_request.auth_token = key_value[1]
elif "--env" == key_value[0]:
if key_value[1] == "dev":
_http_request.base_address = "http://localhost:8000/api"
else:
_http_request.base_address = "https://dojo.animegame.eu/api"
var tmp = _http_request.auth_token.replace("-", "/").replace("_", "+")
# replace \-_ with /\+
var chunks = Marshalls.base64_to_raw(tmp)
user_name = chunks.slice(64).get_string_from_utf8().split('|')[0]
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
pass
func create_dojo(dojo_name : String) -> Response:
var body = JSON.stringify({"name": dojo_name})
return await _http_request.post_http_request("dojos", body)
func update_user_preferences(values: Dictionary) -> Response:
var body = JSON.stringify({"properties": values})
var user = await get_user()
return await _http_request.patch_http_request("users/%s" % user["id"], body)
func get_dojo() -> Dictionary:
if _dojo.is_empty():
var result: Response = await _http_request.get_http_request_sync("dojo")
if result.status == OK:
_dojo = result.data
return _dojo
func get_user() -> Dictionary:
if _user.is_empty():
var result = await _http_request.get_http_request_sync("users/authName/%s" % user_name)
if result.status == OK:
_user = result.data
return _user

@ -1,27 +1,30 @@
extends Control extends Control
@onready var _global_scn = get_node("/root/Global") const Response = preload("res://scenes/util/Response.gd")
const Response = preload("../util/Response.gd") @onready var _api = get_node("/root/API")
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
if _global_scn.user_name: Dialogic.signal_event.connect(_on_dialogic_signal)
Dialogic.VAR.user = _global_scn.user_name if _api.user_name:
Dialogic.VAR.user = _api.user_name
var timeline: Variant = "res://timelines/new_player_wizard.dtl"
var dojo : Dictionary = await _global_scn.get_dojo() var dojo : Dictionary = await _api.get_dojo()
if not dojo.is_empty(): if not dojo.is_empty():
Dialogic.VAR.dojo = dojo['name'] Dialogic.VAR.dojo = dojo['name']
var user : Dictionary = await _global_scn.get_user() var user : Dictionary = await _api.get_user()
if user.has("properties") and user["properties"] is Dictionary: if user.has("properties") and user["properties"] is Dictionary:
var properties: Dictionary = user["properties"] var properties: Dictionary = user["properties"]
Dialogic.VAR.bg.clan = properties.get("bg.clan", "") Dialogic.VAR.bg.clan = properties.get("bg.clan", "")
Dialogic.VAR.bg.community = properties.get("bg.community", "") Dialogic.VAR.bg.community = properties.get("bg.community", "")
Dialogic.VAR.bg.country = properties.get("bg.country", "") Dialogic.VAR.bg.country = properties.get("bg.country", "")
Dialogic.VAR.bg.username = properties.get("bg.username", "") Dialogic.VAR.bg.username = properties.get("bg.username", "")
timeline = "res://timelines/main.dtl"
Dialogic.signal_event.connect(_on_dialogic_signal) Dialogic.start(timeline)
Dialogic.start("res://timelines/new_player_wizard.dtl")
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
@ -29,24 +32,28 @@ func _process(_delta):
pass pass
func _on_dialogic_signal(argument:String): func _on_dialogic_signal(argument:String):
Dialogic.paused = true match argument:
if argument == "create_dojo": "create_dojo":
var result: Response = await _global_scn.create_dojo(Dialogic.VAR.newdojo) create_dojo()
if result.status == OK: "update_preferences":
Dialogic.VAR.dojo = Dialogic.VAR.newdojo update_preferences()
else:
print_debug("%s failed: %s - %s" % [argument, result.code, result.data]) func create_dojo():
elif argument == "update_preferences": var result: Response = await _api.create_dojo(Dialogic.VAR.newdojo)
var result: Response = await _global_scn.update_user_preferences({ if result.status == OK:
"bg.clan": Dialogic.VAR.bg.clan, Dialogic.VAR.dojo = Dialogic.VAR.newdojo
"bg.community": Dialogic.VAR.bg.community, else:
"bg.country": Dialogic.VAR.bg.country, print_debug("create_dojo failed: %s - %s" % [result.code, result.data])
"bg.username": Dialogic.VAR.bg.username
}) func update_preferences():
if result.status == OK: var result: Response = await _api.update_user_preferences({
print_debug("Update preferences was successful!") "bg.clan": Dialogic.VAR.bg.clan,
else: "bg.community": Dialogic.VAR.bg.community,
print_debug("Update preferences failed: %s - %s" % [result.code, result.data]) "bg.country": Dialogic.VAR.bg.country,
elif argument == "the_end": "bg.username": Dialogic.VAR.bg.username
return })
Dialogic.paused = false if result.status == OK:
print_debug("update_preferences was successful!")
else:
print_debug("update_preferences failed: %s - %s" % [result.code, result.data])

@ -1,4 +1,4 @@
var status : Error var status : Error
var code : HTTPClient.ResponseCode var code : HTTPClient.ResponseCode
var data : Dictionary var data : Variant

@ -0,0 +1,4 @@
[background arg="res://assets/Background/Gymzaal.png" fade="0.0"]
join Master 0
Master: Dieses Menü ist leider noch eine Baustelle
jump main/

@ -0,0 +1,8 @@
[background arg="res://assets/Background/Gymzaal.png" fade="0.0"]
join Master 0
Master: Was möchtest du machen?
- Charactere
jump characters/
- Turniere
jump tournaments/
[end_timeline]

@ -47,6 +47,5 @@ if {bg.clan} == "":
[text_input var="bg.clan"] [text_input var="bg.clan"]
Vielen Dank für die Informationen! Vielen Dank für die Informationen!
[signal arg="update_preferences"] [signal arg="update_preferences"]
Das wars leider schon wieder! \:( jump main/
[signal arg="the_end"]
[end_timeline] [end_timeline]

@ -0,0 +1,4 @@
[background arg="res://assets/Background/Gymzaal.png" fade="0.0"]
join Master 0
Master: Dieses Menü ist leider noch eine Baustelle
jump main/
Loading…
Cancel
Save