init
This commit is contained in:
132
scenes/Main/Main.cs
Normal file
132
scenes/Main/Main.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Godot;
|
||||
|
||||
namespace openF1Manager.scenes.Main;
|
||||
|
||||
public partial class Main : Node
|
||||
{
|
||||
public enum APIEndpoints
|
||||
{
|
||||
CarData,
|
||||
Drivers,
|
||||
Intervals,
|
||||
Laps,
|
||||
Location,
|
||||
Meetings,
|
||||
Overtakes,
|
||||
Pit,
|
||||
Position,
|
||||
RaceControl,
|
||||
Sessions,
|
||||
SessionResult,
|
||||
StartingGrid,
|
||||
Stints,
|
||||
TeamRadio,
|
||||
Weather
|
||||
}
|
||||
|
||||
private static readonly Dictionary<APIEndpoints, string> enpointUrl = new()
|
||||
{
|
||||
{ APIEndpoints.CarData, "car_data" },
|
||||
{ APIEndpoints.Drivers, "drivers" },
|
||||
{ APIEndpoints.Intervals, "intervals" },
|
||||
{ APIEndpoints.Laps, "laps" },
|
||||
{ APIEndpoints.Location, "location" },
|
||||
{ APIEndpoints.Meetings, "meetings" },
|
||||
{ APIEndpoints.Overtakes, "overtakes" },
|
||||
{ APIEndpoints.Pit, "pit" },
|
||||
{ APIEndpoints.Position, "position" },
|
||||
{ APIEndpoints.RaceControl, "race_control" },
|
||||
{ APIEndpoints.Sessions, "sessions" },
|
||||
{ APIEndpoints.SessionResult, "session_result" },
|
||||
{ APIEndpoints.StartingGrid, "starting_grid" },
|
||||
{ APIEndpoints.Stints, "stints" },
|
||||
{ APIEndpoints.TeamRadio, "team_radio" },
|
||||
{ APIEndpoints.Weather, "weather" },
|
||||
};
|
||||
|
||||
[Export] public APIEndpoints Enpoint = APIEndpoints.Sessions;
|
||||
private string openf1Url = "https://api.openf1.org/v1/";
|
||||
|
||||
[Export] public string options = "date_start>=2023-09-01&date_end<=2023-09-30";
|
||||
|
||||
public override async void _Ready()
|
||||
{
|
||||
HttpRequest httpRequest = GetNode<HttpRequest>("HTTPRequest");
|
||||
// httpRequest.RequestCompleted += OnRequestCompleted;
|
||||
|
||||
// Created address
|
||||
GD.Print("Trying created address");
|
||||
string requestUrl = $"{openf1Url}{enpointUrl[Enpoint]}?{options}";
|
||||
GD.Print(requestUrl);
|
||||
//var error = httpRequest.Request(requestUrl);
|
||||
|
||||
|
||||
// await ToSignal(httpRequest, "request_completed");
|
||||
|
||||
// // Correct address
|
||||
// GD.Print("Trying hardcoded address");
|
||||
// requestUrl = "https://api.openf1.org/v1/sessions?date_start%3E%3D2023-09-01&date_end%3C%3D2023-09-30";
|
||||
// GD.Print("https://api.openf1.org/v1/sessions?date_start%3E%3D2023-09-01&date_end%3C%3D2023-09-30");
|
||||
// error = httpRequest.Request(requestUrl);
|
||||
// if (error != Error.Ok)
|
||||
// {
|
||||
// GD.Print(error);
|
||||
// return;
|
||||
// }
|
||||
|
||||
var children = GetChildren();
|
||||
|
||||
foreach (var child in children)
|
||||
{
|
||||
if (child is Control control)
|
||||
{
|
||||
GD.Print(control.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnRequestCompleted(long result, long responseCode, string[] headers, byte[] body)
|
||||
{
|
||||
var text = Encoding.UTF8.GetString(body);
|
||||
var parsed = Json.ParseString(text);
|
||||
|
||||
if (parsed.VariantType == Variant.Type.Array)
|
||||
{
|
||||
var arr = parsed.AsGodotArray();
|
||||
GD.Print($"Array items: {arr.Count}");
|
||||
foreach (var item in arr)
|
||||
{
|
||||
// Each item is typically an object/dictionary; print a few fields or all key-values
|
||||
if (item.VariantType == Variant.Type.Dictionary)
|
||||
{
|
||||
var dict = item.AsGodotDictionary();
|
||||
foreach (var (k, v) in dict)
|
||||
{
|
||||
GD.Print($"{k}: {v}");
|
||||
}
|
||||
GD.Print("----");
|
||||
}
|
||||
else
|
||||
{
|
||||
GD.Print(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (parsed.VariantType == Variant.Type.Dictionary)
|
||||
{
|
||||
var json = parsed.AsGodotDictionary();
|
||||
GD.Print($"Object keys: {json.Count}");
|
||||
foreach (var (key, value) in json)
|
||||
{
|
||||
GD.Print($"{key}: {value}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GD.PrintErr($"Unexpected JSON root type: {parsed.VariantType}");
|
||||
GD.Print(text); // Optional: inspect raw payload
|
||||
}
|
||||
}
|
||||
}
|
||||
1
scenes/Main/Main.cs.uid
Normal file
1
scenes/Main/Main.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cj1o6v4tq5tiq
|
||||
55
scenes/Main/main.tscn
Normal file
55
scenes/Main/main.tscn
Normal file
@@ -0,0 +1,55 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cx2vkr0hbfe4c"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cj1o6v4tq5tiq" path="res://scenes/Main/Main.cs" id="1_gol0p"]
|
||||
[ext_resource type="PackedScene" uid="uid://icuiqfoy5pkr" path="res://scenes/Tools/session_tool.tscn" id="2_br8qb"]
|
||||
|
||||
[node name="Main" type="Node"]
|
||||
script = ExtResource("1_gol0p")
|
||||
|
||||
[node name="HTTPRequest" type="HTTPRequest" parent="."]
|
||||
|
||||
[node name="HUD" type="MarginContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="SessionTool" parent="HUD" instance=ExtResource("2_br8qb")]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="GlobalTool" type="MarginContainer" parent="HUD"]
|
||||
clip_contents = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="BoxContainer" type="BoxContainer" parent="HUD/GlobalTool"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="HUD/GlobalTool/BoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="HUD/GlobalTool/BoxContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="HUD/GlobalTool/BoxContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "openF1 Manager"
|
||||
|
||||
[node name="Button" type="Button" parent="HUD/GlobalTool/BoxContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Send Request"
|
||||
|
||||
[node name="ItemList" type="ItemList" parent="HUD/GlobalTool/BoxContainer/VBoxContainer"]
|
||||
clip_contents = false
|
||||
custom_minimum_size = Vector2(150, 20)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
max_text_lines = 3
|
||||
auto_width = true
|
||||
text_overrun_behavior = 2
|
||||
item_count = 1
|
||||
item_0/text = "None"
|
||||
Reference in New Issue
Block a user