This commit is contained in:
TsubakiLoL 2024-12-12 19:09:32 +08:00
parent 65d996a668
commit 319aad8b76
18 changed files with 628 additions and 13 deletions

1
2d_action_choice.gd Normal file
View File

@ -0,0 +1 @@
extends Button

View File

@ -1031,3 +1031,10 @@ func explore_finish(character_data:Dictionary,round_data:Dictionary):
Toast.popup(Database.get_scene_name(now_scene)+"探索度增加"+str(round_data["right_total"])+"!") Toast.popup(Database.get_scene_name(now_scene)+"探索度增加"+str(round_data["right_total"])+"!")
change_scene_explore(now_scene,round_data["right_total"]) change_scene_explore(now_scene,round_data["right_total"])
pass pass
var now_2d_fight_scene:Fight2D

View File

@ -37,5 +37,60 @@ func get_action_could_use_block(_self:UnitBlock,tile_map_area:Rect2i,global_bloc
res[ind.x][ind.y]=true res[ind.x][ind.y]=true
attack_cache=res attack_cache=res
return res return res
#展示施法演示
func draw_action_with_target(_self:UnitBlock,tile_map_area:Rect2i,global_block_data:Dictionary,target:Vector2i,block_add_pos:TileMapLayer):
var right_pos=tile_map_area.position+tile_map_area.size
if target.x<tile_map_area.position.x or target.x>right_pos.x or target.y<tile_map_area.position.y or target.y>right_pos.y:
Global.now_2d_fight_scene.close_right_character()
var crood=target-tile_map_area.position
var cache=attack_cache[crood.x][crood.y]
if cache:
Global.now_2d_fight_scene.show_right_character({})
else:
Global.now_2d_fight_scene.close_right_character()
pass
#释放施法演示
func del_action_with_target():
Global.now_2d_fight_scene.close_right_character()
pass
#在_self上使用action动作,返回是否成功
func block_use_action(_self:UnitBlock,tile_map_area:Rect2i,global_block_data:Dictionary,target=null)->bool:
if not target is Vector2i:
return false
var character_pos:Vector2i=_self.block_pos
var up:Vector2i=character_pos-Vector2i(0,1)
var down:Vector2i=character_pos+Vector2i(0,1)
var left:Vector2i=character_pos-Vector2i(1,0)
var right:Vector2i=character_pos+Vector2i(1,0)
var pos_arr=[up,down,left,right]
if not target in pos_arr:
return false
if not global_block_data.has(target):
return false
var could_attack=false
var block_arr=global_block_data[target]
for j in block_arr:
if j is BaseBlock:
could_attack =could_attack or j.could_be_used_for_target
if j.could_be_used_for_target:
j.attacked()
if could_attack:
return true
return false
var draw_line

View File

@ -3,6 +3,13 @@ extends Node2D
#基础地块 #基础地块
class_name BaseBlock class_name BaseBlock
@export var block_name:String="default"
@export var block_attribute:Dictionary={
}
#当地块要求进行移动时发出 #当地块要求进行移动时发出
signal request_block_move(before_pos:Vector2i,request_pos:Vector2i) signal request_block_move(before_pos:Vector2i,request_pos:Vector2i)
#当前地块是否可以行走 #当前地块是否可以行走

View File

@ -3,6 +3,8 @@ extends BaseBlock
class_name UnitBlock class_name UnitBlock
#单位的数据 #单位的数据
var unit_data:Dictionary={} var unit_data:Dictionary={}

View File

@ -0,0 +1,15 @@
[gd_scene load_steps=2 format=3 uid="uid://b0ctm82e6x7yp"]
[ext_resource type="Script" path="res://2d_action_choice.gd" id="1_yf2d6"]
[node name="2d_action_choice" type="Button"]
size_flags_horizontal = 3
theme_override_colors/font_hover_pressed_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_hover_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_pressed_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_focus_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_font_sizes/font_size = 26
text = "结束"
flat = true
script = ExtResource("1_yf2d6")
metadata/_edit_use_anchors_ = true

View File

@ -1,4 +1,10 @@
extends Node2D extends Node2D
class_name Fight2D
const BLOCK_TAG_LABEL = preload("res://scene/_2d_fight/block_tag_label.tscn")
const _2D_ACTION_CHOICE = preload("res://scene/_2d_fight/2d_action_choice.tscn")
#网格寻路系统 #网格寻路系统
var astar:AStarGrid2D=AStarGrid2D.new() var astar:AStarGrid2D=AStarGrid2D.new()
@ -105,7 +111,10 @@ func turn():
j.turn() j.turn()
next() next()
pass pass
var character_block_tween
func next(): func next():
if %left_character_drawer.is_open:
close_left_character()
for i in %choice_add_pos.get_children(): for i in %choice_add_pos.get_children():
i.queue_free() i.queue_free()
now_index+=1 now_index+=1
@ -115,12 +124,22 @@ func next():
return return
var now_block:UnitBlock=friendly_side[now_index] var now_block:UnitBlock=friendly_side[now_index]
now_use_block=now_block now_use_block=now_block
if character_block_tween!=null:
character_block_tween.kill()
character_block_tween=create_tween()
character_block_tween.tween_property(%main_camera,"global_position",now_block.position,0.2)
show_left_character({})
var choice_arr=now_block.get_all_choice() var choice_arr=now_block.get_all_choice()
for i in range(choice_arr.size()): for i in range(choice_arr.size()):
var new_btn=Button.new() var new_btn=_2D_ACTION_CHOICE.instantiate()
new_btn.pressed.connect(select_choice.bind(i)) new_btn.pressed.connect(select_choice.bind(i))
new_btn.text=choice_arr[i] new_btn.text=choice_arr[i]
%choice_add_pos.add_child(new_btn) %choice_add_pos.add_child(new_btn)
%action.modulate.a=0
%action.show()
var tween=create_tween()
tween.tween_property(%action,"modulate:a",1,0.2)
pass pass
func select_choice(index:int): func select_choice(index:int):
print(index) print(index)
@ -129,6 +148,7 @@ func select_choice(index:int):
func _ready() -> void: func _ready() -> void:
Global.now_2d_fight_scene=self
astar.default_compute_heuristic=AStarGrid2D.HEURISTIC_MANHATTAN astar.default_compute_heuristic=AStarGrid2D.HEURISTIC_MANHATTAN
astar.default_estimate_heuristic=AStarGrid2D.HEURISTIC_MANHATTAN astar.default_estimate_heuristic=AStarGrid2D.HEURISTIC_MANHATTAN
astar.diagonal_mode=AStarGrid2D.DIAGONAL_MODE_NEVER astar.diagonal_mode=AStarGrid2D.DIAGONAL_MODE_NEVER
@ -187,10 +207,29 @@ func _process(delta: float) -> void:
var res=now_action.block_use_action(now_use_block,Rect2i(tile_map_area_from,tile_map_area_to-tile_map_area_from),global_block_data,crood) var res=now_action.block_use_action(now_use_block,Rect2i(tile_map_area_from,tile_map_area_to-tile_map_area_from),global_block_data,crood)
if res: if res:
now_use_action=-1 now_use_action=-1
else:
var crood=%block_add_pos.local_to_map(get_global_mouse_position())
if crood!=before_crood:
before_index=0
if global_block_data.has(crood):
var arr=global_block_data[crood]
if arr.size()==0:
close_block_mes()
else:
var block:BaseBlock=arr[before_index]
pop_up_block_mes(block.block_name,block.block_attribute)
else:
close_block_mes()
pass
if Input.is_action_just_pressed("esc"): if Input.is_action_just_pressed("esc"):
now_use_action=-1 now_use_action=-1
#上一次展示的block信息
var before_crood:Vector2i=Vector2i.ZERO
#上一次弹出地块信息的层级
var before_index:int=0
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if event is InputEventMouseMotion: if event is InputEventMouseMotion:
var mouse_pos=get_global_mouse_position() var mouse_pos=get_global_mouse_position()
@ -304,3 +343,81 @@ func _on_pop_4_pressed() -> void:
func _on_alert_timer_timeout() -> void: func _on_alert_timer_timeout() -> void:
%alert_drawer.change_open(false) %alert_drawer.change_open(false)
pass # Replace with function body. pass # Replace with function body.
#弹出地块信息,attribute字典应为String:bool
func pop_up_block_mes(_name:String,attribute:Dictionary):
%block_name.text=_name
for i in %block_label_add_pos.get_children():
i.queue_free()
for i in attribute.keys():
var new_tag=BLOCK_TAG_LABEL.instantiate()
%block_label_add_pos.add_child(new_tag)
new_tag.set_mes(i,attribute[i])
%block_drawer.change_open(true)
#收起地块信息
func close_block_mes():
if %block_drawer.is_open:
%block_drawer.change_open(false)
pass
func pop_up_choice(text:String,acc_callback:Callable,ref_callback:Callable):
%choice.modulate.a=0
%choice_text.text=text
ac_cal=acc_callback
re_cal=ref_callback
%choice.show()
var tween=create_tween()
tween.tween_property(%choice,"modulate:a",1,0.2)
pass
var ac_cal
var re_cal
func _on_action_close_pressed() -> void:
%action.hide()
pop_up_choice("是否结束本角色回合?",next,%action.show)
pass # Replace with function body.
func _on_choice_accept_pressed() -> void:
if ac_cal is Callable:
if ac_cal.is_valid():
ac_cal.call()
%choice.hide()
pass # Replace with function body.
func _on_choice_refuse_pressed() -> void:
if re_cal is Callable:
if re_cal.is_valid():
re_cal.call()
%choice.hide()
pass # Replace with function body.
#展示左边的角色信息
func show_left_character(data:Dictionary):
%left_character_drawer.change_open(true)
pass
#展示右边的角色信息
func show_right_character(data:Dictionary):
%right_character_drawer.change_open(true)
pass
#关闭左边的角色信息
func close_left_character():
if %left_character_drawer.is_open:
%left_character_drawer.change_open(false)
pass
#关闭右边的角色信息
func close_right_character():
if %right_character_drawer.is_open:
%right_character_drawer.change_open(false)
pass

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=50 format=4 uid="uid://du6ct6v45ljtu"] [gd_scene load_steps=51 format=4 uid="uid://du6ct6v45ljtu"]
[ext_resource type="Script" path="res://scene/_2d_fight/2d_fight.gd" id="1_i1eox"] [ext_resource type="Script" path="res://scene/_2d_fight/2d_fight.gd" id="1_i1eox"]
[ext_resource type="Texture2D" uid="uid://wld1fbwto47r" path="res://res/ui/ui_033_2d_fight/icon_color_64x64/black.png" id="2_rfpw5"] [ext_resource type="Texture2D" uid="uid://wld1fbwto47r" path="res://res/ui/ui_033_2d_fight/icon_color_64x64/black.png" id="2_rfpw5"]
@ -28,6 +28,7 @@
[ext_resource type="Texture2D" uid="uid://baqbhrxe7o1ay" path="res://res/ui/new_ui_005_2d_fight/move.png" id="26_2cd20"] [ext_resource type="Texture2D" uid="uid://baqbhrxe7o1ay" path="res://res/ui/new_ui_005_2d_fight/move.png" id="26_2cd20"]
[ext_resource type="Texture2D" uid="uid://dv62ydas2laek" path="res://res/ui/new_ui_005_2d_fight/矩形 100@1x.png" id="27_mopsr"] [ext_resource type="Texture2D" uid="uid://dv62ydas2laek" path="res://res/ui/new_ui_005_2d_fight/矩形 100@1x.png" id="27_mopsr"]
[ext_resource type="Texture2D" uid="uid://dcmnrhjs332n2" path="res://res/ui/new_ui_005_2d_fight/角色@1x-2.png" id="28_0p1qk"] [ext_resource type="Texture2D" uid="uid://dcmnrhjs332n2" path="res://res/ui/new_ui_005_2d_fight/角色@1x-2.png" id="28_0p1qk"]
[ext_resource type="PackedScene" uid="uid://3r388ypcowro" path="res://scene/_2d_fight/2d_fight_attribute_table.tscn" id="28_57n5y"]
[ext_resource type="Texture2D" uid="uid://q3hydkfgphua" path="res://res/ui/new_ui_005_2d_fight/矩形 133@1x.png" id="29_gfcum"] [ext_resource type="Texture2D" uid="uid://q3hydkfgphua" path="res://res/ui/new_ui_005_2d_fight/矩形 133@1x.png" id="29_gfcum"]
[sub_resource type="Gradient" id="Gradient_qwpaw"] [sub_resource type="Gradient" id="Gradient_qwpaw"]
@ -355,6 +356,7 @@ tile_set = SubResource("TileSet_aef74")
[node name="color_block" type="TileMapLayer" parent="tile_map"] [node name="color_block" type="TileMapLayer" parent="tile_map"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
tile_set = SubResource("TileSet_j5hfj") tile_set = SubResource("TileSet_j5hfj")
[node name="mouse_block" type="TileMapLayer" parent="tile_map"] [node name="mouse_block" type="TileMapLayer" parent="tile_map"]
@ -401,7 +403,6 @@ theme_override_constants/margin_bottom = 10
layout_mode = 2 layout_mode = 2
[node name="choice_add_pos" type="VBoxContainer" parent="CanvasLayer/panel_container/Panel/MarginContainer/VBoxContainer"] [node name="choice_add_pos" type="VBoxContainer" parent="CanvasLayer/panel_container/Panel/MarginContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/separation = 30 theme_override_constants/separation = 30
@ -452,6 +453,8 @@ script = ExtResource("9_kd3fp")
button_model = 3 button_model = 3
disable_button = true disable_button = true
animation_model = 4 animation_model = 4
is_open = false
rag = 1.0
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/Control/block_drawer"] [node name="TextureRect" type="TextureRect" parent="CanvasLayer/Control/block_drawer"]
@ -469,7 +472,8 @@ anchor_bottom = 0.291925
texture = ExtResource("10_mh3nh") texture = ExtResource("10_mh3nh")
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="Label" type="Label" parent="CanvasLayer/Control/block_drawer/TextureRect/TextureRect"] [node name="block_name" type="Label" parent="CanvasLayer/Control/block_drawer/TextureRect/TextureRect"]
unique_name_in_owner = true
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.0454545 anchor_left = 0.0454545
@ -527,6 +531,7 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
[node name="Control" type="Control" parent="CanvasLayer/Control"] [node name="Control" type="Control" parent="CanvasLayer/Control"]
visible = false
layout_mode = 1 layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@ -743,7 +748,6 @@ offset_bottom = 7.0
grow_vertical = 0 grow_vertical = 0
script = ExtResource("9_kd3fp") script = ExtResource("9_kd3fp")
button_model = 3 button_model = 3
animation_time = 0.2
disable_button = true disable_button = true
animation_model = 0 animation_model = 0
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
@ -890,6 +894,23 @@ anchor_bottom = 0.719298
texture = ExtResource("27_mopsr") texture = ExtResource("27_mopsr")
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="2d_fight_attribute_table" parent="CanvasLayer/Control/left_character_drawer/Control/TextureRect" instance=ExtResource("28_57n5y")]
layout_mode = 0
anchor_left = 0.628572
anchor_top = 0.201756
anchor_right = 0.815873
anchor_bottom = 0.719297
offset_right = 0.0
offset_bottom = 0.0
attribute_name_1 = "近战"
attribute_value_1 = 95.0
attribute_name_2 = "护甲"
attribute_value_2 = 95.0
attribute_name_3 = "暴击率"
attribute_name_4 = "远程"
attribute_value_4 = 50.0
metadata/_edit_use_anchors_ = true
[node name="right_character_drawer" type="Container" parent="CanvasLayer/Control"] [node name="right_character_drawer" type="Container" parent="CanvasLayer/Control"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 1 layout_mode = 1
@ -903,9 +924,10 @@ offset_bottom = 7.0
grow_vertical = 0 grow_vertical = 0
script = ExtResource("9_kd3fp") script = ExtResource("9_kd3fp")
button_model = 2 button_model = 2
animation_time = 0.2
disable_button = true disable_button = true
animation_model = 0 animation_model = 0
is_open = false
rag = 1.0
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="Control" type="Control" parent="CanvasLayer/Control/right_character_drawer"] [node name="Control" type="Control" parent="CanvasLayer/Control/right_character_drawer"]
@ -1055,7 +1077,9 @@ anchor_bottom = 0.75
texture = ExtResource("27_mopsr") texture = ExtResource("27_mopsr")
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/Control"] [node name="choice" type="TextureRect" parent="CanvasLayer/Control"]
unique_name_in_owner = true
visible = false
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.398958 anchor_left = 0.398958
@ -1065,7 +1089,8 @@ anchor_bottom = 0.992593
texture = ExtResource("29_gfcum") texture = ExtResource("29_gfcum")
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="Label" type="Label" parent="CanvasLayer/Control/TextureRect"] [node name="choice_text" type="Label" parent="CanvasLayer/Control/choice"]
unique_name_in_owner = true
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.113503 anchor_left = 0.113503
@ -1078,7 +1103,7 @@ horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="Button" type="Button" parent="CanvasLayer/Control/TextureRect"] [node name="choice_accept" type="Button" parent="CanvasLayer/Control/choice"]
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.18591 anchor_left = 0.18591
@ -1095,7 +1120,7 @@ text = "确定"
flat = true flat = true
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="Button2" type="Button" parent="CanvasLayer/Control/TextureRect"] [node name="choice_refuse" type="Button" parent="CanvasLayer/Control/choice"]
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.506849 anchor_left = 0.506849
@ -1111,9 +1136,63 @@ text = "取消"
flat = true flat = true
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="action" type="TextureRect" parent="CanvasLayer/Control"]
unique_name_in_owner = true
visible = false
layout_mode = 1
anchors_preset = -1
anchor_left = 0.336458
anchor_top = 0.562037
anchor_right = 0.691146
anchor_bottom = 1.06944
texture = ExtResource("29_gfcum")
metadata/_edit_use_anchors_ = true
[node name="Label" type="Label" parent="CanvasLayer/Control/action"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.13069
anchor_top = 0.218978
anchor_right = 0.885463
anchor_bottom = 0.344891
offset_left = -1.52588e-05
offset_top = -1.52588e-05
theme_override_font_sizes/font_size = 26
text = "我要做什么?"
horizontal_alignment = 1
vertical_alignment = 1
metadata/_edit_use_anchors_ = true
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/action"]
layout_mode = 0
anchor_left = 0.146843
anchor_top = 0.344891
anchor_right = 0.86931
anchor_bottom = 0.806569
metadata/_edit_use_anchors_ = true
[node name="choice_add_pos" type="VBoxContainer" parent="CanvasLayer/Control/action/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
[node name="action_close" type="Button" parent="CanvasLayer/Control/action/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_hover_pressed_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_hover_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_pressed_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_colors/font_focus_color = Color(0.984314, 1, 0.00392157, 1)
theme_override_font_sizes/font_size = 26
text = "结束"
flat = true
metadata/_edit_use_anchors_ = true
[connection signal="pressed" from="CanvasLayer/panel_container/Panel/MarginContainer/VBoxContainer/next" to="." method="_on_next_pressed"] [connection signal="pressed" from="CanvasLayer/panel_container/Panel/MarginContainer/VBoxContainer/next" to="." method="_on_next_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop1" to="." method="_on_pop_1_pressed"] [connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop1" to="." method="_on_pop_1_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop2" to="." method="_on_pop_2_pressed"] [connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop2" to="." method="_on_pop_2_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop3" to="." method="_on_pop_3_pressed"] [connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop3" to="." method="_on_pop_3_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop4" to="." method="_on_pop_4_pressed"] [connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/pop4" to="." method="_on_pop_4_pressed"]
[connection signal="timeout" from="CanvasLayer/Control/alert_drawer/alert_timer" to="." method="_on_alert_timer_timeout"] [connection signal="timeout" from="CanvasLayer/Control/alert_drawer/alert_timer" to="." method="_on_alert_timer_timeout"]
[connection signal="pressed" from="CanvasLayer/Control/choice/choice_accept" to="." method="_on_choice_accept_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/choice/choice_refuse" to="." method="_on_choice_refuse_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/action/VBoxContainer/action_close" to="." method="_on_action_close_pressed"]

View File

@ -0,0 +1,108 @@
extends TextureRect
@export var attribute_name_1:String="":
set(val):
attribute_name_1=val
%attribute_name_1.text=val
@export var attribute_value_1:float=0:
set(val):
attribute_value_1=val
%attribute_value_1.text=str(val)
draw_by_value()
@export var attribute_value_1_max:float=100:
set(val):
attribute_value_1_max=val
draw_by_value()
@export var attribute_name_2:String="":
set(val):
attribute_name_2=val
%attribute_name_2.text=val
@export var attribute_value_2:float=0:
set(val):
attribute_value_2=val
%attribute_value_2.text=str(val)
draw_by_value()
@export var attribute_value_2_max:float=100:
set(val):
attribute_value_2_max=val
draw_by_value()
@export var attribute_name_3:String="":
set(val):
attribute_name_3=val
%attribute_name_3.text=val
@export var attribute_value_3:float=0:
set(val):
attribute_value_3=val
%attribute_value_3.text=str(val)
draw_by_value()
@export var attribute_value_3_max:float=100:
set(val):
attribute_value_3_max=val
draw_by_value()
@export var attribute_name_4:String="":
set(val):
attribute_name_4=val
%attribute_name_4.text=val
@export var attribute_value_4:float=0:
set(val):
attribute_value_4=val
%attribute_value_4.text=str(val)
draw_by_value()
@export var attribute_value_4_max:float=100:
set(val):
attribute_value_4_max=val
draw_by_value()
@export var color:Color=Color("FCE1A3")
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
await get_tree().process_frame
queue_redraw()
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
var points:PackedVector2Array=PackedVector2Array()
func draw_by_value():
print("draw")
var f1=attribute_value_1/attribute_value_1_max
var f2=attribute_value_2/attribute_value_2_max
var f3=attribute_value_3/attribute_value_3_max
var f4=attribute_value_4/attribute_value_4_max
draw_table(f1,f2,f3,f4)
func draw_table(up:float,right:float,down:float,left:float):
points.clear()
points.append(size/2-Vector2(0,size.y*up/2))
points.append(size/2+Vector2(size.x*right/2,0))
points.append(size/2+Vector2(0,size.y*down/2))
points.append(size/2-Vector2(size.x*left/2,0))
queue_redraw()
pass
func _draw() -> void:
print("_draw")
print(points)
draw_polygon(points,create_packed_color_arr(points.size(),color))
pass
func create_packed_color_arr(_size:int,_color:Color):
var new_arr=[]
for i in range(_size):
new_arr.append(color)
return PackedColorArray(new_arr)

View File

@ -0,0 +1,126 @@
[gd_scene load_steps=4 format=3 uid="uid://3r388ypcowro"]
[ext_resource type="Texture2D" uid="uid://dv62ydas2laek" path="res://res/ui/new_ui_005_2d_fight/矩形 100@1x.png" id="1_2iw20"]
[ext_resource type="Script" path="res://scene/_2d_fight/2d_fight_attribute_table.gd" id="2_ae48l"]
[ext_resource type="Texture2D" uid="uid://df3jb4yv1aot" path="res://res/ui/new_ui_005_2d_fight/组 146@1x.png" id="3_71rxy"]
[node name="2d_fight_attribute_table" type="TextureRect"]
offset_right = 118.0
offset_bottom = 118.0
texture = ExtResource("1_2iw20")
script = ExtResource("2_ae48l")
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_71rxy")
[node name="attribute_name_1" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 0.101695
anchor_top = -0.330508
anchor_right = 0.508475
anchor_bottom = -0.0338983
theme_override_colors/font_color = Color(0.290196, 0.133333, 0.0235294, 1)
theme_override_font_sizes/font_size = 24
text = "属性"
metadata/_edit_use_anchors_ = true
[node name="attribute_value_1" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 0.567797
anchor_top = -0.330508
anchor_right = 0.974576
anchor_bottom = -0.0338983
theme_override_colors/font_color = Color(0.133333, 0.32549, 0.964706, 1)
theme_override_font_sizes/font_size = 24
text = "值"
metadata/_edit_use_anchors_ = true
[node name="attribute_name_2" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 1.01695
anchor_top = 0.20339
anchor_right = 1.42373
anchor_bottom = 0.5
theme_override_colors/font_color = Color(0.290196, 0.133333, 0.0235294, 1)
theme_override_font_sizes/font_size = 24
text = "属性"
metadata/_edit_use_anchors_ = true
[node name="attribute_value_2" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 1.01695
anchor_top = 0.5
anchor_right = 1.42373
anchor_bottom = 0.79661
theme_override_colors/font_color = Color(0.133333, 0.32549, 0.964706, 1)
theme_override_font_sizes/font_size = 24
text = "值"
horizontal_alignment = 1
vertical_alignment = 1
metadata/_edit_use_anchors_ = true
[node name="attribute_name_3" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = -0.40678
anchor_top = 0.20339
anchor_bottom = 0.5
theme_override_colors/font_color = Color(0.290196, 0.133333, 0.0235294, 1)
theme_override_font_sizes/font_size = 24
text = "属性"
metadata/_edit_use_anchors_ = true
[node name="attribute_value_3" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = -0.40678
anchor_top = 0.5
anchor_bottom = 0.79661
theme_override_colors/font_color = Color(0.133333, 0.32549, 0.964706, 1)
theme_override_font_sizes/font_size = 24
text = "值"
horizontal_alignment = 1
vertical_alignment = 1
metadata/_edit_use_anchors_ = true
[node name="attribute_name_4" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 0.101695
anchor_top = 1.04237
anchor_right = 0.508475
anchor_bottom = 1.33898
theme_override_colors/font_color = Color(0.290196, 0.133333, 0.0235294, 1)
theme_override_font_sizes/font_size = 24
text = "属性"
metadata/_edit_use_anchors_ = true
[node name="attribute_value_4" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
anchor_left = 0.567797
anchor_top = 1.04237
anchor_right = 0.974576
anchor_bottom = 1.33898
theme_override_colors/font_color = Color(0.133333, 0.32549, 0.964706, 1)
theme_override_font_sizes/font_size = 24
text = "值"
metadata/_edit_use_anchors_ = true

View File

@ -4,3 +4,7 @@ func _on_create():
self.could_use_action=[BlockActionMove.new(),BlockActionAttackNormal.new()] self.could_use_action=[BlockActionMove.new(),BlockActionAttackNormal.new()]
super._on_create() super._on_create()
pass pass
func attacked():
$AnimationPlayer.play("shake")
pass

View File

@ -1,8 +1,45 @@
[gd_scene load_steps=3 format=3 uid="uid://5vqwfn05i63"] [gd_scene load_steps=6 format=3 uid="uid://5vqwfn05i63"]
[ext_resource type="Script" path="res://scene/_2d_fight/block_scene/test_character.gd" id="1_543qj"] [ext_resource type="Script" path="res://scene/_2d_fight/block_scene/test_character.gd" id="1_543qj"]
[ext_resource type="Texture2D" uid="uid://u55mv3uq7pod" path="res://res/ui/new_ui_005_2d_fight/蒙版组 18@1x.png" id="2_bnn18"] [ext_resource type="Texture2D" uid="uid://u55mv3uq7pod" path="res://res/ui/new_ui_005_2d_fight/蒙版组 18@1x.png" id="2_bnn18"]
[sub_resource type="Animation" id="Animation_olb0q"]
resource_name = "shake"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0333333, 0.0666667, 0.1, 0.133333, 0.166667, 0.2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(6, 2), Vector2(-17, -6), Vector2(26, -4), Vector2(-7, -7), Vector2(11, -2), Vector2(0, 0)]
}
[sub_resource type="Animation" id="Animation_4i1ic"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_7o6we"]
_data = {
"RESET": SubResource("Animation_4i1ic"),
"shake": SubResource("Animation_olb0q")
}
[node name="test_character" type="Node2D"] [node name="test_character" type="Node2D"]
script = ExtResource("1_543qj") script = ExtResource("1_543qj")
could_be_used_for_target = true could_be_used_for_target = true
@ -10,3 +47,8 @@ could_be_used_for_target = true
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(0.915, 0.915) scale = Vector2(0.915, 0.915)
texture = ExtResource("2_bnn18") texture = ExtResource("2_bnn18")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_7o6we")
}

View File

@ -5,6 +5,10 @@
[node name="Wall" type="Node2D"] [node name="Wall" type="Node2D"]
script = ExtResource("1_vd8gg") script = ExtResource("1_vd8gg")
block_name = "墙"
block_attribute = {
"可移动": false
}
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("2_rhwnk") texture = ExtResource("2_rhwnk")

View File

@ -0,0 +1,8 @@
extends HBoxContainer
#设置block mes的显示信息
func set_mes(_name:String,value:bool):
$Label.text=_name
$TextureRect.visible=not value
pass

View File

@ -1,10 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://bv4c1xq4wm2o7"] [gd_scene load_steps=3 format=3 uid="uid://bv4c1xq4wm2o7"]
[ext_resource type="Script" path="res://scene/_2d_fight/block_tag_label.gd" id="1_orsy7"]
[ext_resource type="Texture2D" uid="uid://cxxqhiporcwlp" path="res://res/ui/new_ui_005_2d_fight/组 114@1x.png" id="1_x8c6l"] [ext_resource type="Texture2D" uid="uid://cxxqhiporcwlp" path="res://res/ui/new_ui_005_2d_fight/组 114@1x.png" id="1_x8c6l"]
[node name="block_tag_label" type="HBoxContainer"] [node name="block_tag_label" type="HBoxContainer"]
offset_right = 84.0 offset_right = 84.0
offset_bottom = 32.0 offset_bottom = 32.0
script = ExtResource("1_orsy7")
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
layout_mode = 2 layout_mode = 2

1
scene/gacha3d/node_3d.gd Normal file
View File

@ -0,0 +1 @@
extends Node3D

View File

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://b2rw6p7ov3pti"]
[ext_resource type="Script" path="res://scene/gacha3d/node_3d.gd" id="1_o4ka8"]
[node name="Node3D" type="Node3D"]
script = ExtResource("1_o4ka8")

View File

@ -0,0 +1,31 @@
[gd_scene load_steps=4 format=3 uid="uid://uxqmenk7dwva"]
[sub_resource type="ViewportTexture" id="ViewportTexture_2gwg3"]
viewport_path = NodePath("SubViewport")
[sub_resource type="Gradient" id="Gradient_m1mq6"]
[sub_resource type="GradientTexture2D" id="GradientTexture2D_hrx3e"]
gradient = SubResource("Gradient_m1mq6")
width = 570
height = 880
[node name="Sprite3D" type="Sprite3D"]
double_sided = false
texture = SubResource("ViewportTexture_2gwg3")
[node name="SubViewport" type="SubViewport" parent="."]
size = Vector2i(570, 880)
[node name="Control" type="Control" parent="SubViewport"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
double_sided = false
texture = SubResource("GradientTexture2D_hrx3e")