mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-28 15:01:53 +08:00
Compare commits
32 Commits
0eabde6852
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 52a6f6b3c5 | |||
| 75adfed454 | |||
| 0d3c1790af | |||
| 15e5bcb5bc | |||
| 11a293378c | |||
| 7e48372902 | |||
| d039e252f6 | |||
| f12a5ee43a | |||
| 2f3912da34 | |||
| 75fbef8895 | |||
| 14deb2de71 | |||
| cc103f274b | |||
| 30527a18a8 | |||
| f6e71507ce | |||
| edc31d876e | |||
| b5c2152d4c | |||
| 8137b398a9 | |||
| 5c85b4c10c | |||
| fac8d82157 | |||
| dc4b080a09 | |||
| 4d1f68cac1 | |||
| 492373a48e | |||
| e8ee2932bb | |||
| c23d0355fe | |||
| cdba10c867 | |||
| f9e512a5e6 | |||
| 6b31030887 | |||
| 5e82841d58 | |||
| e377840a16 | |||
| bd85129ecc | |||
| e1c017bf3a | |||
| e53af2a163 |
+2
-1
@@ -2,4 +2,5 @@
|
||||
.codebuddy
|
||||
build/*
|
||||
!build/.gitkeep
|
||||
*.zip
|
||||
*.zip
|
||||
android
|
||||
@@ -0,0 +1,250 @@
|
||||
[gd_scene format=3 uid="uid://m8a4nay1pmmg"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cd1xb8m6rvoph" path="res://scripts/Structs/Character.gd" id="1_dt83t"]
|
||||
[ext_resource type="Texture2D" uid="uid://dwwpkn4q07ja2" path="res://icon.svg" id="2_dt83t"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dt83t"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.8)
|
||||
border_color = Color(1, 1, 1, 1)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_detail = 1
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_dt83t"]
|
||||
font_size = 20
|
||||
outline_size = 1
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_fnmic"]
|
||||
font_size = 12
|
||||
font_color = Color(1, 1, 1, 0.39215687)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_myhk0"]
|
||||
font_size = 12
|
||||
|
||||
[sub_resource type="Animation" id="Animation_dt83t"]
|
||||
length = 0.001
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(0.85, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(0.85, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".:modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0.5)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".:borderOpacity")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_myhk0"]
|
||||
resource_name = "hide"
|
||||
length = 0.5
|
||||
step = 0.1
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0),
|
||||
"points": PackedFloat32Array(1, 0, 0, 0, -0.3, 0.85, 0, 0, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.5)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(2, 0),
|
||||
"points": PackedFloat32Array(1, 0, 0, 0, -0.3, 0.85, 0, 0, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.5)
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".:modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0.5)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".:borderOpacity")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [1.0, 0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_fnmic"]
|
||||
resource_name = "hide"
|
||||
length = 0.5
|
||||
step = 0.1
|
||||
tracks/0/type = "bezier"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:scale:x")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0),
|
||||
"points": PackedFloat32Array(0.85, 0, 0, 0, 0.3, 1, 0, 0, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.5)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".:scale:y")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0),
|
||||
"points": PackedFloat32Array(0.85, 0, 0, 0, 0.3, 1, 0, 0, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.5)
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".:modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0.5), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".:borderOpacity")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, 1.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xuke2"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_dt83t"),
|
||||
&"hide": SubResource("Animation_myhk0"),
|
||||
&"show": SubResource("Animation_fnmic")
|
||||
}
|
||||
|
||||
[node name="panel" type="PanelContainer" unique_id=1046363300]
|
||||
modulate = Color(1, 1, 1, 0.5)
|
||||
offset_right = 226.0
|
||||
offset_bottom = 212.0
|
||||
scale = Vector2(0.85, 0.85)
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_dt83t")
|
||||
script = ExtResource("1_dt83t")
|
||||
avatar = ExtResource("2_dt83t")
|
||||
description = "这是一个描述,"
|
||||
fields = Array[int]([0])
|
||||
fieldValues = Array[float]([0.0])
|
||||
|
||||
[node name="wrapper" type="VBoxContainer" parent="." unique_id=2023039659]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="avatarTexture" type="TextureRect" parent="wrapper" unique_id=1334645594]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("2_dt83t")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="infoContainer" type="VBoxContainer" parent="wrapper" unique_id=143242635]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="wrapper/infoContainer" unique_id=533915880]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="nameLabel" type="Label" parent="wrapper/infoContainer/VBoxContainer" unique_id=516147781]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "Unknown Character"
|
||||
label_settings = SubResource("LabelSettings_dt83t")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="sloganLabel" type="Label" parent="wrapper/infoContainer/VBoxContainer" unique_id=280562204]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "“Slogan”"
|
||||
label_settings = SubResource("LabelSettings_fnmic")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="descriptionLabel" type="Label" parent="wrapper/infoContainer" unique_id=808054282]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(100, 10)
|
||||
layout_mode = 2
|
||||
text = "这是一个描述,"
|
||||
label_settings = SubResource("LabelSettings_myhk0")
|
||||
horizontal_alignment = 1
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="fields" type="VBoxContainer" parent="wrapper" unique_id=437152370]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="animator" type="AnimationPlayer" parent="." unique_id=1012843997]
|
||||
unique_name_in_owner = true
|
||||
libraries/ = SubResource("AnimationLibrary_xuke2")
|
||||
@@ -1,47 +1,48 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://bykwevnv7keeh"]
|
||||
[gd_scene format=3 uid="uid://bykwevnv7keeh"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Structs/Feed.gd" id="1_2ea75"]
|
||||
[ext_resource type="Script" uid="uid://nt81whieye7h" path="res://scripts/Structs/Feed.gd" id="1_2ea75"]
|
||||
[ext_resource type="Theme" uid="uid://dhvs6urgf6jr5" path="res://themes/main.tres" id="2_lvrpo"]
|
||||
[ext_resource type="PackedScene" uid="uid://bt370a1djjg5p" path="res://components/UI/FeedName.tscn" id="4_aewpy"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_n2ewr"]
|
||||
content_margin_left = 30.0
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3g2k7"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 30.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.5)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0, 0, 0, 0.75)
|
||||
corner_radius_top_left = 5
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
bg_color = Color(0, 0, 0, 0.70000005)
|
||||
border_width_left = 10
|
||||
border_width_top = 10
|
||||
border_width_right = 10
|
||||
border_width_bottom = 10
|
||||
border_color = Color(1, 1, 1, 1)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_top_right = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_radius_bottom_left = 15
|
||||
corner_detail = 1
|
||||
|
||||
[node name="FeedCard" type="PanelContainer"]
|
||||
[node name="FeedCard" type="PanelContainer" unique_id=1794851856]
|
||||
offset_right = 200.0
|
||||
offset_bottom = 300.0
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_n2ewr")
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_3g2k7")
|
||||
script = ExtResource("1_2ea75")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="container" type="VBoxContainer" parent="."]
|
||||
[node name="container" type="VBoxContainer" parent="." unique_id=2054000756]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="selectBtn" type="Button" parent="container"]
|
||||
[node name="selectBtn" type="Button" parent="container" unique_id=775671566]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme = ExtResource("2_lvrpo")
|
||||
text = "确定"
|
||||
|
||||
[node name="info" type="VBoxContainer" parent="container"]
|
||||
[node name="info" type="VBoxContainer" parent="container" unique_id=1288419607]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="avatar" type="TextureRect" parent="container/info"]
|
||||
[node name="avatar" type="TextureRect" parent="container/info" unique_id=239110315]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(75, 75)
|
||||
layout_mode = 2
|
||||
@@ -50,20 +51,20 @@ size_flags_vertical = 0
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="name" parent="container/info" instance=ExtResource("4_aewpy")]
|
||||
[node name="name" parent="container/info" unique_id=1202819558 instance=ExtResource("4_aewpy")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
quality = 1
|
||||
|
||||
[node name="fields" type="VBoxContainer" parent="container"]
|
||||
[node name="fields" type="VBoxContainer" parent="container" unique_id=54224040]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="weapons" type="VBoxContainer" parent="container"]
|
||||
[node name="weapons" type="VBoxContainer" parent="container" unique_id=2041301443]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="costs" type="GridContainer" parent="container"]
|
||||
[node name="costs" type="GridContainer" parent="container" unique_id=1806594453]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 10
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
[gd_scene format=3 uid="uid://bs863g2s8r770"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_6i3xq"]
|
||||
[ext_resource type="Script" uid="uid://r5gm7rcya35p" path="res://scripts/Contents/Characters/PlayerBase.gd" id="2_t2kq6"]
|
||||
[ext_resource type="AudioStream" uid="uid://cdrevrq7n6yqa" path="res://resources/sounds/effect/Boing.mp3" id="3_lv2jw"]
|
||||
[ext_resource type="AudioStream" uid="uid://benyec5bqni0b" path="res://resources/sounds/effect/Chomp.wav" id="4_7bgj3"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmxh3bpk8vyy5" path="res://resources/sounds/effect/Coin.mp3" id="5_na3ea"]
|
||||
[ext_resource type="AudioStream" uid="uid://4wuuf1osk0yv" path="res://resources/sounds/effect/Low Boing.wav" id="6_0o8ke"]
|
||||
[ext_resource type="Texture2D" uid="uid://dwwpkn4q07ja2" path="res://icon.svg" id="7_kwh6m"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_da2ca"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_0omr3"]
|
||||
curve = SubResource("Curve_da2ca")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_joj4g"]
|
||||
_limits = [-360.0, 1.0, 0.0, 1.0]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, -360), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_jluqw"]
|
||||
curve = SubResource("Curve_joj4g")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_0omr3"]
|
||||
_data = [Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_joj4g"]
|
||||
curve = SubResource("Curve_0omr3")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_joj4g"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 300.0
|
||||
angle_min = 1.0728835e-05
|
||||
angle_max = 360.00003
|
||||
angle_curve = SubResource("CurveTexture_jluqw")
|
||||
gravity = Vector3(0, 0, 0)
|
||||
radial_accel_min = -200.0
|
||||
radial_accel_max = -200.0
|
||||
scale_min = 5.0
|
||||
scale_max = 10.0
|
||||
scale_curve = SubResource("CurveTexture_joj4g")
|
||||
alpha_curve = SubResource("CurveTexture_0omr3")
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_4v2ol"]
|
||||
animations = [{
|
||||
"frames": [],
|
||||
"loop": true,
|
||||
"name": &"idle",
|
||||
"speed": 1.0
|
||||
}, {
|
||||
"frames": [],
|
||||
"loop": true,
|
||||
"name": &"walk",
|
||||
"speed": 3.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_jluqw"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_kwh6m")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"idle",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_kwh6m")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"walk",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_h1v0q"]
|
||||
radius = 61.204575
|
||||
|
||||
[node name="PlayerBase" unique_id=1711205167 instance=ExtResource("1_6i3xq")]
|
||||
script = ExtResource("2_t2kq6")
|
||||
displayName = "玩家实体"
|
||||
metadata/_edit_horizontal_guides_ = [-188.0]
|
||||
metadata/_edit_vertical_guides_ = [71.0]
|
||||
|
||||
[node name="chargeParticle" type="GPUParticles2D" parent="." index="0" unique_id=1592717470]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, -54)
|
||||
amount = 100
|
||||
process_material = SubResource("ParticleProcessMaterial_joj4g")
|
||||
|
||||
[node name="weaponStore" parent="." index="2"]
|
||||
process_mode = 4
|
||||
|
||||
[node name="sprint" parent="sounds" index="0"]
|
||||
stream = ExtResource("3_lv2jw")
|
||||
|
||||
[node name="heal" parent="sounds" index="1"]
|
||||
stream = ExtResource("4_7bgj3")
|
||||
|
||||
[node name="miss" parent="sounds" index="2"]
|
||||
stream = ExtResource("5_na3ea")
|
||||
|
||||
[node name="hurt" parent="sounds" index="3"]
|
||||
stream = ExtResource("6_0o8ke")
|
||||
|
||||
[node name="texture" parent="." index="4"]
|
||||
position = Vector2(0, -47)
|
||||
sprite_frames = SubResource("SpriteFrames_4v2ol")
|
||||
animation = &"walk"
|
||||
|
||||
[node name="staticAnimation" parent="texture" index="1"]
|
||||
position = Vector2(0, -17)
|
||||
sprite_frames = SubResource("SpriteFrames_jluqw")
|
||||
animation = &"walk"
|
||||
|
||||
[node name="hitbox" parent="texture/hurtbox" index="0"]
|
||||
position = Vector2(-2, -18)
|
||||
shape = SubResource("CircleShape2D_h1v0q")
|
||||
|
||||
[node name="normal" type="Node2D" parent="texture/weapons" index="0" unique_id=1939030218]
|
||||
position = Vector2(1, -13)
|
||||
|
||||
[node name="statebar" parent="." index="5" node_paths=PackedStringArray("entity")]
|
||||
position = Vector2(0, -150)
|
||||
entity = NodePath("..")
|
||||
@@ -0,0 +1,38 @@
|
||||
[gd_scene format=3 uid="uid://dfww6e0mpyjk4"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://m8a4nay1pmmg" path="res://components/Abstracts/CharacterCardBase.tscn" id="1_robpf"]
|
||||
[ext_resource type="Texture2D" uid="uid://2xmrkvyrcqq1" path="res://resources/characterCards/hcn.png" id="2_1yfsg"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1yfsg"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.8)
|
||||
border_color = Color(1, 1, 1, 1)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_detail = 1
|
||||
|
||||
[node name="HCN" unique_id=1046363300 instance=ExtResource("1_robpf")]
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_1yfsg")
|
||||
displayName = "氰化氢"
|
||||
slogan = "微量便可颠覆生机"
|
||||
avatar = ExtResource("2_1yfsg")
|
||||
description = "在召唤物死亡时储能。"
|
||||
fields = Array[int]([18, 27])
|
||||
fieldValues = Array[float]([5.0, 1.0])
|
||||
clickToRebuild = true
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
texture = ExtResource("2_1yfsg")
|
||||
|
||||
[node name="nameLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="0" unique_id=516147781]
|
||||
text = "氰化氢"
|
||||
|
||||
[node name="sloganLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="1" unique_id=280562204]
|
||||
text = "“微量便可颠覆生机”"
|
||||
|
||||
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
|
||||
text = "召唤物死亡时为自身恢复生命值。"
|
||||
@@ -0,0 +1,38 @@
|
||||
[gd_scene format=3 uid="uid://cygvim0mv4ssa"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://m8a4nay1pmmg" path="res://components/Abstracts/CharacterCardBase.tscn" id="1_xa4jc"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1ogllqvamcun" path="res://resources/characterCards/lynx.png" id="2_1s675"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1s675"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.70000005)
|
||||
border_color = Color(1, 1, 1, 1)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_detail = 1
|
||||
|
||||
[node name="Lynx" unique_id=1046363300 instance=ExtResource("1_xa4jc")]
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_1s675")
|
||||
displayName = "猞猁"
|
||||
slogan = "栖于寒域密林,孤影独行世间"
|
||||
avatar = ExtResource("2_1s675")
|
||||
description = "拥有更大的冲刺速度。"
|
||||
fields = Array[int]([3, 4, 10])
|
||||
fieldValues = Array[float]([0.15, 0.04, -0.3])
|
||||
clickToRebuild = true
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
texture = ExtResource("2_1s675")
|
||||
|
||||
[node name="nameLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="0" unique_id=516147781]
|
||||
text = "猞猁"
|
||||
|
||||
[node name="sloganLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="1" unique_id=280562204]
|
||||
text = "“栖于寒域密林,孤影独行世间”"
|
||||
|
||||
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
|
||||
text = "拥有更大的冲刺速度。"
|
||||
@@ -0,0 +1,37 @@
|
||||
[gd_scene format=3 uid="uid://bglwhggnbxxax"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://m8a4nay1pmmg" path="res://components/Abstracts/CharacterCardBase.tscn" id="1_wq25g"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhu4i24hfhxvn" path="res://resources/characterCards/muyang-dog.png" id="2_fi2nw"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fi2nw"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.70000005)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_detail = 1
|
||||
|
||||
[node name="MuyangDog" unique_id=1046363300 instance=ExtResource("1_wq25g")]
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_fi2nw")
|
||||
displayName = "牧羊犬"
|
||||
slogan = "恪守使命不离不弃"
|
||||
avatar = ExtResource("2_fi2nw")
|
||||
description = "每3秒发动格挡,弹反一切子弹。"
|
||||
fields = Array[int]([0, 8, 3])
|
||||
fieldValues = Array[float]([50.0, 0.15, -0.2])
|
||||
clickToRebuild = true
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
texture = ExtResource("2_fi2nw")
|
||||
|
||||
[node name="nameLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="0" unique_id=516147781]
|
||||
text = "牧羊犬"
|
||||
|
||||
[node name="sloganLabel" parent="wrapper/infoContainer/VBoxContainer" parent_id_path=PackedInt32Array(533915880) index="1" unique_id=280562204]
|
||||
text = "“恪守使命不离不弃”"
|
||||
|
||||
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
|
||||
text = "每3秒发动格挡,弹反一切子弹。"
|
||||
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://bes88ipm71b75"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_eeneu"]
|
||||
[ext_resource type="Script" uid="uid://bevc4f6apql4t" path="res://scripts/Contents/Characters/HCN.gd" id="2_f7uj3"]
|
||||
[ext_resource type="PackedScene" uid="uid://wl8u5m52708w" path="res://components/Weapons/LGBT.tscn" id="3_2fpmn"]
|
||||
|
||||
[node name="HCN" unique_id=1711205167 instance=ExtResource("1_eeneu")]
|
||||
script = ExtResource("2_f7uj3")
|
||||
displayName = "氰化氢"
|
||||
|
||||
[node name="LGBT" parent="weaponStore" index="0" unique_id=1938660022 instance=ExtResource("3_2fpmn")]
|
||||
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://ben3wi047p3hj"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_ns0m5"]
|
||||
[ext_resource type="Script" uid="uid://b8g0hkqvyeptg" path="res://scripts/Contents/Characters/Lynx.gd" id="2_d6nve"]
|
||||
[ext_resource type="PackedScene" uid="uid://frwt0fgrpskb" path="res://components/Weapons/Meowmere.tscn" id="3_nitbu"]
|
||||
|
||||
[node name="Lynx" unique_id=1711205167 instance=ExtResource("1_ns0m5")]
|
||||
script = ExtResource("2_d6nve")
|
||||
displayName = "猞猁"
|
||||
|
||||
[node name="Meowmere" parent="weaponStore" index="0" unique_id=1965287972 instance=ExtResource("3_nitbu")]
|
||||
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://c7xe5swtkyhbg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_y3l4w"]
|
||||
[ext_resource type="Script" uid="uid://bbmb572iba42l" path="res://scripts/Contents/Characters/MuyangDog.gd" id="2_mr6nm"]
|
||||
[ext_resource type="PackedScene" uid="uid://u0djqwuuysp8" path="res://components/Weapons/Volcano.tscn" id="3_e236u"]
|
||||
|
||||
[node name="MuyangDog" unique_id=1711205167 instance=ExtResource("1_y3l4w")]
|
||||
script = ExtResource("2_mr6nm")
|
||||
displayName = "牧羊犬"
|
||||
|
||||
[node name="Volcano" parent="weaponStore" index="0" unique_id=204992396 instance=ExtResource("3_e236u")]
|
||||
@@ -2,11 +2,8 @@
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_e5pl8"]
|
||||
[ext_resource type="Script" uid="uid://cthtupc6dtbav" path="res://scripts/Contents/Characters/Rooster.gd" id="2_oqdqd"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3crr8r7y3oho" path="res://components/Weapons/BlueCrystal.tscn" id="3_joj4g"]
|
||||
[ext_resource type="AudioStream" uid="uid://cdrevrq7n6yqa" path="res://resources/sounds/effect/Boing.mp3" id="4_66s6c"]
|
||||
[ext_resource type="PackedScene" uid="uid://cx7nogfnv7s8t" path="res://components/Weapons/Tree.tscn" id="4_jluqw"]
|
||||
[ext_resource type="AudioStream" uid="uid://benyec5bqni0b" path="res://resources/sounds/effect/Chomp.wav" id="4_k0yme"]
|
||||
[ext_resource type="PackedScene" uid="uid://bbrllsqjmx0ie" path="res://components/Weapons/DaoStatue.tscn" id="5_fkh3f"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmxh3bpk8vyy5" path="res://resources/sounds/effect/Coin.mp3" id="5_xnbhq"]
|
||||
[ext_resource type="AudioStream" uid="uid://4wuuf1osk0yv" path="res://resources/sounds/effect/Low Boing.wav" id="6_m5px1"]
|
||||
[ext_resource type="Texture2D" uid="uid://dwwpkn4q07ja2" path="res://icon.svg" id="10_0omr3"]
|
||||
@@ -99,13 +96,6 @@ process_material = SubResource("ParticleProcessMaterial_joj4g")
|
||||
[node name="weaponStore" parent="." index="2"]
|
||||
process_mode = 4
|
||||
|
||||
[node name="BlueCrystal" parent="weaponStore" index="0" unique_id=2047904399 instance=ExtResource("3_joj4g")]
|
||||
|
||||
[node name="Tree" parent="weaponStore" index="1" unique_id=185228402 instance=ExtResource("4_jluqw")]
|
||||
|
||||
[node name="DaoStatue" parent="weaponStore" index="2" unique_id=265403254 instance=ExtResource("5_fkh3f")]
|
||||
debugRebuild = false
|
||||
|
||||
[node name="sprint" parent="sounds" index="0"]
|
||||
stream = ExtResource("4_66s6c")
|
||||
|
||||
|
||||
@@ -5,3 +5,5 @@
|
||||
[node name="FeedFilter" type="HBoxContainer" unique_id=1769176018]
|
||||
theme_override_constants/separation = 0
|
||||
script = ExtResource("1_feedfilter")
|
||||
targetFields = Array[int]([14])
|
||||
clickToRefresh = true
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://uu0s26ehdr4h"]
|
||||
[gd_scene format=3 uid="uid://uu0s26ehdr4h"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bykwevnv7keeh" path="res://components/Abstracts/FeedCardBase.tscn" id="1_cwqpr"]
|
||||
[ext_resource type="Texture2D" uid="uid://ckr8tw7fsa7qx" path="res://resources/weapons/AcidWind.png" id="2_cq26m"]
|
||||
[ext_resource type="Texture2D" uid="uid://c2q4cf4ivu7o7" path="res://resources/feeds/apple.png" id="2_l1ph2"]
|
||||
[ext_resource type="PackedScene" uid="uid://dgxvgsipl0gr1" path="res://components/Weapons/CursorKnife.tscn" id="3_powvs"]
|
||||
|
||||
[node name="Applr" instance=ExtResource("1_cwqpr")]
|
||||
[node name="Applr" unique_id=1383006342 instance=ExtResource("1_cwqpr")]
|
||||
avatarTexture = ExtResource("2_l1ph2")
|
||||
displayName = "焦糖苹果"
|
||||
quality = 2
|
||||
topic = 8
|
||||
fields = Array[int]([14])
|
||||
fieldValues = Array[float]([0.01])
|
||||
fieldValues = Array[float]([0.003])
|
||||
weapons = Array[PackedScene]([ExtResource("3_powvs")])
|
||||
costs = Array[int]([0, 2])
|
||||
costCounts = Array[int]([500, 1])
|
||||
|
||||
[node name="avatar" parent="container/info" index="0"]
|
||||
texture = ExtResource("2_cq26m")
|
||||
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="0" unique_id=239110315]
|
||||
texture = ExtResource("2_l1ph2")
|
||||
|
||||
[node name="name" parent="container/info" index="1"]
|
||||
displayName = "酸蚀风暴"
|
||||
[node name="name" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="1" unique_id=1202819558]
|
||||
displayName = "焦糖苹果"
|
||||
quality = 2
|
||||
topic = 8
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://d3oh03276434b"]
|
||||
[gd_scene format=3 uid="uid://d3oh03276434b"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bykwevnv7keeh" path="res://components/Abstracts/FeedCardBase.tscn" id="1_mvycn"]
|
||||
[ext_resource type="Texture2D" uid="uid://bdknu6rkkpoyd" path="res://resources/feeds/fruitsalad.svg" id="2_2oxe7"]
|
||||
|
||||
[node name="FruitSalad" instance=ExtResource("1_mvycn")]
|
||||
[node name="FruitSalad" unique_id=453318050 instance=ExtResource("1_mvycn")]
|
||||
avatarTexture = ExtResource("2_2oxe7")
|
||||
displayName = "水果沙拉"
|
||||
quality = 0
|
||||
topic = 5
|
||||
fields = Array[int]([4, 14])
|
||||
fieldValues = Array[float]([0.04, 0.02])
|
||||
fieldValues = Array[float]([0.04, 0.006])
|
||||
costs = Array[int]([1])
|
||||
costCounts = Array[int]([200])
|
||||
|
||||
[node name="avatar" parent="container/info" index="0"]
|
||||
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="0" unique_id=239110315]
|
||||
texture = ExtResource("2_2oxe7")
|
||||
|
||||
[node name="name" parent="container/info" index="1"]
|
||||
[node name="name" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="1" unique_id=1202819558]
|
||||
displayName = "水果沙拉"
|
||||
quality = 0
|
||||
topic = 5
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cjcefxdt72d0k"]
|
||||
[gd_scene format=3 uid="uid://cjcefxdt72d0k"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bykwevnv7keeh" path="res://components/Abstracts/FeedCardBase.tscn" id="1_wr2cd"]
|
||||
[ext_resource type="Texture2D" uid="uid://cbyfpwrg2e3ns" path="res://resources/feeds/strawberry-a.svg" id="2_82amy"]
|
||||
|
||||
[node name="Strawberry" instance=ExtResource("1_wr2cd")]
|
||||
[node name="Strawberry" unique_id=604791747 instance=ExtResource("1_wr2cd")]
|
||||
avatarTexture = ExtResource("2_82amy")
|
||||
displayName = "草莓"
|
||||
quality = 3
|
||||
fields = Array[int]([14])
|
||||
fieldValues = Array[float]([0.04])
|
||||
fieldValues = Array[float]([0.012])
|
||||
costs = Array[int]([1])
|
||||
costCounts = Array[int]([400])
|
||||
|
||||
[node name="avatar" parent="container/info" index="0"]
|
||||
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="0" unique_id=239110315]
|
||||
texture = ExtResource("2_82amy")
|
||||
|
||||
[node name="name" parent="container/info" index="1"]
|
||||
[node name="name" parent="container/info" parent_id_path=PackedInt32Array(1288419607) index="1" unique_id=1202819558]
|
||||
displayName = "草莓"
|
||||
quality = 3
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://beo6s1kudbbve"]
|
||||
[gd_scene format=3 uid="uid://b14x2fai2bagp"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://d3qojeqa3difn" path="res://components/Abstracts/FullscreenPanelBase.tscn" id="1_u2ynr"]
|
||||
[ext_resource type="Script" path="res://scripts/Contents/Panels/GameOver.gd" id="2_6cd45"]
|
||||
[ext_resource type="Script" uid="uid://bub7ku5qf2tpo" path="res://scripts/Contents/Panels/GameOver.gd" id="2_6cd45"]
|
||||
[ext_resource type="FontFile" uid="uid://v3frxpuvtj5o" path="res://resources/fonts/syht-bold.ttf" id="3_2arur"]
|
||||
[ext_resource type="AudioStream" uid="uid://dbso1w8hvgilg" path="res://resources/sounds/effect/Lose.wav" id="3_n4aax"]
|
||||
[ext_resource type="PackedScene" uid="uid://braggv3vafd83" path="res://components/UI/GameControl.tscn" id="4_idc4g"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7gbuu"]
|
||||
bg_color = Color(1, 0, 0, 0.3)
|
||||
@@ -12,7 +13,7 @@ bg_color = Color(1, 0, 0, 0.3)
|
||||
font = ExtResource("3_2arur")
|
||||
font_size = 50
|
||||
|
||||
[node name="GameOver" instance=ExtResource("1_u2ynr")]
|
||||
[node name="GameOver" unique_id=2121797652 instance=ExtResource("1_u2ynr")]
|
||||
offset_top = 0.0
|
||||
offset_bottom = 0.0
|
||||
script = ExtResource("2_6cd45")
|
||||
@@ -20,22 +21,26 @@ script = ExtResource("2_6cd45")
|
||||
[node name="wrapper" parent="content" index="1"]
|
||||
theme_override_constants/separation = 50
|
||||
|
||||
[node name="container" type="PanelContainer" parent="content/wrapper" index="0"]
|
||||
[node name="container" type="PanelContainer" parent="content/wrapper" index="0" unique_id=428012739]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_7gbuu")
|
||||
|
||||
[node name="wrapper" type="VBoxContainer" parent="content/wrapper/container" index="0"]
|
||||
[node name="wrapper" type="VBoxContainer" parent="content/wrapper/container" index="0" unique_id=2055114212]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
alignment = 1
|
||||
|
||||
[node name="text" type="Label" parent="content/wrapper/container/wrapper" index="0"]
|
||||
[node name="death" type="VBoxContainer" parent="content/wrapper/container/wrapper" index="0" unique_id=1305351100]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="text" type="Label" parent="content/wrapper/container/wrapper/death" index="0" unique_id=1017927892]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "败北"
|
||||
label_settings = SubResource("LabelSettings_17i5j")
|
||||
|
||||
[node name="deadreason" type="RichTextLabel" parent="content/wrapper/container/wrapper" index="1"]
|
||||
[node name="deadreason" type="RichTextLabel" parent="content/wrapper/container/wrapper/death" index="1" unique_id=1670544883]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
@@ -44,7 +49,11 @@ text = "[color=gray]死亡原因[/color]"
|
||||
fit_content = true
|
||||
autowrap_mode = 0
|
||||
|
||||
[node name="audio" type="AudioStreamPlayer2D" parent="." index="2"]
|
||||
[node name="gameControl" parent="content/wrapper/container/wrapper/death" index="2" unique_id=1187018703 instance=ExtResource("4_idc4g")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="audio" type="AudioStreamPlayer2D" parent="." index="2" unique_id=2020590816]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("3_n4aax")
|
||||
volume_db = 10.0
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://cksonrrx38k36"]
|
||||
[gd_scene format=3 uid="uid://cksonrrx38k36"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://d3qojeqa3difn" path="res://components/Abstracts/FullscreenPanelBase.tscn" id="1_q0gd0"]
|
||||
[ext_resource type="Script" path="res://scripts/Contents/Panels/Pause.gd" id="2_lg6qs"]
|
||||
[ext_resource type="Script" uid="uid://ba0tgtpjp34k8" path="res://scripts/Contents/Panels/Pause.gd" id="2_lg6qs"]
|
||||
[ext_resource type="FontFile" uid="uid://v3frxpuvtj5o" path="res://resources/fonts/syht-bold.ttf" id="3_jxeor"]
|
||||
[ext_resource type="PackedScene" uid="uid://braggv3vafd83" path="res://components/UI/GameControl.tscn" id="4_tij4f"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_hsvpc"]
|
||||
font = ExtResource("3_jxeor")
|
||||
font_size = 50
|
||||
|
||||
[node name="Pause" instance=ExtResource("1_q0gd0")]
|
||||
[node name="Pause" unique_id=518412591 instance=ExtResource("1_q0gd0")]
|
||||
offset_top = 0.0
|
||||
offset_bottom = 0.0
|
||||
script = ExtResource("2_lg6qs")
|
||||
@@ -16,14 +17,12 @@ script = ExtResource("2_lg6qs")
|
||||
[node name="wrapper" parent="content" index="1"]
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="text" type="Label" parent="content/wrapper" index="0"]
|
||||
[node name="text" type="Label" parent="content/wrapper" index="0" unique_id=884780519]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "已暂停"
|
||||
label_settings = SubResource("LabelSettings_hsvpc")
|
||||
|
||||
[node name="aboutBtn" type="Button" parent="content/wrapper" index="1"]
|
||||
[node name="gameControl" parent="content/wrapper" index="1" unique_id=1187018703 instance=ExtResource("4_tij4f")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "关于↗"
|
||||
|
||||
@@ -27,14 +27,10 @@ size_flags_horizontal = 4
|
||||
text = "在游戏开始前,你可以选择一项初始增益。"
|
||||
label_settings = SubResource("LabelSettings_eugsq")
|
||||
|
||||
[node name="container" type="ScrollContainer" parent="content/wrapper/wrapper" index="1" unique_id=465067132]
|
||||
layout_mode = 2
|
||||
follow_focus = true
|
||||
vertical_scroll_mode = 0
|
||||
|
||||
[node name="initialFeedSelection" type="HBoxContainer" parent="content/wrapper/wrapper/container" index="0" unique_id=1363721283]
|
||||
[node name="initialFeedSelection" type="HBoxContainer" parent="content/wrapper/wrapper" index="1" unique_id=1363721283]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="title2" type="Label" parent="content/wrapper/wrapper" index="2" unique_id=398646662]
|
||||
unique_name_in_owner = true
|
||||
@@ -43,14 +39,10 @@ size_flags_horizontal = 4
|
||||
text = "在游戏开始前,你可以选择一个初始武器。"
|
||||
label_settings = SubResource("LabelSettings_eugsq")
|
||||
|
||||
[node name="container2" type="ScrollContainer" parent="content/wrapper/wrapper" index="3" unique_id=474299205]
|
||||
layout_mode = 2
|
||||
follow_focus = true
|
||||
vertical_scroll_mode = 0
|
||||
|
||||
[node name="initialWeaponSelection" type="HBoxContainer" parent="content/wrapper/wrapper/container2" index="0" unique_id=1933174501]
|
||||
[node name="initialWeaponSelection" type="HBoxContainer" parent="content/wrapper/wrapper" index="3" unique_id=1933174501]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="startBtn" type="Button" parent="content/wrapper" index="1" unique_id=298849731]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -6,19 +6,21 @@
|
||||
[ext_resource type="Texture2D" uid="uid://dtw7ljiir0ug6" path="res://resources/comics/starterBack.png" id="3_sdsu8"]
|
||||
[ext_resource type="Theme" uid="uid://dhvs6urgf6jr5" path="res://themes/main.tres" id="4_lfxcn"]
|
||||
[ext_resource type="Texture2D" uid="uid://bgi4bx6bsjv48" path="res://resources/icons/logo.png" id="5_i7qv0"]
|
||||
[ext_resource type="PackedScene" uid="uid://bbm8l3hr4ihar" path="res://components/UI/ItemShow.tscn" id="7_4ekdw"]
|
||||
[ext_resource type="StyleBox" uid="uid://c2umi01exgdmu" path="res://styleboxes/panel/HorizontalBorder.tres" id="7_kl3ko"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_i7qv0"]
|
||||
shader = ExtResource("3_i7qv0")
|
||||
shader_parameter/prog = 0.5000000074506
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sdsu8"]
|
||||
content_margin_right = 60.0
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4ekdw"]
|
||||
content_margin_left = 60.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i7qv0"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4ekdw"]
|
||||
content_margin_left = 30.0
|
||||
content_margin_top = 30.0
|
||||
content_margin_right = 30.0
|
||||
content_margin_bottom = 30.0
|
||||
bg_color = Color(0, 0, 0, 0.70000005)
|
||||
border_width_left = 10
|
||||
border_width_right = 10
|
||||
@@ -30,6 +32,9 @@ corner_radius_bottom_right = 15
|
||||
corner_radius_bottom_left = 15
|
||||
corner_detail = 1
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sdsu8"]
|
||||
content_margin_right = 60.0
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_lfxcn"]
|
||||
font_size = 20
|
||||
outline_size = 1
|
||||
@@ -179,56 +184,114 @@ stretch_mode = 5
|
||||
[node name="wrapper" parent="content" index="3"]
|
||||
theme_override_constants/separation = 30
|
||||
|
||||
[node name="wrapper" type="PanelContainer" parent="content/wrapper" index="0" unique_id=756923034]
|
||||
[node name="layout" type="HBoxContainer" parent="content/wrapper" index="0" unique_id=1600804613]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
theme_override_styles/panel = SubResource("StyleBoxEmpty_sdsu8")
|
||||
|
||||
[node name="start" type="PanelContainer" parent="content/wrapper/wrapper" index="0" unique_id=1232082966]
|
||||
[node name="outGameWrapper" type="PanelContainer" parent="content/wrapper/layout" index="0" unique_id=2095529794]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_i7qv0")
|
||||
theme_override_styles/panel = SubResource("StyleBoxEmpty_4ekdw")
|
||||
|
||||
[node name="starter" type="VBoxContainer" parent="content/wrapper/wrapper/start" index="0" unique_id=2056064159]
|
||||
[node name="layout" type="HBoxContainer" parent="content/wrapper/layout/outGameWrapper" index="0" unique_id=425031834]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 30
|
||||
|
||||
[node name="singleplayer" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter" index="0" unique_id=1117567773]
|
||||
[node name="character" type="PanelContainer" parent="content/wrapper/layout/outGameWrapper/layout" index="0" unique_id=1828402109]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_4ekdw")
|
||||
|
||||
[node name="container" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/character" index="0" unique_id=1167478166]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="playConfig" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="0" unique_id=1132195820]
|
||||
[node name="title" type="Label" parent="content/wrapper/layout/outGameWrapper/layout/character/container" index="0" unique_id=1287813603]
|
||||
layout_mode = 2
|
||||
text = "选择角色"
|
||||
|
||||
[node name="characters" type="HBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/character/container" index="1" unique_id=1098596848]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_constants/separation = 10
|
||||
alignment = 1
|
||||
|
||||
[node name="outGame" type="PanelContainer" parent="content/wrapper/layout/outGameWrapper/layout" index="1" unique_id=1923951688]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = ExtResource("7_kl3ko")
|
||||
|
||||
[node name="container" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame" index="0" unique_id=145459012]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="items" type="HBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container" index="0" unique_id=141139741]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="crystal" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container/items" index="0" unique_id=827814628 instance=ExtResource("7_4ekdw")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
type = 5
|
||||
|
||||
[node name="diamond" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container/items" index="1" unique_id=1846263735 instance=ExtResource("7_4ekdw")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
type = 6
|
||||
|
||||
[node name="upgradeFields" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container" index="1" unique_id=310882955]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
alignment = 1
|
||||
|
||||
[node name="startGameWrapper" type="PanelContainer" parent="content/wrapper/layout" index="1" unique_id=756923034]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 10
|
||||
theme_override_styles/panel = SubResource("StyleBoxEmpty_sdsu8")
|
||||
|
||||
[node name="start" type="PanelContainer" parent="content/wrapper/layout/startGameWrapper" index="0" unique_id=1232082966]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
theme = ExtResource("4_lfxcn")
|
||||
theme_override_styles/panel = ExtResource("7_kl3ko")
|
||||
|
||||
[node name="starter" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start" index="0" unique_id=2056064159]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 30
|
||||
|
||||
[node name="singleplayer" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter" index="0" unique_id=1117567773]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="playConfig" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer" index="0" unique_id=1132195820]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 6
|
||||
|
||||
[node name="diffs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="0" unique_id=526058063]
|
||||
[node name="diffs" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="0" unique_id=526058063]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="0" unique_id=1507689450]
|
||||
[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="0" unique_id=1507689450]
|
||||
layout_mode = 2
|
||||
text = "选择难度:"
|
||||
|
||||
[node name="diffEdit" type="HSlider" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="1" unique_id=1308866785]
|
||||
[node name="diffEdit" type="HSlider" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="1" unique_id=1308866785]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(100, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
max_value = 0.0
|
||||
|
||||
[node name="levelShow" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="2" unique_id=1102279314]
|
||||
[node name="levelShow" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="2" unique_id=1102279314]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "0 ∈ [0, 0]"
|
||||
|
||||
[node name="gamemode" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="1" unique_id=1396041711]
|
||||
[node name="gamemode" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="1" unique_id=1396041711]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="0" unique_id=1975146551]
|
||||
[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/gamemode" index="0" unique_id=1975146551]
|
||||
layout_mode = 2
|
||||
text = "游戏模式:"
|
||||
|
||||
[node name="gamemodeOption" type="OptionButton" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="1" unique_id=620219949]
|
||||
[node name="gamemodeOption" type="OptionButton" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/gamemode" index="1" unique_id=620219949]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
@@ -236,41 +299,21 @@ theme = ExtResource("4_lfxcn")
|
||||
selected = 0
|
||||
allow_reselect = true
|
||||
item_count = 3
|
||||
popup/item_0/text = "无尽波次"
|
||||
popup/item_0/text = "无尽波次·标准游戏体验"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "Boss Rush"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "割草"
|
||||
popup/item_2/text = "割草·高难度⚠️"
|
||||
popup/item_2/id = 2
|
||||
|
||||
[node name="player" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="2" unique_id=656225175]
|
||||
[node name="useTutorial" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="2" unique_id=2079979053]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="0" unique_id=1899542373]
|
||||
layout_mode = 2
|
||||
text = "角色名:"
|
||||
|
||||
[node name="playerNameInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="1" unique_id=1401004968]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
theme = ExtResource("4_lfxcn")
|
||||
text = "公鸡"
|
||||
placeholder_text = "角色名"
|
||||
alignment = 1
|
||||
expand_to_text_length = true
|
||||
select_all_on_focus = true
|
||||
virtual_keyboard_type = 7
|
||||
|
||||
[node name="useTutorial" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="3" unique_id=2079979053]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/useTutorial" index="0" unique_id=20976924]
|
||||
[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/useTutorial" index="0" unique_id=20976924]
|
||||
layout_mode = 2
|
||||
text = "新手教程?"
|
||||
|
||||
[node name="useTutorialBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/useTutorial" index="1" unique_id=689654160]
|
||||
[node name="useTutorialBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/useTutorial" index="1" unique_id=689654160]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
@@ -278,41 +321,40 @@ toggle_mode = true
|
||||
button_pressed = true
|
||||
text = "观看"
|
||||
|
||||
[node name="start" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="1" unique_id=1119283819]
|
||||
[node name="start" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer" index="1" unique_id=1119283819]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
alignment = 1
|
||||
|
||||
[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="0" unique_id=935895475]
|
||||
[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/start" index="0" unique_id=935895475]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme = ExtResource("4_lfxcn")
|
||||
text = "单人游戏"
|
||||
|
||||
[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="1" unique_id=1874616219]
|
||||
[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/start" index="1" unique_id=1874616219]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme = ExtResource("4_lfxcn")
|
||||
text = "多人游戏"
|
||||
|
||||
[node name="multiplayer" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter" index="1" unique_id=2010516457]
|
||||
visible = false
|
||||
[node name="multiplayer" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter" index="1" unique_id=2010516457]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 15
|
||||
alignment = 1
|
||||
|
||||
[node name="main" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer" index="0" unique_id=255202573]
|
||||
[node name="main" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer" index="0" unique_id=255202573]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="0" unique_id=504003020]
|
||||
[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="0" unique_id=504003020]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "多人游戏"
|
||||
label_settings = SubResource("LabelSettings_lfxcn")
|
||||
|
||||
[node name="connectionState" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="1" unique_id=1479839873]
|
||||
[node name="connectionState" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="1" unique_id=1479839873]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 0, 0, 1)
|
||||
layout_mode = 2
|
||||
@@ -320,32 +362,53 @@ size_flags_horizontal = 4
|
||||
text = "状态:未连接到服务器。"
|
||||
label_settings = SubResource("LabelSettings_kl3ko")
|
||||
|
||||
[node name="host" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="2" unique_id=105458555]
|
||||
[node name="player" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="2" unique_id=656225175]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="0" unique_id=871253279]
|
||||
[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/player" index="0" unique_id=1899542373]
|
||||
layout_mode = 2
|
||||
text = "地址"
|
||||
text = "角色名:"
|
||||
label_settings = SubResource("LabelSettings_sdsu8")
|
||||
|
||||
[node name="hostInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="1" unique_id=1534443919]
|
||||
[node name="playerNameInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/player" index="1" unique_id=1401004968]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
theme = ExtResource("4_lfxcn")
|
||||
text = "127.0.0.1"
|
||||
placeholder_text = "主机"
|
||||
text = "你"
|
||||
placeholder_text = "角色名"
|
||||
alignment = 1
|
||||
expand_to_text_length = true
|
||||
emoji_menu_enabled = false
|
||||
clear_button_enabled = true
|
||||
select_all_on_focus = true
|
||||
virtual_keyboard_type = 7
|
||||
|
||||
[node name="separator" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="2" unique_id=1728951883]
|
||||
[node name="host" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="3" unique_id=105458555]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="0" unique_id=871253279]
|
||||
layout_mode = 2
|
||||
text = "服务器地址:"
|
||||
label_settings = SubResource("LabelSettings_sdsu8")
|
||||
|
||||
[node name="hostInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="1" unique_id=1534443919]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme = ExtResource("4_lfxcn")
|
||||
text = "127.0.0.1"
|
||||
placeholder_text = "主机"
|
||||
alignment = 2
|
||||
expand_to_text_length = true
|
||||
emoji_menu_enabled = false
|
||||
select_all_on_focus = true
|
||||
virtual_keyboard_type = 7
|
||||
|
||||
[node name="separator" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="2" unique_id=1728951883]
|
||||
layout_mode = 2
|
||||
text = ":"
|
||||
|
||||
[node name="portInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="3" unique_id=476929474]
|
||||
[node name="portInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="3" unique_id=476929474]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme = ExtResource("4_lfxcn")
|
||||
@@ -356,55 +419,55 @@ emoji_menu_enabled = false
|
||||
select_all_on_focus = true
|
||||
virtual_keyboard_type = 2
|
||||
|
||||
[node name="operation" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="3" unique_id=720531196]
|
||||
[node name="operation" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="4" unique_id=720531196]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="launchBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="0" unique_id=480209339]
|
||||
[node name="launchBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="0" unique_id=480209339]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "启动服务器"
|
||||
|
||||
[node name="connectBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="1" unique_id=921875653]
|
||||
[node name="connectBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="1" unique_id=921875653]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "连接服务器"
|
||||
|
||||
[node name="disconnectBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="2" unique_id=1179706084]
|
||||
[node name="disconnectBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="2" unique_id=1179706084]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
disabled = true
|
||||
text = "断开连接"
|
||||
|
||||
[node name="configs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer" index="1" unique_id=332744115]
|
||||
[node name="configs" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer" index="1" unique_id=332744115]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 30
|
||||
alignment = 1
|
||||
|
||||
[node name="serverConfig" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs" index="0" unique_id=586906646]
|
||||
[node name="serverConfig" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs" index="0" unique_id=586906646]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig" index="0" unique_id=838895828]
|
||||
[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig" index="0" unique_id=838895828]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "服务器配置"
|
||||
|
||||
[node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig" index="1" unique_id=233504210]
|
||||
[node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig" index="1" unique_id=233504210]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="0" unique_id=665443104]
|
||||
[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="0" unique_id=665443104]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "最大玩家数"
|
||||
label_settings = SubResource("LabelSettings_i7qv0")
|
||||
|
||||
[node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="1" unique_id=237311490]
|
||||
[node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="1" unique_id=237311490]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
@@ -415,17 +478,17 @@ emoji_menu_enabled = false
|
||||
select_all_on_focus = true
|
||||
virtual_keyboard_type = 2
|
||||
|
||||
[node name="players" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs" index="1" unique_id=798597277]
|
||||
[node name="players" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs" index="1" unique_id=798597277]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/players" index="0" unique_id=1095446629]
|
||||
[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/players" index="0" unique_id=1095446629]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "玩家管理"
|
||||
|
||||
[node name="list" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/players" index="1" unique_id=1550608733]
|
||||
[node name="list" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/players" index="1" unique_id=1550608733]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
@@ -180,6 +180,16 @@ unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
type = 4
|
||||
|
||||
[node name="crystal" parent="root/itemsContainer/items" unique_id=707392257 instance=ExtResource("3_o2oi4")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
type = 5
|
||||
|
||||
[node name="diamond" parent="root/itemsContainer/items" unique_id=1684500885 instance=ExtResource("3_o2oi4")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
type = 6
|
||||
|
||||
[node name="energyContainer" type="PanelContainer" parent="root" unique_id=1886165069]
|
||||
unique_name_in_owner = true
|
||||
z_index = 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://dmxi1ikn6avig"]
|
||||
[gd_scene format=3 uid="uid://dmxi1ikn6avig"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d2oyyyg0b4qqd" path="res://scripts/Tools/Managers/WorldManager.gd" id="1_lxsxj"]
|
||||
[ext_resource type="PackedScene" uid="uid://dfwg750a47ggx" path="res://components/Scenes/UI.tscn" id="2_04cdd"]
|
||||
@@ -66,57 +66,62 @@ _data = {
|
||||
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_lu72f"]
|
||||
normal = Vector2(0, 1)
|
||||
|
||||
[node name="world" type="Node2D"]
|
||||
[node name="world" type="Node2D" unique_id=1992792389]
|
||||
y_sort_enabled = true
|
||||
texture_filter = 1
|
||||
script = ExtResource("1_lxsxj")
|
||||
metadata/_edit_vertical_guides_ = [-1.0, 57.0]
|
||||
|
||||
[node name="spawner" type="MultiplayerSpawner" parent="."]
|
||||
[node name="spawner" type="MultiplayerSpawner" parent="." unique_id=1891214291]
|
||||
unique_name_in_owner = true
|
||||
spawn_path = NodePath("..")
|
||||
|
||||
[node name="UI" parent="." instance=ExtResource("2_04cdd")]
|
||||
[node name="UI" parent="." unique_id=1312059514 instance=ExtResource("2_04cdd")]
|
||||
|
||||
[node name="camera" type="Camera2D" parent="."]
|
||||
[node name="camera" type="Camera2D" parent="." unique_id=996511427]
|
||||
process_mode = 3
|
||||
process_callback = 0
|
||||
limit_left = -2400
|
||||
limit_top = -1800
|
||||
limit_right = 2400
|
||||
limit_bottom = 1800
|
||||
position_smoothing_enabled = true
|
||||
drag_horizontal_enabled = true
|
||||
drag_vertical_enabled = true
|
||||
editor_draw_limits = true
|
||||
script = ExtResource("5_mk7bv")
|
||||
constantOffset = Vector2(0, -80)
|
||||
|
||||
[node name="animator" type="AnimationPlayer" parent="camera"]
|
||||
[node name="animator" type="AnimationPlayer" parent="camera" unique_id=619200978]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_44ixa")
|
||||
}
|
||||
libraries/ = SubResource("AnimationLibrary_44ixa")
|
||||
|
||||
[node name="map" type="StaticBody2D" parent="." groups=["map"]]
|
||||
[node name="map" type="StaticBody2D" parent="." unique_id=385091617 groups=["map"]]
|
||||
collision_layer = 6
|
||||
collision_mask = 6
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="background" type="Sprite2D" parent="map"]
|
||||
[node name="background" type="Sprite2D" parent="map" unique_id=792319336]
|
||||
z_index = -100
|
||||
scale = Vector2(5, 5)
|
||||
texture = ExtResource("4_oy4jj")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="borderTop" type="CollisionShape2D" parent="map"]
|
||||
[node name="borderTop" type="CollisionShape2D" parent="map" unique_id=320842136]
|
||||
position = Vector2(0, -1800)
|
||||
shape = SubResource("WorldBoundaryShape2D_lu72f")
|
||||
|
||||
[node name="borderTop2" type="CollisionShape2D" parent="map"]
|
||||
[node name="borderTop2" type="CollisionShape2D" parent="map" unique_id=1208131017]
|
||||
position = Vector2(0, 1800)
|
||||
rotation = 3.1415927
|
||||
shape = SubResource("WorldBoundaryShape2D_lu72f")
|
||||
|
||||
[node name="borderTop3" type="CollisionShape2D" parent="map"]
|
||||
[node name="borderTop3" type="CollisionShape2D" parent="map" unique_id=585247179]
|
||||
position = Vector2(2400, 0)
|
||||
rotation = 1.5707964
|
||||
shape = SubResource("WorldBoundaryShape2D_lu72f")
|
||||
|
||||
[node name="borderTop4" type="CollisionShape2D" parent="map"]
|
||||
[node name="borderTop4" type="CollisionShape2D" parent="map" unique_id=320391894]
|
||||
position = Vector2(-2400, 0)
|
||||
rotation = -1.5707964
|
||||
shape = SubResource("WorldBoundaryShape2D_lu72f")
|
||||
|
||||
@@ -1,29 +1,31 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://cw5ip3rw4r3pp"]
|
||||
[gd_scene format=3 uid="uid://cw5ip3rw4r3pp"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Statemachine/FieldShow.gd" id="1_gwocj"]
|
||||
[ext_resource type="Texture2D" uid="uid://iu5i8ullbhf6" path="res://resources/items/apple.svg" id="2_q02yi"]
|
||||
[ext_resource type="Script" uid="uid://cosrwhfwqba7c" path="res://scripts/Statemachine/FieldShow.gd" id="1_gwocj"]
|
||||
[ext_resource type="Texture2D" uid="uid://indwfnk25l74" path="res://resources/fieldIcons/生命上限.svg" id="2_ueodc"]
|
||||
[ext_resource type="Theme" uid="uid://b6nox1qqh50ub" path="res://themes/smallText.tres" id="2_x62bb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bq8wf01j5ulwe" path="res://resources/ui/update-level.svg" id="4_imrgm"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_ysv18"]
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_imrgm"]
|
||||
font_size = 13
|
||||
|
||||
[node name="FieldShow" type="HBoxContainer"]
|
||||
[node name="FieldShow" type="HBoxContainer" unique_id=1958616813]
|
||||
offset_right = 144.0
|
||||
offset_bottom = 18.0
|
||||
alignment = 1
|
||||
script = ExtResource("1_gwocj")
|
||||
metadata/_edit_horizontal_guides_ = [20.0]
|
||||
|
||||
[node name="icon" type="TextureRect" parent="."]
|
||||
[node name="icon" type="TextureRect" parent="." unique_id=1570201622]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(20, 20)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("2_q02yi")
|
||||
texture = ExtResource("2_ueodc")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="name" type="Label" parent="."]
|
||||
[node name="name" type="Label" parent="." unique_id=452024197]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 11
|
||||
@@ -31,18 +33,31 @@ theme = ExtResource("2_x62bb")
|
||||
text = "生命上限"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="sep" type="ColorRect" parent="."]
|
||||
[node name="sep" type="ColorRect" parent="." unique_id=947351883]
|
||||
custom_minimum_size = Vector2(20, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
size_flags_stretch_ratio = 16.0
|
||||
|
||||
[node name="value" type="Label" parent="."]
|
||||
[node name="value" type="Label" parent="." unique_id=1521326049]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 10
|
||||
size_flags_vertical = 8
|
||||
text = "0"
|
||||
label_settings = SubResource("LabelSettings_ysv18")
|
||||
text = "+10.0"
|
||||
label_settings = SubResource("LabelSettings_imrgm")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="upgrades" type="HBoxContainer" parent="." unique_id=1359455298]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="upgradeBtn" type="Button" parent="upgrades" unique_id=1348396281]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
icon = ExtResource("4_imrgm")
|
||||
|
||||
[node name="cost" type="HBoxContainer" parent="upgrades" unique_id=1708563406]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_scene format=3 uid="uid://braggv3vafd83"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b63fkg0waovo" path="res://scripts/Statemachine/GameControl.gd" id="1_t5a04"]
|
||||
|
||||
[node name="GameControl" type="HBoxContainer" unique_id=1187018703]
|
||||
size_flags_horizontal = 4
|
||||
script = ExtResource("1_t5a04")
|
||||
|
||||
[node name="returnBtn" type="Button" parent="." unique_id=2089710932]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "重新开始游戏"
|
||||
|
||||
[node name="exitBtn" type="Button" parent="." unique_id=100260653]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
text = "退出游戏"
|
||||
@@ -166,3 +166,229 @@ progressive_web_app/icon_512x512=""
|
||||
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||
threads/emscripten_pool_size=8
|
||||
threads/godot_pool_size=4
|
||||
|
||||
[preset.3]
|
||||
|
||||
name="Android"
|
||||
platform="Android"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/android/DLH.apk"
|
||||
patches=PackedStringArray()
|
||||
patch_delta_encoding=false
|
||||
patch_delta_compression_level_zstd=19
|
||||
patch_delta_min_reduction=0.1
|
||||
patch_delta_include_filters="*"
|
||||
patch_delta_exclude_filters=""
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
seed=0
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.3.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
gradle_build/use_gradle_build=false
|
||||
gradle_build/gradle_build_directory=""
|
||||
gradle_build/android_source_template=""
|
||||
gradle_build/compress_native_libraries=false
|
||||
gradle_build/export_format=0
|
||||
gradle_build/min_sdk=""
|
||||
gradle_build/target_sdk=""
|
||||
gradle_build/custom_theme_attributes={}
|
||||
architectures/armeabi-v7a=false
|
||||
architectures/arm64-v8a=true
|
||||
architectures/x86=false
|
||||
architectures/x86_64=false
|
||||
version/code=1
|
||||
version/name=""
|
||||
package/unique_name="top.fshrimp.doglynxhcn"
|
||||
package/name="犬,猞猁,与氰化氢"
|
||||
package/signed=true
|
||||
package/app_category=2
|
||||
package/retain_data_on_uninstall=false
|
||||
package/exclude_from_recents=false
|
||||
package/show_in_android_tv=false
|
||||
package/show_in_app_library=true
|
||||
package/show_as_launcher_app=false
|
||||
launcher_icons/main_192x192=""
|
||||
launcher_icons/adaptive_foreground_432x432=""
|
||||
launcher_icons/adaptive_background_432x432=""
|
||||
launcher_icons/adaptive_monochrome_432x432=""
|
||||
graphics/opengl_debug=false
|
||||
shader_baker/enabled=false
|
||||
xr_features/xr_mode=0
|
||||
gesture/swipe_to_dismiss=false
|
||||
screen/immersive_mode=true
|
||||
screen/edge_to_edge=true
|
||||
screen/support_small=true
|
||||
screen/support_normal=true
|
||||
screen/support_large=true
|
||||
screen/support_xlarge=true
|
||||
screen/background_color=Color(0, 0, 0, 1)
|
||||
user_data_backup/allow=true
|
||||
command_line/extra_args=""
|
||||
apk_expansion/enable=false
|
||||
apk_expansion/SALT=""
|
||||
apk_expansion/public_key=""
|
||||
permissions/custom_permissions=PackedStringArray()
|
||||
permissions/access_checkin_properties=false
|
||||
permissions/access_coarse_location=false
|
||||
permissions/access_fine_location=false
|
||||
permissions/access_location_extra_commands=false
|
||||
permissions/access_media_location=false
|
||||
permissions/access_mock_location=false
|
||||
permissions/access_network_state=false
|
||||
permissions/access_surface_flinger=false
|
||||
permissions/access_wifi_state=false
|
||||
permissions/account_manager=false
|
||||
permissions/add_voicemail=false
|
||||
permissions/authenticate_accounts=false
|
||||
permissions/battery_stats=false
|
||||
permissions/bind_accessibility_service=false
|
||||
permissions/bind_appwidget=false
|
||||
permissions/bind_device_admin=false
|
||||
permissions/bind_input_method=false
|
||||
permissions/bind_nfc_service=false
|
||||
permissions/bind_notification_listener_service=false
|
||||
permissions/bind_print_service=false
|
||||
permissions/bind_remoteviews=false
|
||||
permissions/bind_text_service=false
|
||||
permissions/bind_vpn_service=false
|
||||
permissions/bind_wallpaper=false
|
||||
permissions/bluetooth=false
|
||||
permissions/bluetooth_admin=false
|
||||
permissions/bluetooth_privileged=false
|
||||
permissions/brick=false
|
||||
permissions/broadcast_package_removed=false
|
||||
permissions/broadcast_sms=false
|
||||
permissions/broadcast_sticky=false
|
||||
permissions/broadcast_wap_push=false
|
||||
permissions/call_phone=false
|
||||
permissions/call_privileged=false
|
||||
permissions/camera=false
|
||||
permissions/capture_audio_output=false
|
||||
permissions/capture_secure_video_output=false
|
||||
permissions/capture_video_output=false
|
||||
permissions/change_component_enabled_state=false
|
||||
permissions/change_configuration=false
|
||||
permissions/change_network_state=false
|
||||
permissions/change_wifi_multicast_state=false
|
||||
permissions/change_wifi_state=false
|
||||
permissions/clear_app_cache=false
|
||||
permissions/clear_app_user_data=false
|
||||
permissions/control_location_updates=false
|
||||
permissions/delete_cache_files=false
|
||||
permissions/delete_packages=false
|
||||
permissions/device_power=false
|
||||
permissions/diagnostic=false
|
||||
permissions/disable_keyguard=false
|
||||
permissions/dump=false
|
||||
permissions/expand_status_bar=false
|
||||
permissions/factory_test=false
|
||||
permissions/flashlight=false
|
||||
permissions/force_back=false
|
||||
permissions/get_accounts=false
|
||||
permissions/get_package_size=false
|
||||
permissions/get_tasks=false
|
||||
permissions/get_top_activity_info=false
|
||||
permissions/global_search=false
|
||||
permissions/hardware_test=false
|
||||
permissions/inject_events=false
|
||||
permissions/install_location_provider=false
|
||||
permissions/install_packages=false
|
||||
permissions/install_shortcut=false
|
||||
permissions/internal_system_window=false
|
||||
permissions/internet=false
|
||||
permissions/kill_background_processes=false
|
||||
permissions/location_hardware=false
|
||||
permissions/manage_accounts=false
|
||||
permissions/manage_app_tokens=false
|
||||
permissions/manage_documents=false
|
||||
permissions/manage_external_storage=false
|
||||
permissions/manage_media=false
|
||||
permissions/master_clear=false
|
||||
permissions/media_content_control=false
|
||||
permissions/modify_audio_settings=false
|
||||
permissions/modify_phone_state=false
|
||||
permissions/mount_format_filesystems=false
|
||||
permissions/mount_unmount_filesystems=false
|
||||
permissions/nfc=false
|
||||
permissions/persistent_activity=false
|
||||
permissions/post_notifications=false
|
||||
permissions/process_outgoing_calls=false
|
||||
permissions/read_calendar=false
|
||||
permissions/read_call_log=false
|
||||
permissions/read_contacts=false
|
||||
permissions/read_external_storage=false
|
||||
permissions/read_frame_buffer=false
|
||||
permissions/read_history_bookmarks=false
|
||||
permissions/read_input_state=false
|
||||
permissions/read_logs=false
|
||||
permissions/read_media_audio=false
|
||||
permissions/read_media_images=false
|
||||
permissions/read_media_video=false
|
||||
permissions/read_media_visual_user_selected=false
|
||||
permissions/read_phone_state=false
|
||||
permissions/read_profile=false
|
||||
permissions/read_sms=false
|
||||
permissions/read_social_stream=false
|
||||
permissions/read_sync_settings=false
|
||||
permissions/read_sync_stats=false
|
||||
permissions/read_user_dictionary=false
|
||||
permissions/reboot=false
|
||||
permissions/receive_boot_completed=false
|
||||
permissions/receive_mms=false
|
||||
permissions/receive_sms=false
|
||||
permissions/receive_wap_push=false
|
||||
permissions/record_audio=false
|
||||
permissions/reorder_tasks=false
|
||||
permissions/restart_packages=false
|
||||
permissions/send_respond_via_message=false
|
||||
permissions/send_sms=false
|
||||
permissions/set_activity_watcher=false
|
||||
permissions/set_alarm=false
|
||||
permissions/set_always_finish=false
|
||||
permissions/set_animation_scale=false
|
||||
permissions/set_debug_app=false
|
||||
permissions/set_orientation=false
|
||||
permissions/set_pointer_speed=false
|
||||
permissions/set_preferred_applications=false
|
||||
permissions/set_process_limit=false
|
||||
permissions/set_time=false
|
||||
permissions/set_time_zone=false
|
||||
permissions/set_wallpaper=false
|
||||
permissions/set_wallpaper_hints=false
|
||||
permissions/signal_persistent_processes=false
|
||||
permissions/status_bar=false
|
||||
permissions/subscribed_feeds_read=false
|
||||
permissions/subscribed_feeds_write=false
|
||||
permissions/system_alert_window=false
|
||||
permissions/transmit_ir=false
|
||||
permissions/uninstall_shortcut=false
|
||||
permissions/update_device_stats=false
|
||||
permissions/use_credentials=false
|
||||
permissions/use_sip=false
|
||||
permissions/vibrate=false
|
||||
permissions/wake_lock=false
|
||||
permissions/write_apn_settings=false
|
||||
permissions/write_calendar=false
|
||||
permissions/write_call_log=false
|
||||
permissions/write_contacts=false
|
||||
permissions/write_external_storage=false
|
||||
permissions/write_gservices=false
|
||||
permissions/write_history_bookmarks=false
|
||||
permissions/write_profile=false
|
||||
permissions/write_secure_settings=false
|
||||
permissions/write_settings=false
|
||||
permissions/write_sms=false
|
||||
permissions/write_social_stream=false
|
||||
permissions/write_sync_settings=false
|
||||
permissions/write_user_dictionary=false
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# Playlog
|
||||
|
||||
## 2025/9/30
|
||||
|
||||
平衡性已调整,可3个boss同窗无伤打完。
|
||||
@@ -1,4 +0,0 @@
|
||||
@echo off
|
||||
|
||||
cd build/web
|
||||
python -m http.server 8080
|
||||
@@ -29,6 +29,10 @@ window/size/viewport_width=1280
|
||||
window/size/viewport_height=720
|
||||
window/size/mode=2
|
||||
|
||||
[global_group]
|
||||
|
||||
bullets=""
|
||||
|
||||
[gui]
|
||||
|
||||
theme/custom="res://themes/main.tres"
|
||||
@@ -131,3 +135,4 @@ locale/locale_filter_mode=0
|
||||
|
||||
renderer/rendering_method="gl_compatibility"
|
||||
renderer/rendering_method.mobile="gl_compatibility"
|
||||
textures/vram_compression/import_etc2_astc=true
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 272 KiB |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkawfjwj80sqj"
|
||||
path="res://.godot/imported/sjt.png-1b93f593cde723b537a6010a0c0d0d60.ctex"
|
||||
uid="uid://2xmrkvyrcqq1"
|
||||
path="res://.godot/imported/hcn.png-c27fe878ce57f16ec0714a09f8662903.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://sjt.png"
|
||||
dest_files=["res://.godot/imported/sjt.png-1b93f593cde723b537a6010a0c0d0d60.ctex"]
|
||||
source_file="res://resources/characterCards/hcn.png"
|
||||
dest_files=["res://.godot/imported/hcn.png-c27fe878ce57f16ec0714a09f8662903.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b1ogllqvamcun"
|
||||
path="res://.godot/imported/lynx.png-0ad864fef53fe9b6c7e72f50bca44f0a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resources/characterCards/lynx.png"
|
||||
dest_files=["res://.godot/imported/lynx.png-0ad864fef53fe9b6c7e72f50bca44f0a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dhu4i24hfhxvn"
|
||||
path="res://.godot/imported/muyang-dog.png-faa1da78f374818f4f65cd75128b936f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resources/characterCards/muyang-dog.png"
|
||||
dest_files=["res://.godot/imported/muyang-dog.png-faa1da78f374818f4f65cd75128b936f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@@ -4,15 +4,16 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b1aq0k7tf1p1"
|
||||
path.s3tc="res://.godot/imported/kernyr.jpg-d82cf548a25a07dbd282dd92971a45c3.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/kernyr.jpg-d82cf548a25a07dbd282dd92971a45c3.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resources/characters/kernyr/kernyr.jpg"
|
||||
dest_files=["res://.godot/imported/kernyr.jpg-d82cf548a25a07dbd282dd92971a45c3.s3tc.ctex"]
|
||||
dest_files=["res://.godot/imported/kernyr.jpg-d82cf548a25a07dbd282dd92971a45c3.s3tc.ctex", "res://.godot/imported/kernyr.jpg-d82cf548a25a07dbd282dd92971a45c3.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33.51739" height="35.44804" viewBox="0,0,33.51739,35.44804"><g transform="translate(-223.24131,-162.27598)"><g stroke="none" stroke-miterlimit="10"><g><g><path d="M223.49351,192.90505c0,0 15.37471,-25.43046 18.61824,-28.21065c0,0 7.42396,-3.51778 14.59531,-2.06804c0,0 0.30978,8.3177 -1.28976,14.43664c0,0 -23.75717,19.61115 -26.02193,20.52265c0,0 -3.52537,-0.26784 -5.31028,-1.19203c0.0292,0.13837 -1.41041,-2.23176 -0.59159,-3.48855z" fill="#8644b3"/><path d="M256.59789,162.79393l-13.58605,10.96081c-1.81157,-3.44793 -0.87089,-8.92197 -0.87089,-8.92197c0,0 7.42396,-3.51778 14.45694,-2.03884z" fill="#ea8be5"/><path d="M256.59789,162.79393l-13.58605,10.96081c-1.81157,-3.44793 -0.87089,-8.92197 -0.87089,-8.92197c0,0 7.42396,-3.51778 14.45694,-2.03884z" fill="#ea8be5"/><path d="M254.75845,177.7079c-6.31572,-1.84708 -11.83038,-4.00775 -11.83038,-4.00775l13.66983,-10.90623c0.05459,-0.08379 0.13837,-0.0292 0.13837,-0.0292c0,0 0.30978,8.3177 -1.37355,14.38205c0,0 -0.10918,0.16757 -0.60428,0.56112z" fill="#ad59c2"/><path d="M242.95726,173.83853l-18.89756,22.77724c0,0 -1.30123,-2.39933 -0.53701,-3.57235c0,0 15.37471,-25.43046 18.61824,-28.21065z" fill="#ad59c2"/><path d="M242.92807,173.70015c0,0 -0.95719,1.28599 -2.43487,3.18769c-0.73884,0.95085 -1.67064,2.01469 -2.57325,3.2169c-0.98639,1.14762 -1.94358,2.43362 -2.92997,3.58124c-1.04098,1.23141 -2.08196,2.46282 -3.01376,3.52665c-0.98639,1.14762 -1.91819,2.21146 -2.60244,3.07852c-1.59066,1.70874 -2.63165,2.94014 -2.63165,2.94014c0,0 0.95719,-1.28599 2.43487,-3.18769c0.73884,-0.95085 1.67064,-2.01469 2.57325,-3.2169c0.98639,-1.14762 1.94358,-2.43362 2.92997,-3.58124c1.04098,-1.23141 2.08196,-2.46282 3.01376,-3.52665c0.98639,-1.14762 1.91819,-2.21146 2.60244,-3.07852c1.64525,-1.79253 2.63165,-2.94014 2.63165,-2.94014z" fill="#ea8be5"/><path d="M226.16706,193.93079l-2.13654,2.5466c0,0 -1.30123,-2.39933 -0.53701,-3.57235c0,0 1.50435,0.62205 2.67355,1.02574z" fill="#a546bd"/><path d="M229.34079,197.66942c0,0 -3.60916,-0.32244 -5.31028,-1.19203l2.13654,-2.5466c0.55731,0.24375 1.03083,0.4329 1.1984,0.54207c0.72488,0.35292 1.97534,3.19657 1.97534,3.19657z" fill="#7c36ab"/><path d="M224.1143,196.53198c0.86326,0.32372 1.7811,0.56364 2.61515,0.749c0.83405,0.18534 1.7227,0.2869 2.63673,0.1663l-0.13837,0.0292c1.59448,-1.34821 3.27274,-2.64181 4.95099,-3.93543c1.67826,-1.29361 3.27274,-2.64181 4.89641,-3.85165c3.35652,-2.58723 6.65846,-5.09067 10.04418,-7.53953c-3.18895,2.6964 -6.46169,5.33822 -9.81821,7.92545c-1.67826,1.29361 -3.35652,2.58723 -4.89641,3.85165c-1.67826,1.29361 -3.35652,2.58723 -4.9802,3.79706c-0.94323,-0.01777 -1.83187,-0.11933 -2.74972,-0.35926c-0.97243,-0.15614 -1.75189,-0.42528 -2.56056,-0.83277z" fill="#6b348f"/><path d="M242.05717,164.77818c0,0 4.07252,2.17589 6.92127,4.03187l-6.05037,4.8901c-1.6732,-3.47713 -0.87089,-8.92197 -0.87089,-8.92197z" fill="#e17de3"/><path d="M251.66342,170.91741c0.59031,0.74265 2.53645,3.80084 3.77929,5.92343c-0.05459,0.08379 -0.07997,0.30595 -0.13456,0.38973c0,0 -0.19296,0.11299 -0.54968,0.47733c-6.31572,-1.84708 -11.83038,-4.00775 -11.83038,-4.00775l6.05037,-4.8901c1.34059,0.8734 2.51359,1.63763 2.68498,2.10734z" fill="#9b4dae"/><path d="M254.81304,177.62411c0,0 -0.66648,-0.07616 -1.50054,-0.26152c-0.91785,-0.23993 -2.05784,-0.50525 -3.28163,-0.82516c-1.1692,-0.40369 -2.3384,-0.80739 -3.20165,-1.1311c-0.86326,-0.32372 -1.36597,-0.65125 -1.36597,-0.65125c0,0 0.08379,0.05459 0.38973,0.13456c0.30595,0.07997 0.61189,0.15995 1.08542,0.34911c0.91785,0.23993 2.00325,0.58904 3.22704,0.90895c1.1692,0.40369 2.39299,0.7236 3.25625,1.04732c0.83405,0.18534 1.39136,0.42909 1.39136,0.42909z" fill="#6b348f"/></g><path d="M256.59789,162.79393c0,0 -0.60428,0.56112 -1.51069,1.40279c-0.90641,0.84167 -2.19875,1.90932 -3.49109,2.97696c-1.29234,1.06765 -2.66846,2.0807 -3.74245,2.8132c-1.07399,0.7325 -1.76205,1.23903 -1.76205,1.23903c0,0 0.60428,-0.56112 1.51069,-1.40279c0.961,-0.92546 2.30793,-2.07689 3.54567,-3.06075c1.29234,-1.06765 2.66846,-2.0807 3.74245,-2.8132c0.9902,-0.78709 1.70746,-1.15524 1.70746,-1.15524z" fill="#ffbcfc"/></g></g></g></svg><!--rotationCenter:16.75869348767222:17.7240205896303-->
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bdp6x3yncvway"
|
||||
path="res://.godot/imported/crystal.svg-b5be99c51af6bba53888868c59397820.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resources/items/crystal.svg"
|
||||
dest_files=["res://.godot/imported/crystal.svg-b5be99c51af6bba53888868c59397820.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="22.05604362487793" viewBox="2.5 4.043956756591797 25 22.05604362487793" version="1.1" xml:space="preserve">
|
||||
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
|
||||
<defs/>
|
||||
<g>
|
||||
<title>crystal-a</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="crystal-a" fill-rule="evenodd">
|
||||
<g id="Blue-Crystal" fill-rule="nonzero">
|
||||
<path d="M 3 12.3 C 3 12.3 5.9 7.1 10 5.6 C 10 5.6 17.9 3.8 20.5 4.9 C 20.5 4.9 25.7 8.5 27 10.5 C 27 10.5 20 23.5 16.7 25.5 C 16.7 25.6 4.3 17.7 3 12.3 Z " id="Shape" fill="#7FCCEF" stroke-width="1" stroke="none"/>
|
||||
<path d="M 27 10.5 C 26.8 10.2 26.5 9.8 26.1 9.5 L 20.6 12.9 L 15.8 18.7 L 16.7 25.6 C 20.1 23.5 27 10.5 27 10.5 Z " id="Shape" fill="#678FE4" stroke-width="1" stroke="none"/>
|
||||
<path d="M 11.3 13.9 C 11.3 13.9 13.8 22.6 16.7 25.6 C 16.7 25.6 20.4 16.1 20.6 12.9 L 13.8 9.7 L 11.3 13.9 Z " id="Shape" fill="#73B5E4" stroke-width="1" stroke="none"/>
|
||||
<path d="M 20.5 4.9 C 17.8 3.8 10 5.6 10 5.6 C 6 7.2 3 12.3 3 12.3 C 3 12.3 9.5 13.9 11.3 13.9 C 11.3 13.9 17 14 20.6 12.9 C 23 12.2 24.5 11.9 27 10.5 C 25.7 8.5 20.5 4.9 20.5 4.9 Z " id="Shape" fill="#92D7EF" stroke-width="1" stroke="none"/>
|
||||
<path d="M 17.2 4.6 C 15.8 4.7 14.3 4.8 13 5.1 L 11.8 7.5 L 11.4 14 C 11.4 14 17.1 14.1 20.7 13 L 18 6.9 L 17.2 4.6 Z " id="Shape" fill="#7FCCEF" stroke-width="1" stroke="none"/>
|
||||
<path d="M 11.2 9.6 C 10.4 9.6 6.2 10.9 3.3 11.8 C 3.1 12.1 3 12.3 3 12.3 C 3 12.3 9.5 13.9 11.3 13.9 C 11.3 13.9 17 14 20.6 12.9 C 23 12.2 24.5 11.9 27 10.5 C 26.9 10.4 26.9 10.3 26.8 10.2 C 24.4 9.7 20.2 8.8 19.7 8.8 C 19 8.9 12.4 9.6 11.2 9.6 Z " id="Shape" fill="#83CDEF" stroke-width="1" stroke="none"/>
|
||||
<path d="M 11.8 7.4 L 18.1 7 C 18.1 7 19.9 6.8 20.6 5 C 17.8 3.8 10 5.6 10 5.6 C 10 5.6 10.6 6.5 11.8 7.4 Z " id="Shape" fill="#BEE6F1" stroke-width="1" stroke="none"/>
|
||||
<path d="M 20.5 4.9 C 20.3 4.8 20 4.7 19.7 4.7 L 18 6.9 L 20.6 12.8 C 23 12.1 24.5 11.8 27 10.4 C 25.7 8.5 20.5 4.9 20.5 4.9 Z " id="Shape" fill="#73B5E4" stroke-width="1" stroke="none"/>
|
||||
<path d="M 27 10.5 C 27 10.5 26.9 10.8 26.7 11.2 C 26.5 11.7 26.2 12.3 25.9 13.1 C 25.7 13.5 25.5 13.9 25.3 14.3 C 25.1 14.7 24.8 15.2 24.5 15.7 C 24 16.6 23.3 17.6 22.7 18.6 C 22 19.5 21.3 20.5 20.7 21.3 C 20 22.1 19.4 22.9 18.8 23.5 C 17.6 24.8 16.8 25.5 16.8 25.5 C 16.8 25.5 17.6 24.6 18.6 23.3 C 19.1 22.6 19.7 21.8 20.4 21 C 21 20.1 21.7 19.2 22.4 18.3 C 23.1 17.4 23.7 16.4 24.2 15.5 C 24.8 14.6 25.3 13.7 25.7 13 C 26.1 12.3 26.5 11.6 26.7 11.2 C 26.9 10.8 27 10.5 27 10.5 Z " id="Shape" fill="#3B73E4" stroke-width="1" stroke="none"/>
|
||||
<path d="M 3 12.3 C 3 12.3 3.5 12.3 4.2 12.4 C 4.9 12.5 5.8 12.6 6.7 12.8 C 7.6 13 8.5 13.2 9.2 13.4 C 9.9 13.6 10.3 13.7 10.3 13.7 C 10.3 13.7 9.8 13.8 9.1 13.7 C 8.4 13.6 7.5 13.5 6.6 13.3 C 5.7 13.1 4.8 12.9 4.1 12.7 C 3.4 12.5 3 12.3 3 12.3 Z " id="Shape" fill="#BEE6F1" stroke-width="1" stroke="none"/>
|
||||
<path d="M 11.5 14.9 C 11.5 14.9 11.8 15.5 12.1 16.3 C 12.5 17.2 12.9 18.3 13.4 19.4 C 13.8 20.5 14.3 21.7 14.6 22.5 C 14.8 22.9 14.9 23.3 15.1 23.5 C 15.3 23.7 15.3 23.8 15.3 23.8 C 15.3 23.8 15.2 23.7 15 23.5 C 14.8 23.3 14.6 23 14.3 22.6 C 13.8 21.8 13.3 20.7 12.8 19.5 C 12.3 18.3 12 17.2 11.7 16.3 C 11.7 15.5 11.5 14.9 11.5 14.9 Z " id="Shape" fill="#BEE6F1" stroke-width="1" stroke="none"/>
|
||||
<path d="M 18.9 8.9 L 20.6 12.9 C 23 12.2 24.5 11.9 27 10.5 C 26.9 10.4 26.9 10.3 26.8 10.2 C 24.4 9.7 20.2 8.8 19.7 8.8 C 19.6 8.9 19.3 8.9 18.9 8.9 Z " id="Shape" fill="#679FE4" stroke-width="1" stroke="none"/>
|
||||
<path d="M 11.6 9.6 L 11.3 13.9 C 11.3 13.9 17 14 20.6 12.9 L 18.9 8.9 C 17.2 9.1 13.2 9.5 11.6 9.6 Z " id="Shape" fill="#7CBFEF" stroke-width="1" stroke="none"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg><!--rotationCenter:15:15-->
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2pdt75oaeyyi"
|
||||
path="res://.godot/imported/diamond.svg-c2e0c7bcfcf4bf5e3510e897076abe04.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resources/items/diamond.svg"
|
||||
dest_files=["res://.godot/imported/diamond.svg-c2e0c7bcfcf4bf5e3510e897076abe04.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,4 @@
|
||||
extends PlayerBase
|
||||
|
||||
func summoned(entity: SummonBase):
|
||||
entity.died.connect(func(): storeEnergy(10))
|
||||
@@ -0,0 +1 @@
|
||||
uid://bevc4f6apql4t
|
||||
@@ -0,0 +1,5 @@
|
||||
extends PlayerBase
|
||||
|
||||
func register():
|
||||
super.register()
|
||||
sprintMultiplier += 3
|
||||
@@ -0,0 +1 @@
|
||||
uid://b8g0hkqvyeptg
|
||||
@@ -0,0 +1,12 @@
|
||||
extends PlayerBase
|
||||
|
||||
var parryCounter: CooldownTimer = CooldownTimer.new(3000)
|
||||
|
||||
func ai():
|
||||
super.ai()
|
||||
if parryCounter.isCooldowned():
|
||||
var track = getTrackingAnchor()
|
||||
var bullet = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , 300)
|
||||
if is_instance_valid(bullet):
|
||||
BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(bullet.position))
|
||||
parryCounter.start()
|
||||
@@ -0,0 +1 @@
|
||||
uid://bbmb572iba42l
|
||||
@@ -0,0 +1,80 @@
|
||||
extends EntityBase
|
||||
class_name PlayerBase
|
||||
|
||||
var chargeStartTime = {}
|
||||
@onready var chargeParticle: GPUParticles2D = $%chargeParticle
|
||||
|
||||
func register():
|
||||
attackCooldownMap[0] = 200
|
||||
attackCooldownMap[1] = 6000
|
||||
hit.connect(
|
||||
func(_damage: float, bullet: BulletBase, _crit: bool):
|
||||
if bullet is DogCircle:
|
||||
EffectController.create(ComponentManager.getEffect("FeatherFall"), texture.global_position).shot()
|
||||
elif bullet is FoxZhua:
|
||||
EffectController.create(ComponentManager.getEffect("BloodFall"), texture.global_position).shot()
|
||||
)
|
||||
chargeParticle.emitting = false
|
||||
|
||||
func ai():
|
||||
currentFocusedPosition = get_global_mouse_position()
|
||||
texture.play("walk")
|
||||
var direction = Vector2(
|
||||
Input.get_axis("m_left", "m_right"),
|
||||
Input.get_axis("m_up", "m_down")
|
||||
)
|
||||
move(direction)
|
||||
if direction.length() == 0:
|
||||
texture.play("idle")
|
||||
tryLaunch("attack", 0)
|
||||
tryLaunch("attack2", 1)
|
||||
tryLaunch("smallSkill", 2)
|
||||
tryLaunch("superSkill", 3)
|
||||
for i in range(3):
|
||||
tryLaunch("cardSkill%d" % i, 4 + i)
|
||||
if Input.is_action_just_pressed("sprint"):
|
||||
trySprint()
|
||||
if Input.is_action_just_pressed("heal"):
|
||||
if health < fields.get(FieldStore.Entity.MAX_HEALTH):
|
||||
if useItem({
|
||||
ItemStore.ItemType.APPLE: 1
|
||||
}):
|
||||
tryHeal(20)
|
||||
func sprint():
|
||||
move(Vector2(
|
||||
Input.get_axis("m_left", "m_right"),
|
||||
Input.get_axis("m_up", "m_down")
|
||||
) * sprintMultiplier, true)
|
||||
|
||||
func tryLaunch(action: String, weaponIndex: int):
|
||||
if Input.is_action_just_pressed(action):
|
||||
if len(weapons) > weaponIndex:
|
||||
var weapon = weapons[weaponIndex]
|
||||
if weapon.emitType == Weapon.EmitType.CHARGE:
|
||||
if weapon.canAttackBy(self ):
|
||||
chargeStartTime[weaponIndex] = WorldManager.getTime()
|
||||
chargeParticle.emitting = true
|
||||
chargeParticle.speed_scale = 1
|
||||
elif weapon.emitType == Weapon.EmitType.CLICK_SHOOT || weapon.emitType == Weapon.EmitType.HOLD_LOOP:
|
||||
tryAttack(weaponIndex)
|
||||
if Input.is_action_pressed(action):
|
||||
if len(weapons) > weaponIndex:
|
||||
var weapon = weapons[weaponIndex]
|
||||
if chargeStartTime.has(weaponIndex):
|
||||
chargeParticle.speed_scale += 0.01 * self.fields.get(FieldStore.Entity.CHARGE_SPEED)
|
||||
elif weapon.emitType == Weapon.EmitType.HOLD_SHOOT || weapon.emitType == Weapon.EmitType.HOLD_LOOP:
|
||||
tryAttack(weaponIndex)
|
||||
if Input.is_action_just_released(action):
|
||||
if len(weapons) > weaponIndex:
|
||||
var weapon = weapons[weaponIndex]
|
||||
if weapon.emitType == Weapon.EmitType.CHARGE:
|
||||
if chargeStartTime.has(weaponIndex):
|
||||
var startTime = chargeStartTime[weaponIndex]
|
||||
var endTime = WorldManager.getTime()
|
||||
var chargedTime = endTime - startTime
|
||||
chargeStartTime.erase(weaponIndex)
|
||||
weapon.chargedTime = chargedTime * self.fields.get(FieldStore.Entity.CHARGE_SPEED)
|
||||
tryAttack(weaponIndex)
|
||||
chargeParticle.emitting = false
|
||||
elif weapon.emitType == Weapon.EmitType.HOLD_LOOP:
|
||||
weapon.exitLoop(self )
|
||||
@@ -0,0 +1 @@
|
||||
uid://r5gm7rcya35p
|
||||
@@ -52,7 +52,7 @@ func tryLaunch(action: String, weaponIndex: int):
|
||||
var weapon = weapons[weaponIndex]
|
||||
if weapon.emitType == Weapon.EmitType.CHARGE:
|
||||
if weapon.canAttackBy(self ):
|
||||
chargeStartTime[weaponIndex] = Time.get_ticks_msec()
|
||||
chargeStartTime[weaponIndex] = WorldManager.getTime()
|
||||
chargeParticle.emitting = true
|
||||
chargeParticle.speed_scale = 1
|
||||
elif weapon.emitType == Weapon.EmitType.CLICK_SHOOT || weapon.emitType == Weapon.EmitType.HOLD_LOOP:
|
||||
@@ -70,7 +70,7 @@ func tryLaunch(action: String, weaponIndex: int):
|
||||
if weapon.emitType == Weapon.EmitType.CHARGE:
|
||||
if chargeStartTime.has(weaponIndex):
|
||||
var startTime = chargeStartTime[weaponIndex]
|
||||
var endTime = Time.get_ticks_msec()
|
||||
var endTime = WorldManager.getTime()
|
||||
var chargedTime = endTime - startTime
|
||||
chargeStartTime.erase(weaponIndex)
|
||||
weapon.chargedTime = chargedTime * self.fields.get(FieldStore.Entity.CHARGE_SPEED)
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
@tool
|
||||
extends FullscreenPanelBase
|
||||
|
||||
@onready var audio: AudioStreamPlayer2D = $"%audio"
|
||||
@onready var deadreason: RichTextLabel = $"%deadreason"
|
||||
@onready var audio: AudioStreamPlayer2D = $%audio
|
||||
@onready var deadreason: RichTextLabel = $%deadreason
|
||||
@onready var gameControl: GameControl = $%gameControl
|
||||
|
||||
func beforeOpen(args: Array = []):
|
||||
audio.play()
|
||||
var reasonTemplate = MathTool.randomChoiceFrom(GameRule.deadReasons)
|
||||
deadreason.text = ("[color=gray]" + reasonTemplate + "凶手是[b]%s[/b]的[b]%s[/b]。[/color]") % args
|
||||
func afterOpen(_args: Array = []):
|
||||
gameControl.enable()
|
||||
|
||||
@@ -36,6 +36,9 @@ func _ready():
|
||||
updateValue()
|
||||
if selectedCount >= UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE]:
|
||||
finish()
|
||||
for feedCard in feedCards.get_children():
|
||||
if feedCard is Feed:
|
||||
feed.rebuildInfo()
|
||||
)
|
||||
avaliableFeeds.add_child(feed)
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
@tool
|
||||
extends FullscreenPanelBase
|
||||
class_name PausePanel
|
||||
|
||||
@onready var aboutBtn: Button = $"%aboutBtn"
|
||||
@onready var gameControl: GameControl = $%gameControl
|
||||
|
||||
func _ready():
|
||||
aboutBtn.pressed.connect(
|
||||
func():
|
||||
UIState.setPanel("Thanks")
|
||||
)
|
||||
func afterOpen(_args: Array = []):
|
||||
gameControl.enable()
|
||||
|
||||
@@ -19,30 +19,38 @@ func _ready():
|
||||
func beforeOpen(_args: Array = []):
|
||||
clearFeeds()
|
||||
clearWeapons()
|
||||
var feedCounted = 0
|
||||
var weaponCounted = 0
|
||||
ComponentManager.feeds.shuffle()
|
||||
for feed in ComponentManager.feeds:
|
||||
var card = feed.instantiate() as Feed
|
||||
card.freeToBuy = true
|
||||
if card.topic == FeedName.Topic.WEAPON:
|
||||
initialWeaponSelection.add_child(card)
|
||||
card.selected.connect(
|
||||
func(_x):
|
||||
if WorldManager.isRelease():
|
||||
clearWeapons()
|
||||
title2.hide()
|
||||
if !title1.visible:
|
||||
startBtn.pressed.emit()
|
||||
)
|
||||
if weaponCounted < OutGameStorage.maxInitialWeaponCount:
|
||||
initialWeaponSelection.add_child(card)
|
||||
card.selected.connect(
|
||||
func(_x):
|
||||
if WorldManager.isRelease():
|
||||
clearWeapons()
|
||||
title2.hide()
|
||||
if !title1.visible:
|
||||
startBtn.pressed.emit()
|
||||
)
|
||||
weaponCounted += 1
|
||||
else:
|
||||
initialFeedSelection.add_child(card)
|
||||
card.selected.connect(
|
||||
func(_x):
|
||||
if WorldManager.isRelease():
|
||||
clearFeeds()
|
||||
title1.hide()
|
||||
if !title2.visible:
|
||||
startBtn.pressed.emit()
|
||||
)
|
||||
if feedCounted < OutGameStorage.maxInitialFeedCount:
|
||||
initialFeedSelection.add_child(card)
|
||||
card.selected.connect(
|
||||
func(_x):
|
||||
if WorldManager.isRelease():
|
||||
clearFeeds()
|
||||
title1.hide()
|
||||
if !title2.visible:
|
||||
startBtn.pressed.emit()
|
||||
)
|
||||
feedCounted += 1
|
||||
func afterOpen(_args: Array = []):
|
||||
startBtn.disabled = false
|
||||
|
||||
func clearFeeds():
|
||||
for feed in initialFeedSelection.get_children():
|
||||
|
||||
@@ -7,6 +7,12 @@ class_name StarterPanel
|
||||
@onready var gamemodeOption: OptionButton = $%gamemodeOption
|
||||
@onready var useTutorialBtn: Button = $%useTutorialBtn
|
||||
|
||||
@onready var upgradeFieldsBox: Control = $%upgradeFields
|
||||
@onready var crystalShow: ItemShow = $%crystal
|
||||
@onready var diamondShow: ItemShow = $%diamond
|
||||
|
||||
@onready var charactersBox: Control = $%characters
|
||||
|
||||
@onready var startSingleplayerBtn: Button = $%startSingleplayerBtn
|
||||
@onready var startMultiplayerBtn: Button = $%startMultiplayerBtn
|
||||
@onready var levelShow: Label = $%levelShow
|
||||
@@ -23,9 +29,11 @@ class_name StarterPanel
|
||||
|
||||
var historyStack
|
||||
|
||||
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING]
|
||||
static var START_CHARACTERS = ["MuyangDog", "Lynx", "HCN"]
|
||||
static var buildingShader: bool = true
|
||||
static var selectingFeed: bool = true
|
||||
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING]
|
||||
static var selectedCharacter: String = MathTool.randomChoiceFrom(START_CHARACTERS)
|
||||
|
||||
@rpc("any_peer")
|
||||
func mutexPlayer(player: String):
|
||||
@@ -68,22 +76,26 @@ func startMultiplayerGame():
|
||||
MultiplayerState.connection = multiplayer.multiplayer_peer
|
||||
WorldManager.rootNode.multiplayer.multiplayer_peer = multiplayer.multiplayer_peer
|
||||
for i in getPlayerNames():
|
||||
EntityBase.generatePlayer(i)
|
||||
EntityBase.generatePlayer(i, selectedCharacter)
|
||||
UIState.closeCurrentPanel()
|
||||
func startSingleplayerGame():
|
||||
startSingleplayerBtn.disabled = true
|
||||
MultiplayerState.isMultiplayer = false
|
||||
MultiplayerState.playerName = playerNameInput.text
|
||||
Wave.usingWaveData = GAMEMODE_MAP_WAVE[gamemodeOption.selected]
|
||||
UIState.player = EntityBase.generatePlayer(playerNameInput.text)
|
||||
var extras = ArrayTool.mergeDictionary(ArrayTool.dictionaryFromEntries(
|
||||
getCurrentSelectedCharacter().fields,
|
||||
getCurrentSelectedCharacter().fieldValues
|
||||
), OutGameStorage.upgradableFieldsValue)
|
||||
UIState.player = EntityBase.generatePlayer(playerNameInput.text, selectedCharacter, extras)
|
||||
WorldManager.rootNode.spawnWave(Vector2.ZERO)
|
||||
UIState.setPanel("CompilingTip")
|
||||
if buildingShader:
|
||||
UIState.setPanel("CompilingTip")
|
||||
else:
|
||||
UIState.setPanel("SelectInitialFeed")
|
||||
|
||||
func _ready():
|
||||
historyStack = Composables.useHistoryStack(playerNameInput)
|
||||
diffEdit.min_value = GameRule.difficultyRange.x
|
||||
diffEdit.max_value = GameRule.difficultyRange.y
|
||||
diffEdit.value = GameRule.difficulty
|
||||
useTutorialBtn.toggled.connect(
|
||||
func(on: bool):
|
||||
useTutorialBtn.text = "观看" if on else "跳过"
|
||||
@@ -134,7 +146,6 @@ func _ready():
|
||||
setPlayerName(getLast.call(1), newText)
|
||||
mutexPlayer.rpc(newText)
|
||||
)
|
||||
setState(MultiplayerState.ConnectionState.DISCONNECTED)
|
||||
func _physics_process(_delta):
|
||||
levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value]
|
||||
GameRule.difficulty = diffEdit.value
|
||||
@@ -158,3 +169,55 @@ func getPlayerNames() -> Array[String]:
|
||||
for i in playersList.get_children():
|
||||
result.append(i.text)
|
||||
return result
|
||||
|
||||
func getCurrentSelectedCharacter() -> CharacterCard:
|
||||
return charactersBox.get_node(selectedCharacter as NodePath)
|
||||
|
||||
func beforeOpen(_args: Array = []):
|
||||
diffEdit.min_value = GameRule.difficultyRange.x
|
||||
diffEdit.max_value = GameRule.difficultyRange.y
|
||||
diffEdit.value = GameRule.difficulty
|
||||
setState(MultiplayerState.ConnectionState.DISCONNECTED)
|
||||
rebuildInfo()
|
||||
startSingleplayerBtn.disabled = false
|
||||
Wave.current = 0
|
||||
|
||||
func rebuildInfo():
|
||||
crystalShow.count = OutGameStorage.inventory[ItemStore.ItemType.CRYSTAL]
|
||||
diamondShow.count = OutGameStorage.inventory[ItemStore.ItemType.DIAMOND]
|
||||
for child in upgradeFieldsBox.get_children():
|
||||
upgradeFieldsBox.remove_child(child)
|
||||
for field in OutGameStorage.upgradableFieldsAdvance:
|
||||
var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() as FieldShow
|
||||
var level = OutGameStorage.upgradableFieldsLevel[field]
|
||||
for item in OutGameStorage.upgradableFieldsCost:
|
||||
var count = OutGameStorage.upgradableFieldsCost[item]
|
||||
fieldShow.cost(item, count[0] * (level + count[1]))
|
||||
fieldShow.upgradable = true
|
||||
fieldShow.upgradeValue = OutGameStorage.upgradableFieldsAdvance[field]
|
||||
fieldShow.field = field
|
||||
fieldShow.value = OutGameStorage.upgradableFieldsValue[field]
|
||||
fieldShow.showAdvantage = true
|
||||
fieldShow.upgrade.connect(
|
||||
func(newValue: float):
|
||||
OutGameStorage.upgradableFieldsValue[fieldShow.field] = newValue
|
||||
OutGameStorage.upgradableFieldsLevel[fieldShow.field] += 1
|
||||
rebuildInfo()
|
||||
)
|
||||
upgradeFieldsBox.add_child(fieldShow)
|
||||
for child in charactersBox.get_children():
|
||||
charactersBox.remove_child(child)
|
||||
for character in START_CHARACTERS:
|
||||
var card = ComponentManager.getCharacterCard(character).instantiate() as CharacterCard
|
||||
card.select.connect(
|
||||
func():
|
||||
if card.name == selectedCharacter: return
|
||||
getCurrentSelectedCharacter().animator.play("hide")
|
||||
selectedCharacter = card.name
|
||||
getCurrentSelectedCharacter().animator.play("show")
|
||||
)
|
||||
charactersBox.add_child(card)
|
||||
if selectedCharacter == card.name:
|
||||
card.animator.play("show")
|
||||
else:
|
||||
card.animator.play("hide")
|
||||
|
||||
@@ -7,16 +7,16 @@ var speedScale: float = 1
|
||||
func _init(cd: float = 100):
|
||||
cooldown = cd
|
||||
|
||||
func centralTime():
|
||||
func centralTime() -> float:
|
||||
return cooldown / speedScale
|
||||
func isCooldowned():
|
||||
func isCooldowned() -> bool:
|
||||
return timeSinceLastStart() >= centralTime()
|
||||
func start():
|
||||
func start() -> bool:
|
||||
var state = isCooldowned()
|
||||
if state:
|
||||
lastStart = WorldManager.getTime()
|
||||
return state
|
||||
func timeSinceLastStart():
|
||||
func timeSinceLastStart() -> float:
|
||||
return WorldManager.getTime() - lastStart
|
||||
func percent():
|
||||
func percent() -> float:
|
||||
return timeSinceLastStart() / centralTime()
|
||||
|
||||
@@ -8,10 +8,10 @@ var distance: float = 200
|
||||
var bullets: Array[BulletBase] = []
|
||||
|
||||
func start():
|
||||
startTime = Time.get_ticks_msec()
|
||||
startTime = WorldManager.getTime()
|
||||
running = true
|
||||
func lifetime():
|
||||
return Time.get_ticks_msec() - startTime
|
||||
return WorldManager.getTime() - startTime
|
||||
func getStateAngle(index: int):
|
||||
return lifetime() / period * deg_to_rad(360) - deg_to_rad(360.0 * index / len(bullets))
|
||||
func forceFilter():
|
||||
|
||||
@@ -59,4 +59,5 @@ static func create(scene: PackedScene, spawnPosition: Vector2, parent: Node = nu
|
||||
parent.add_child(cloned)
|
||||
else:
|
||||
WorldManager.rootNode.add_child(cloned)
|
||||
cloned.add_to_group("effects")
|
||||
return cloned
|
||||
|
||||
@@ -67,6 +67,8 @@ var inventory = {
|
||||
ItemStore.ItemType.APPLE: 5,
|
||||
ItemStore.ItemType.BEACHBALL: 0,
|
||||
ItemStore.ItemType.SOUL: 0,
|
||||
ItemStore.ItemType.CRYSTAL: 0,
|
||||
ItemStore.ItemType.DIAMOND: 0
|
||||
}
|
||||
var inventoryMax = {
|
||||
ItemStore.ItemType.BASEBALL: INF, # 无限
|
||||
@@ -74,6 +76,8 @@ var inventoryMax = {
|
||||
ItemStore.ItemType.APPLE: 5,
|
||||
ItemStore.ItemType.BEACHBALL: INF,
|
||||
ItemStore.ItemType.SOUL: INF,
|
||||
ItemStore.ItemType.CRYSTAL: INF,
|
||||
ItemStore.ItemType.DIAMOND: INF,
|
||||
}
|
||||
|
||||
@export var defaultCooldownUnit: float = 100
|
||||
@@ -132,10 +136,6 @@ func _ready():
|
||||
if isPlayer():
|
||||
if displayName == MultiplayerState.playerName:
|
||||
UIState.player = self
|
||||
if WorldManager.isRelease():
|
||||
for i in weaponStore.get_children():
|
||||
i.free()
|
||||
weaponStore.add_child(ComponentManager.getWeapon("PurpleCrystal").instantiate())
|
||||
for i in weaponStore.get_children():
|
||||
i.hide()
|
||||
weapons.append(i)
|
||||
@@ -318,6 +318,7 @@ func collectItem(itemType: ItemStore.ItemType, amount: int):
|
||||
UIState.showTip("[b]%s[/b]已自动强化!" % weapon.displayName)
|
||||
func storeEnergy(value: float, dontChangeDirection: bool = false):
|
||||
energy += value * fields.get(FieldStore.Entity.ENERGY_MULTIPILER)
|
||||
energy = clamp(energy, 0, fields[FieldStore.Entity.MAX_ENERGY])
|
||||
energyChanged.emit(energy, dontChangeDirection)
|
||||
func finalEnergy(base: float):
|
||||
return base / fields.get(FieldStore.Entity.SAVE_ENERGY)
|
||||
@@ -415,6 +416,18 @@ func tryDie(by: BulletBase = null):
|
||||
fields[FieldStore.Entity.MAX_HEALTH] * randf_range(1 - GameRule.beachballOffset, 1 + GameRule.beachballOffset),
|
||||
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
|
||||
)
|
||||
for i in randi_range(0, 20 if isBoss else 5):
|
||||
ItemDropped.generate(
|
||||
ItemStore.ItemType.CRYSTAL,
|
||||
5 if isBoss else 1,
|
||||
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
|
||||
)
|
||||
if isBoss:
|
||||
ItemDropped.generate(
|
||||
ItemStore.ItemType.DIAMOND,
|
||||
randi_range(1, 3),
|
||||
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
|
||||
)
|
||||
if isBoss:
|
||||
ItemDropped.generate(
|
||||
ItemStore.ItemType.SOUL,
|
||||
@@ -431,7 +444,8 @@ func tryDie(by: BulletBase = null):
|
||||
UIState.showTip("[b]%s[/b] 已被打败!" % displayName, TipBox.MessageType.CONGRATULATION)
|
||||
elif isPlayer():
|
||||
UIState.showTip("[b]%s[/b] 似了😭。" % displayName, TipBox.MessageType.ERROR)
|
||||
queue_free()
|
||||
if !isPlayer() || isSummon():
|
||||
queue_free()
|
||||
func tryHeal(count: float):
|
||||
playSound("heal")
|
||||
healed.emit(heal(count * fields.get(FieldStore.Entity.HEAL_ABILITY)))
|
||||
@@ -489,6 +503,7 @@ func summon(who: PackedScene, syncFields: bool = true, lockValue: bool = true) -
|
||||
var instance: SummonBase = who.instantiate()
|
||||
instance.position = get_global_mouse_position()
|
||||
instance.myMaster = self
|
||||
summoned(instance)
|
||||
if isPlayer(): instance.add_to_group("players")
|
||||
if syncFields:
|
||||
if lockValue:
|
||||
@@ -534,32 +549,43 @@ func enterStage(_stage: int):
|
||||
pass
|
||||
func kill():
|
||||
pass
|
||||
func summoned(_entity: SummonBase):
|
||||
pass
|
||||
|
||||
static func findPlayer(playerName: String) -> EntityBase:
|
||||
for i in getPlayers():
|
||||
if i.displayName == playerName:
|
||||
return i
|
||||
return null
|
||||
static func generatePlayer(playerName: String) -> EntityBase:
|
||||
var player = generate(ComponentManager.getCharacter("Rooster"), Vector2.ZERO, false)
|
||||
player.displayName = playerName
|
||||
static func generatePlayer(playerName: String, character: String, extraFields: Dictionary = {}) -> EntityBase:
|
||||
var player = generate(ComponentManager.getCharacter(character), Vector2.ZERO, false, false, true, playerName)
|
||||
player.name = "Player_%s" % playerName
|
||||
var feed = ComponentManager.getAbstract("FeedCardBase").instantiate() as Feed
|
||||
for field in extraFields:
|
||||
feed.fields.append(field)
|
||||
feed.fieldValues.append(extraFields[field])
|
||||
feed.freeToBuy = true
|
||||
feed.apply(player)
|
||||
return player
|
||||
static func generate(
|
||||
entity: PackedScene,
|
||||
spawnPosition: Vector2,
|
||||
isMob: bool = true,
|
||||
spawnAsBoss: bool = false,
|
||||
addToWorld: bool = true
|
||||
addToWorld: bool = true,
|
||||
disName: String = ""
|
||||
):
|
||||
var instance: EntityBase = entity.instantiate()
|
||||
instance.position = spawnPosition
|
||||
instance.isBoss = spawnAsBoss
|
||||
instance.level = clamp((round(Wave.current * (1 + GameRule.entityLevelOffsetByWave * randf_range(-1, 1)))), 1, INF)
|
||||
if disName:
|
||||
instance.displayName = disName
|
||||
if isMob:
|
||||
instance.add_to_group("mobs")
|
||||
else:
|
||||
instance.add_to_group("players")
|
||||
instance.add_to_group("entities")
|
||||
if addToWorld:
|
||||
WorldManager.rootNode.spawn(instance)
|
||||
return instance
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
extends HBoxContainer
|
||||
class_name FieldShow
|
||||
|
||||
signal upgrade(newValue: float)
|
||||
|
||||
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
|
||||
@export var value: float = 0
|
||||
@export var showSign: bool = true
|
||||
@@ -9,19 +11,43 @@ class_name FieldShow
|
||||
@export var useViewCast: bool = false
|
||||
@export var maxed: bool = false
|
||||
@export var showAdvantage: bool = false
|
||||
@export var upgradable: bool = false
|
||||
@export var upgradeValue: float = 0
|
||||
@export var costItems: Array[ItemStore.ItemType] = []
|
||||
@export var costCounts: Array[int] = []
|
||||
|
||||
@onready var icon: TextureRect = $"%icon"
|
||||
@onready var nameLabel: Label = $"%name"
|
||||
@onready var valueLabel: Label = $"%value"
|
||||
@onready var icon: TextureRect = $%icon
|
||||
@onready var nameLabel: Label = $%name
|
||||
@onready var valueLabel: Label = $%value
|
||||
@onready var upgradesBox: Control = $%upgrades
|
||||
@onready var upgradeBtn: Button = $%upgradeBtn
|
||||
@onready var costsBox: Control = $%cost
|
||||
|
||||
func _ready():
|
||||
valueLabel.label_settings = valueLabel.label_settings.duplicate()
|
||||
upgradeBtn.pressed.connect(
|
||||
func():
|
||||
if upgradable:
|
||||
if enoughToUpgrade():
|
||||
for index in len(costItems):
|
||||
var item = costItems[index]
|
||||
OutGameStorage.inventory[item] -= costCounts[index]
|
||||
value += upgradeValue
|
||||
upgrade.emit(value)
|
||||
rebuildInfo()
|
||||
else:
|
||||
UIState.showTip("物品不足!", TipBox.MessageType.ERROR)
|
||||
)
|
||||
rebuildInfo()
|
||||
|
||||
func rebuildInfo():
|
||||
nameLabel.text = FieldStore.entityMap[field]
|
||||
icon.texture = ComponentManager.getFieldTexture(FieldStore.entityMap.get(field))
|
||||
if useViewCast:
|
||||
var caster = FieldStore.entityViewCastMap.get(field)
|
||||
if caster:
|
||||
value = caster.call(entity, value)
|
||||
nameLabel.text = FieldStore.entityMap[field]
|
||||
icon.texture = ComponentManager.getFieldTexture(FieldStore.entityMap.get(field))
|
||||
var formattedValue: String
|
||||
var formattedValue: String = ""
|
||||
var dataType = FieldStore.entityMapType[field]
|
||||
if dataType == FieldStore.DataType.VALUE:
|
||||
formattedValue = "%s" % (MathTool.toSigned(value) if showSign else str(value))
|
||||
@@ -31,18 +57,46 @@ func _ready():
|
||||
formattedValue = "%s°" % (MathTool.toSigned(value) if showSign else str(value))
|
||||
elif dataType == FieldStore.DataType.PERCENT:
|
||||
formattedValue = (MathTool.toSigned(value * 100) if showSign else str(value * 100)) + "%"
|
||||
valueLabel.label_settings = valueLabel.label_settings.duplicate()
|
||||
valueLabel.text = formattedValue
|
||||
if maxed:
|
||||
valueLabel.label_settings.font_color = Color(1, 0.3, 0.3)
|
||||
valueLabel.text = "MAX%s" % valueLabel.text
|
||||
elif showAdvantage:
|
||||
if field in FieldStore.entityNegativeFields:
|
||||
valueLabel.label_settings.font_color = Color.RED if value > 0 else Color.GREEN
|
||||
if value == 0:
|
||||
valueLabel.label_settings.font_color = Color.WHITE
|
||||
else:
|
||||
valueLabel.label_settings.font_color = Color.GREEN if value > 0 else Color.RED
|
||||
if field in FieldStore.entityNegativeFields:
|
||||
valueLabel.label_settings.font_color = Color.RED if value > 0 else Color.GREEN
|
||||
else:
|
||||
valueLabel.label_settings.font_color = Color.GREEN if value > 0 else Color.RED
|
||||
else:
|
||||
valueLabel.label_settings.font_color = Color(1, 1, 1)
|
||||
upgradesBox.visible = upgradable
|
||||
for child in costsBox.get_children():
|
||||
costsBox.remove_child(child)
|
||||
for index in len(costItems):
|
||||
var item = costItems[index]
|
||||
var itemShow = ComponentManager.getUIComponent("ItemShow").instantiate() as ItemShow
|
||||
itemShow.type = item
|
||||
itemShow.count = costCounts[index]
|
||||
itemShow.enough = OutGameStorage.inventory[item] >= costCounts[index]
|
||||
costsBox.add_child(itemShow)
|
||||
func enoughToUpgrade():
|
||||
var result = true
|
||||
for child in costsBox.get_children():
|
||||
if child is ItemShow:
|
||||
if !child.enough:
|
||||
result = false
|
||||
break
|
||||
return result
|
||||
func cost(item: ItemStore.ItemType, count: int):
|
||||
for index in len(costItems):
|
||||
var itemd = costItems[index]
|
||||
if itemd == item:
|
||||
costCounts[index] += count
|
||||
break
|
||||
costItems.append(item)
|
||||
costCounts.append(count)
|
||||
|
||||
static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool, newEntity: EntityBase, newUseViewCast: bool) -> FieldShow:
|
||||
var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate()
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
extends Control
|
||||
class_name GameControl
|
||||
|
||||
@onready var returnBtn: Button = $%returnBtn
|
||||
@onready var exitBtn: Button = $%exitBtn
|
||||
|
||||
func _ready():
|
||||
returnBtn.pressed.connect(
|
||||
func():
|
||||
disable()
|
||||
GameBusManager.restart(get_tree())
|
||||
)
|
||||
exitBtn.pressed.connect(
|
||||
func():
|
||||
disable()
|
||||
get_tree().quit()
|
||||
)
|
||||
enable()
|
||||
|
||||
func enable():
|
||||
returnBtn.disabled = false
|
||||
exitBtn.disabled = false
|
||||
func disable():
|
||||
returnBtn.disabled = true
|
||||
exitBtn.disabled = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://b63fkg0waovo
|
||||
@@ -64,6 +64,7 @@ static func generate(
|
||||
WorldManager.rootNode.call_deferred("add_child", instance)
|
||||
instance.add_to_group("drops")
|
||||
instance.refindPlayer(WorldManager.tree)
|
||||
instance.add_to_group("items")
|
||||
return instance
|
||||
static func getDrops() -> Array[ItemDropped]:
|
||||
var result: Array[ItemDropped] = []
|
||||
|
||||
@@ -31,6 +31,7 @@ func _process(_delta):
|
||||
label.text = text
|
||||
|
||||
func destroy():
|
||||
if animator.is_playing(): return
|
||||
animator.play("hide")
|
||||
await animator.animation_finished
|
||||
queue_free()
|
||||
|
||||
@@ -15,6 +15,8 @@ static var tips: VBoxContainer
|
||||
static var itemsContainer: Control
|
||||
static var energyContainer: Control
|
||||
|
||||
static var showingFields: bool = false
|
||||
|
||||
func _ready():
|
||||
bossbar = $%bossbar
|
||||
panels = $%panels
|
||||
@@ -43,17 +45,14 @@ func _physics_process(_delta):
|
||||
bossbar.visible = true
|
||||
itemsContainer.visible = true
|
||||
energyContainer.visible = true
|
||||
if Input.is_action_just_pressed("showFields"):
|
||||
for i in fields.get_children():
|
||||
fields.remove_child(i)
|
||||
for i in player.fields:
|
||||
if player.fields[i] == EntityBase.TITLE_FLAG:
|
||||
fields.add_child(QuickUI.graySmallText(i))
|
||||
else:
|
||||
fields.add_child(FieldShow.create(i, player.fields[i], false, player, true))
|
||||
fieldsAnimator.play("show")
|
||||
if Input.is_action_just_released("showFields"):
|
||||
fieldsAnimator.play("hide")
|
||||
if !fieldsAnimator.is_playing():
|
||||
if showingFields:
|
||||
if Input.is_action_just_released("showFields") || !(currentPanel is PausePanel):
|
||||
hideFields()
|
||||
else:
|
||||
if Input.is_action_just_pressed("showFields") || currentPanel is PausePanel:
|
||||
showFields()
|
||||
|
||||
if Input.is_action_just_pressed("pause"):
|
||||
if currentPanel:
|
||||
if currentPanel is MakeFeedPanel:
|
||||
@@ -92,8 +91,28 @@ static func setPanel(targetName: String = "", args: Array = []):
|
||||
panel.hidePanel()
|
||||
static func closeCurrentPanel():
|
||||
setPanel()
|
||||
|
||||
static func showTip(text: String, messageType: TipBox.MessageType = TipBox.MessageType.INFO):
|
||||
var box = TipBox.create(text, messageType)
|
||||
tips.add_child(box)
|
||||
await box.animator.animation_finished
|
||||
await TickTool.millseconds(500 * len(text))
|
||||
box.destroy()
|
||||
static func clearTips():
|
||||
for child in tips.get_children():
|
||||
if child is TipBox:
|
||||
child.destroy()
|
||||
|
||||
static func showFields():
|
||||
showingFields = true
|
||||
for i in fields.get_children():
|
||||
fields.remove_child(i)
|
||||
for i in player.fields:
|
||||
if player.fields[i] == EntityBase.TITLE_FLAG:
|
||||
fields.add_child(QuickUI.graySmallText(i))
|
||||
else:
|
||||
fields.add_child(FieldShow.create(i, player.fields[i], false, player, true))
|
||||
fieldsAnimator.play("show")
|
||||
static func hideFields():
|
||||
showingFields = false
|
||||
fieldsAnimator.play("hide")
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
class_name Watcher
|
||||
|
||||
signal changed()
|
||||
|
||||
var currentState = null
|
||||
|
||||
func _init(initialState):
|
||||
currentState = initialState
|
||||
|
||||
func setState(newState):
|
||||
if newState != currentState:
|
||||
currentState = newState
|
||||
changed.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://7uhyhrta5ld1
|
||||
@@ -0,0 +1,56 @@
|
||||
@tool
|
||||
extends Control
|
||||
class_name CharacterCard
|
||||
|
||||
signal select()
|
||||
|
||||
@export var displayName: String = "Unknown Character"
|
||||
@export var slogan: String = "Slogan"
|
||||
@export var avatar: Texture2D = null
|
||||
@export_multiline var description: String = ""
|
||||
@export var fields: Array[FieldStore.Entity] = []
|
||||
@export var fieldValues: Array[float] = []
|
||||
@export var clickToRebuild: bool = false
|
||||
@export var borderOpacity: float = 0
|
||||
|
||||
@onready var avatarTexture: TextureRect = $%avatarTexture
|
||||
@onready var nameLebel: Label = $%nameLabel
|
||||
@onready var sloganLabel: Label = $%sloganLabel
|
||||
@onready var descriptionLabel: Label = $%descriptionLabel
|
||||
@onready var fieldsBox: Control = $%fields
|
||||
@onready var animator: AnimationPlayer = $%animator
|
||||
|
||||
var watcher: Watcher = Watcher.new(false)
|
||||
@onready var panelStyleBox: StyleBoxFlat = get_theme_stylebox("panel").duplicate()
|
||||
|
||||
func _ready():
|
||||
add_theme_stylebox_override("panel", panelStyleBox)
|
||||
watcher.changed.connect(rebuildInfo)
|
||||
gui_input.connect(
|
||||
func(event):
|
||||
if event is InputEventMouseButton:
|
||||
if !(event.pressed && event.button_index == MouseButton.MOUSE_BUTTON_LEFT): return
|
||||
if animator.is_playing(): return
|
||||
select.emit()
|
||||
)
|
||||
rebuildInfo()
|
||||
func _process(_delta):
|
||||
watcher.setState(clickToRebuild)
|
||||
panelStyleBox.border_width_top = int(10 * borderOpacity)
|
||||
panelStyleBox.border_width_bottom = int(10 * borderOpacity)
|
||||
|
||||
func rebuildInfo():
|
||||
avatarTexture.texture = avatar
|
||||
nameLebel.text = displayName
|
||||
sloganLabel.text = "“%s”" % slogan
|
||||
descriptionLabel.text = description
|
||||
for child in fieldsBox.get_children():
|
||||
fieldsBox.remove_child(child)
|
||||
for index in len(fields):
|
||||
var field = fields[index]
|
||||
var value = fieldValues[index]
|
||||
var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() as FieldShow
|
||||
fieldShow.field = field
|
||||
fieldShow.showAdvantage = true
|
||||
fieldShow.value = value
|
||||
fieldsBox.add_child(fieldShow)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cd1xb8m6rvoph
|
||||
@@ -49,10 +49,11 @@ func apply(entity: EntityBase):
|
||||
for i in range(min(fields.size(), fieldValues.size())):
|
||||
var field = fields[i]
|
||||
var value = fieldValues[i]
|
||||
entity.fields[field] += value
|
||||
var applier = FieldStore.entityApplier.get(field)
|
||||
if !applier or applier.call(entity, value):
|
||||
entity.fields[field] += value
|
||||
entity.fields[field] = clamp(entity.fields[field], FieldStore.entityMinValueMap.get(field, 0), FieldStore.entityMaxValueMap.get(field, INF))
|
||||
if applier and applier.call(entity, value):
|
||||
entity.fields[field] -= value
|
||||
entity.fields[field] = clamp(entity.fields[field], FieldStore.entityMinValueMap.get(field, 0), FieldStore.entityMaxValueMap.get(field, INF))
|
||||
for i in weapons:
|
||||
var instance = i.instantiate() as Weapon
|
||||
if UIState.player.weaponBag.has(instance.displayName):
|
||||
@@ -71,7 +72,8 @@ func apply(entity: EntityBase):
|
||||
selected.emit(allHave)
|
||||
return allHave
|
||||
func countOf(index: int) -> int:
|
||||
return ceil(costCounts[index] * multipiler())
|
||||
var base = costCounts[index]
|
||||
return ceil(base * multipiler()) if base > 0 else floor(base / multipiler())
|
||||
func multipiler() -> float:
|
||||
if is_instance_valid(UIState.player):
|
||||
return 1 - UIState.player.fields.get(FieldStore.Entity.PRICE_REDUCTION)
|
||||
|
||||
@@ -87,6 +87,8 @@ func _ready():
|
||||
soulLevel -= 1
|
||||
updateStore(level, UIState.player)
|
||||
rebuildInfo()
|
||||
else:
|
||||
UIState.showTip("[b]%s[/b]还未镶嵌任何灵魂!" % displayName, TipBox.MessageType.ERROR)
|
||||
)
|
||||
inlayBtn.pressed.connect(
|
||||
func():
|
||||
@@ -97,6 +99,10 @@ func _ready():
|
||||
soulLevel += 1
|
||||
updateStore(level, UIState.player)
|
||||
rebuildInfo()
|
||||
else:
|
||||
UIState.showTip("持有的灵魂数量不足!", TipBox.MessageType.ERROR)
|
||||
else:
|
||||
UIState.showTip("[b]%s[/b]的灵魂槽位已满!" % displayName, TipBox.MessageType.ERROR)
|
||||
)
|
||||
moveLeftBtn.pressed.connect(
|
||||
func():
|
||||
@@ -118,7 +124,6 @@ func _ready():
|
||||
)
|
||||
for i in sounds.get_children():
|
||||
i.process_mode = ProcessMode.PROCESS_MODE_ALWAYS
|
||||
rebuildInfo()
|
||||
debugRebuild = false # 只能在编辑器里打开
|
||||
func _physics_process(_delta):
|
||||
if debugRebuild:
|
||||
|
||||
@@ -24,3 +24,24 @@ static func betterMap(arr: Array, executor: Callable) -> Array:
|
||||
for index in len(arr):
|
||||
result.append(executor.call(arr[index], index, arr))
|
||||
return result
|
||||
static func fill(origin: Dictionary, filler: Callable) -> Dictionary:
|
||||
return origin.keys().reduce(
|
||||
func(accum, key):
|
||||
accum[key] = filler.call(key)
|
||||
return accum,
|
||||
{}
|
||||
)
|
||||
static func dictionaryFromEntries(keys: Array, values: Array) -> Dictionary:
|
||||
var result = {}
|
||||
for index in len(keys):
|
||||
var key = keys[index]
|
||||
var value = values[index]
|
||||
result[key] = value
|
||||
return result
|
||||
static func mergeDictionary(a: Dictionary, b: Dictionary) -> Dictionary:
|
||||
var result := {}
|
||||
for key in a:
|
||||
result[key] = a[key]
|
||||
for key in b:
|
||||
result[key] = result.get(key, 0.0) + b[key]
|
||||
return result
|
||||
|
||||
@@ -105,7 +105,7 @@ static var entityMaxValueMap = {
|
||||
Entity.CRIT_RATE: 0.9,
|
||||
Entity.PENERATE: 0.9,
|
||||
Entity.PENARATION_RESISTANCE: 1,
|
||||
Entity.PRICE_REDUCTION: 0.7,
|
||||
Entity.PRICE_REDUCTION: 0.85,
|
||||
Entity.DROP_APPLE_RATE: 0.3,
|
||||
Entity.FEED_COUNT_SHOW: 5,
|
||||
Entity.BULLET_TRACE: 1,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
class_name GameRule
|
||||
|
||||
static var deadReasons: Array = JsonTool.parseJson("res://resources/constants/deadReasons.json")
|
||||
static var helpText: String
|
||||
static var difficultyRange: Vector2 = Vector2(-20, 50) # 难度倍数范围,包括最小值和最大值,负数则降低难度
|
||||
static var difficulty: float = 1 # 难度倍数,可以写小数
|
||||
static var allowFriendlyFire: bool = false # 是否允许友军伤害
|
||||
@@ -9,7 +10,7 @@ static var damageOffset: float = MathTool.percent(20) # 伤害随机浮动比例
|
||||
static var beachballOffset: float = MathTool.percent(30) # 棒球掉落数随机浮动比例
|
||||
static var damageLabelSpawnOffset: float = 30 # 伤害标签生成位置的随机偏移
|
||||
static var itemDroppedSpawnOffset: float = 30 # 掉落物生成位置的随机偏移
|
||||
static var appleDropRate: float = MathTool.percent(3) # 苹果掉落概率
|
||||
static var appleDropRate: float = MathTool.percent(2) # 苹果掉落概率
|
||||
static var refreshCountIncreaseCount: Vector2i = Vector2i(0, 3) # 刷新所需的棒球数量的增加的数量
|
||||
static var entityCountBoostPerWave: float = MathTool.percent(2) # 每波敌人数量增加的百分比,倍数级
|
||||
static var itemShowLifetime: int = 1500 # 物品展示组件如果设置了自动隐藏,那么隐藏前可以存活的时间
|
||||
|
||||
@@ -7,6 +7,8 @@ enum ItemType {
|
||||
APPLE,
|
||||
BEACHBALL,
|
||||
SOUL,
|
||||
CRYSTAL,
|
||||
DIAMOND
|
||||
}
|
||||
static var nameMap = {
|
||||
ItemType.BASEBALL: "棒球",
|
||||
@@ -14,6 +16,8 @@ static var nameMap = {
|
||||
ItemType.APPLE: "苹果",
|
||||
ItemType.BEACHBALL: "沙滩球",
|
||||
ItemType.SOUL: "灵魂",
|
||||
ItemType.CRYSTAL: "紫水晶",
|
||||
ItemType.DIAMOND: "钻石"
|
||||
}
|
||||
static var idMap = {
|
||||
ItemType.BASEBALL: "baseball",
|
||||
@@ -21,6 +25,8 @@ static var idMap = {
|
||||
ItemType.APPLE: "apple",
|
||||
ItemType.BEACHBALL: "beachball",
|
||||
ItemType.SOUL: "soul",
|
||||
ItemType.CRYSTAL: "crystal",
|
||||
ItemType.DIAMOND: "diamond"
|
||||
}
|
||||
static func getTexture(type: ItemType) -> Texture2D:
|
||||
return ComponentManager.getItemTexture(idMap.get(type, "baseball"))
|
||||
|
||||
@@ -7,6 +7,7 @@ class_name CameraManager
|
||||
@onready var animator: AnimationPlayer = $"%animator"
|
||||
|
||||
var shakeIntensity: float = 0
|
||||
var shaking: bool = false
|
||||
|
||||
static var instance: CameraManager = null
|
||||
|
||||
@@ -16,7 +17,7 @@ func _physics_process(_delta):
|
||||
if is_instance_valid(UIState.player):
|
||||
position = UIState.player.position + constantOffset
|
||||
position += MathTool.sampleInCircle(shakeIntensity)
|
||||
offset += ((get_global_mouse_position() - UIState.player.position).clampf(-100, 100) - offset) * 0.15
|
||||
position += MouseTool.getPositionByScreen(Vector2.ONE * 0.5, self ) / 2
|
||||
|
||||
static func shake(millseconds: float, intensity: float = 10, steper: Callable = func(currentValue, _totalValue, _restPercent): return currentValue):
|
||||
if StarterPanel.buildingShader: return
|
||||
@@ -25,8 +26,11 @@ static func shake(millseconds: float, intensity: float = 10, steper: Callable =
|
||||
await TickTool.until(
|
||||
func():
|
||||
instance.shakeIntensity = steper.call(instance.shakeIntensity, intensity, 1 - (WorldManager.getTime() - startTime) / millseconds)
|
||||
return WorldManager.getTime() - startTime >= millseconds
|
||||
return WorldManager.getTime() - startTime >= millseconds || !instance.shaking
|
||||
)
|
||||
instance.shakeIntensity = 0
|
||||
static func shakeStop():
|
||||
instance.shaking = false
|
||||
instance.shakeIntensity = 0
|
||||
static func playAnimation(animation: String):
|
||||
instance.animator.play(animation)
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
extends Node
|
||||
class_name ComponentManager
|
||||
|
||||
static var abstracts = {}
|
||||
static var bullets = {}
|
||||
static var characterCards = {}
|
||||
static var characters = {}
|
||||
static var weapons = {}
|
||||
static var summons = {}
|
||||
@@ -16,8 +18,12 @@ static var fieldTextures = {}
|
||||
static var itemTextures = {}
|
||||
|
||||
static func init():
|
||||
for i in DirTool.listdir("res://components/Abstracts"):
|
||||
abstracts[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
for i in DirTool.listdir("res://components/Bullets"):
|
||||
bullets[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
for i in DirTool.listdir("res://components/CharacterCards"):
|
||||
characterCards[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
for i in DirTool.listdir("res://components/Characters"):
|
||||
characters[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
for i in DirTool.listdir("res://components/Weapons"):
|
||||
@@ -40,8 +46,13 @@ static func init():
|
||||
fieldTextures[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
for i in DirTool.listdir("res://resources/items"):
|
||||
itemTextures[DirTool.getBasenameWithoutExtension(i)] = load(i)
|
||||
|
||||
static func getAbstract(t: String) -> PackedScene:
|
||||
return MathTool.priority(abstracts.get(t, false), load("res://components/Abstracts/%s.tscn" % t))
|
||||
static func getBullet(t: String) -> PackedScene:
|
||||
return MathTool.priority(bullets.get(t, false), load("res://components/Bullets/%s.tscn" % t))
|
||||
static func getCharacterCard(t: String) -> PackedScene:
|
||||
return MathTool.priority(characterCards.get(t, false), load("res://components/CharacterCards/%s.tscn" % t))
|
||||
static func getCharacter(t: String) -> PackedScene:
|
||||
return MathTool.priority(characters.get(t, false), load("res://components/Characters/%s.tscn" % t))
|
||||
static func getWeapon(t: String) -> PackedScene:
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
class_name GameBusManager
|
||||
|
||||
static func restart(tree: SceneTree):
|
||||
for bullet in tree.get_nodes_in_group("bullets"):
|
||||
bullet.queue_free()
|
||||
for entity in tree.get_nodes_in_group("entities"):
|
||||
entity.queue_free()
|
||||
for effect in tree.get_nodes_in_group("effects"):
|
||||
effect.queue_free()
|
||||
for item in tree.get_nodes_in_group("items"):
|
||||
item.queue_free()
|
||||
|
||||
UIState.hideFields()
|
||||
OutGameStorage.saveInventory()
|
||||
CameraManager.shakeStop()
|
||||
WorldManager.timeRestart()
|
||||
StarterPanel.selectingFeed = true
|
||||
|
||||
UIState.setPanel("Starter")
|
||||
@@ -0,0 +1 @@
|
||||
uid://cf1agt55tt4pu
|
||||
@@ -38,6 +38,8 @@ func spawn(node: Node):
|
||||
func justReturn(data):
|
||||
return ArrayTool.parseEncodedObject(data)[0]
|
||||
|
||||
static func timeRestart():
|
||||
runningTime = 0
|
||||
static func getTime():
|
||||
return runningTime
|
||||
static func spawnNode(node: Node):
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class_name MouseTool
|
||||
|
||||
static func getPositionByScreen(anchor: Vector2, by: Node):
|
||||
var viewport = by.get_viewport()
|
||||
return viewport.get_mouse_position() - viewport.get_visible_rect().size * anchor
|
||||
@@ -0,0 +1 @@
|
||||
uid://yf2h5ni3gobm
|
||||
@@ -0,0 +1,25 @@
|
||||
class_name OutGameStorage
|
||||
|
||||
static var upgradableFieldsCost = {
|
||||
ItemStore.ItemType.CRYSTAL: [50, 1], # [每级所需,初始等级]
|
||||
ItemStore.ItemType.DIAMOND: [1, 0],
|
||||
}
|
||||
static var upgradableFieldsAdvance = {
|
||||
FieldStore.Entity.MAX_HEALTH: 10,
|
||||
FieldStore.Entity.MAX_ENERGY: 15,
|
||||
FieldStore.Entity.DAMAGE_MULTIPILER: 0.1,
|
||||
FieldStore.Entity.ATTACK_SPEED: 0.05,
|
||||
FieldStore.Entity.PRICE_REDUCTION: 0.03,
|
||||
FieldStore.Entity.LUCK_VALUE: 1,
|
||||
FieldStore.Entity.DROP_APPLE_RATE: 0.007
|
||||
}
|
||||
static var upgradableFieldsValue = ArrayTool.fill(upgradableFieldsAdvance, func(_k): return 0)
|
||||
static var upgradableFieldsLevel = ArrayTool.fill(upgradableFieldsAdvance, func(_k): return 0)
|
||||
|
||||
static var maxInitialFeedCount: int = 3
|
||||
static var maxInitialWeaponCount: int = 3
|
||||
static var inventory = ArrayTool.fill(upgradableFieldsCost, func(_k): return 0)
|
||||
|
||||
static func saveInventory():
|
||||
for item in OutGameStorage.inventory:
|
||||
OutGameStorage.inventory[item] += UIState.player.inventory[item]
|
||||
@@ -0,0 +1 @@
|
||||
uid://dum6mef633vej
|
||||
@@ -0,0 +1,17 @@
|
||||
[gd_resource type="StyleBoxFlat" format=3 uid="uid://c2umi01exgdmu"]
|
||||
|
||||
[resource]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.70000005)
|
||||
border_width_left = 10
|
||||
border_width_right = 10
|
||||
border_color = Color(1, 1, 1, 1)
|
||||
border_blend = true
|
||||
corner_radius_top_left = 15
|
||||
corner_radius_top_right = 15
|
||||
corner_radius_bottom_right = 15
|
||||
corner_radius_bottom_left = 15
|
||||
corner_detail = 1
|
||||
@@ -1,18 +1,3 @@
|
||||
# Todo
|
||||
|
||||
1. 完成Godockly UGC框架。
|
||||
2. 设计新boss
|
||||
|
||||
## 新boss
|
||||
|
||||
主题:强大的防御能力+近战攻击。
|
||||
|
||||
### 招式
|
||||
|
||||
1. 使用**扫帚**进行4段挥舞攻击,上挑-下批-短戳-突刺(cooldown=6s)
|
||||
2. **扫帚**蓄力0.5s,向玩家冲刺,**距离足够近或冲刺结束**后挥出武器(蓄力+攻击互斥)
|
||||
3. 召唤3把**扫帚炮**,每0.2s释放发射一柱**灰尘射线**(cooldown=10s)
|
||||
4. 召唤**自旋扫帚**,每1秒旋转1圈,此时boss移速+100%(cooldown=8s,蓄力)
|
||||
5. 发射**扫帚回旋镖**,可飞行1秒后回旋(攻击互斥)
|
||||
6. 发动**格挡**,抵挡玩家的近战或射弹伤害(cooldown=2s)
|
||||
7. 发动**闪避**,侧向冲刺躲避离自身最近的玩家子弹(cooldown=5s)
|
||||
|
||||
Reference in New Issue
Block a user