Add ResourceLoader
This commit is contained in:
parent
5b26158acf
commit
bd0f367687
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"cSpell.words": [
|
||||
"tscn"
|
||||
]
|
||||
}
|
||||
26
loader.tscn
Normal file
26
loader.tscn
Normal file
@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://c7twiu4wplofj"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Loader.cs" id="1_leg4d"]
|
||||
|
||||
[node name="Loader" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_leg4d")
|
||||
|
||||
[node name="ProgressBar" type="ProgressBar" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -863.0
|
||||
offset_top = -37.5
|
||||
offset_right = 863.0
|
||||
offset_bottom = 37.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
@ -11,7 +11,7 @@ config_version=5
|
||||
[application]
|
||||
|
||||
config/name="导师模拟器"
|
||||
run/main_scene="res://lab.tscn"
|
||||
run/main_scene="res://loader.tscn"
|
||||
config/features=PackedStringArray("4.3", "C#", "GL Compatibility")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
@ -19,8 +19,8 @@ config/icon="res://icon.svg"
|
||||
|
||||
GameManager="*res://game_manager.tscn"
|
||||
OneSecondTicker="*res://game_manager.tscn"
|
||||
Player="*res://scripts/Player.cs"
|
||||
Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd"
|
||||
SceneTransit="*res://scene_transit.tscn"
|
||||
|
||||
[dialogic]
|
||||
|
||||
|
||||
54
scene_transit.tscn
Normal file
54
scene_transit.tscn
Normal file
@ -0,0 +1,54 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://xnssep8q3gm5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/SceneTransit.cs" id="1_138ac"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_n35b4"]
|
||||
resource_name = "transit"
|
||||
length = 0.3
|
||||
step = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:color")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_6aqtw"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColorRect:color")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g0ecv"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_6aqtw"),
|
||||
"transit": SubResource("Animation_n35b4")
|
||||
}
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer"]
|
||||
script = ExtResource("1_138ac")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
offset_right = 1920.0
|
||||
offset_bottom = 1080.0
|
||||
color = Color(0, 0, 0, 0)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_g0ecv")
|
||||
}
|
||||
@ -7,6 +7,7 @@ public partial class GameManager : Node
|
||||
/// Indicates if the game is currently in tutorial mode.
|
||||
/// </summary>
|
||||
public static bool IsTutorial { get; private set; }
|
||||
public static string NextScene { get; set; } = null;
|
||||
public static readonly Resource Arrow2x = ResourceLoader.Load("res://temp_res/kenney_ui-pack-space-expansion/PNG/Extra/Double/cursor_f.png");
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
|
||||
48
scripts/Loader.cs
Normal file
48
scripts/Loader.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class Loader : Control
|
||||
{
|
||||
private ProgressBar progressBar;
|
||||
private int sceneLoaded = 0;
|
||||
private string[] scenesToLoad = {
|
||||
"res://lab.tscn",
|
||||
"res://player.tscn"
|
||||
};
|
||||
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
progressBar = GetNode<ProgressBar>("ProgressBar");
|
||||
string nextScene = GameManager.NextScene;
|
||||
if (nextScene != null) {
|
||||
GameManager.NextScene = "res://lab.tscn";
|
||||
}
|
||||
ResourceLoader.LoadThreadedRequest(scenesToLoad[sceneLoaded]);
|
||||
progressBar.MaxValue = 100 * scenesToLoad.Length;
|
||||
}
|
||||
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
Godot.Collections.Array progress = new();
|
||||
switch(ResourceLoader.LoadThreadedGetStatus(scenesToLoad[sceneLoaded], progress))
|
||||
{
|
||||
case ResourceLoader.ThreadLoadStatus.InProgress:
|
||||
progressBar.Value = 100 * sceneLoaded + (int)((float)progress[0] * 100);
|
||||
break;
|
||||
case ResourceLoader.ThreadLoadStatus.Loaded:
|
||||
sceneLoaded++;
|
||||
if(sceneLoaded < scenesToLoad.Length) {
|
||||
ResourceLoader.LoadThreadedRequest(scenesToLoad[sceneLoaded]);
|
||||
} else {
|
||||
var transit = GetNode<SceneTransit>("/root/SceneTransit");
|
||||
transit.Transit("res://lab.tscn", false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
GD.Print("Error loading scene: " + scenesToLoad[sceneLoaded]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
37
scripts/SceneTransit.cs
Normal file
37
scripts/SceneTransit.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public partial class SceneTransit : CanvasLayer
|
||||
{
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
Layer = -1;
|
||||
Hide();
|
||||
}
|
||||
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
}
|
||||
|
||||
public async void Transit(string nextScene, bool needLoadResources = true)
|
||||
{
|
||||
GameManager.NextScene = nextScene;
|
||||
var ap = GetNode<AnimationPlayer>("AnimationPlayer");
|
||||
Layer = 9999;
|
||||
Show();
|
||||
ap.Play("transit");
|
||||
await ToSignal(ap, AnimationMixer.SignalName.AnimationFinished);
|
||||
if (needLoadResources) {
|
||||
GetTree().ChangeSceneToFile("res://loader.tscn");
|
||||
} else {
|
||||
GetTree().ChangeSceneToFile(nextScene);
|
||||
}
|
||||
ap.PlayBackwards("transit");
|
||||
await ToSignal(ap, AnimationMixer.SignalName.AnimationFinished);
|
||||
Layer = -1;
|
||||
Hide();
|
||||
}
|
||||
|
||||
}
|
||||
462
student.tscn
462
student.tscn
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user