pt效果实现: hp mp

master
chendian 1 year ago
parent 1a0c237b01
commit bc6dc57566

@ -20,7 +20,7 @@ shield = ExtResource("5_gshoi")
stun = ExtResource("7_5odff") stun = ExtResource("7_5odff")
mp = ExtResource("3_ig5en") mp = ExtResource("3_ig5en")
ai = ExtResource("1_lsd6j") ai = ExtResource("1_lsd6j")
hp_max = 1000.0 hp_max = 100.0
attack = 10.0 attack = 10.0
sub_character_auto_create = false sub_character_auto_create = false
material_on = 1 material_on = 1

@ -7,4 +7,5 @@ void fragment() {
vec4 col = texture(tex_main, UV); vec4 col = texture(tex_main, UV);
ALBEDO = COLOR.rgb * col.r; ALBEDO = COLOR.rgb * col.r;
ALPHA = COLOR.a * col.r; ALPHA = COLOR.a * col.r;
EMISSION = vec3(5.0,5.0,5.0);
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c5xgdirnx5gq8"
path="res://.godot/imported/headbar_shield.png-eb868afd362afa8156e57504275f9354.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resource/ui/hud/headbar_shield.png"
dest_files=["res://.godot/imported/headbar_shield.png-eb868afd362afa8156e57504275f9354.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=0
compress/normal_map=2
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=false
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=0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 B

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 B

After

Width:  |  Height:  |  Size: 142 B

@ -4,9 +4,9 @@
[ext_resource type="Script" path="res://script/effect/particle_decal.gd" id="3_yeg2u"] [ext_resource type="Script" path="res://script/effect/particle_decal.gd" id="3_yeg2u"]
[ext_resource type="Texture2D" uid="uid://b6bfacouwy2hi" path="res://render/texture/decal/decal_glow.png" id="6_8db0o"] [ext_resource type="Texture2D" uid="uid://b6bfacouwy2hi" path="res://render/texture/decal/decal_glow.png" id="6_8db0o"]
[sub_resource type="Gradient" id="Gradient_jevf8"] [sub_resource type="Gradient" id="Gradient_lwltf"]
offsets = PackedFloat32Array(0, 0.82808, 1) offsets = PackedFloat32Array(0, 0.641834, 1)
colors = PackedColorArray(1, 0, 0, 1, 1, 0, 0, 0.805158, 1, 0, 0, 0) colors = PackedColorArray(0, 0, 0, 0.701961, 0, 0, 0, 0.629552, 0, 0, 0, 0)
[sub_resource type="Curve" id="Curve_w5jkx"] [sub_resource type="Curve" id="Curve_w5jkx"]
max_value = 0.6 max_value = 0.6
@ -25,5 +25,5 @@ upper_fade = 21.3037
cull_mask = 1 cull_mask = 1
script = ExtResource("3_yeg2u") script = ExtResource("3_yeg2u")
lifetime = 3.0 lifetime = 3.0
gradient = SubResource("Gradient_jevf8") gradient = SubResource("Gradient_lwltf")
scale_curve = SubResource("Curve_w5jkx") scale_curve = SubResource("Curve_w5jkx")

@ -21,7 +21,7 @@ shape = SubResource("SphereShape3D_1r022")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
material_override = ExtResource("2_cd8nd") material_override = ExtResource("2_cd8nd")
modulate = Color(1, 0, 0, 1) modulate = Color(0, 0, 0, 1)
pixel_size = 0.004 pixel_size = 0.004
texture = ExtResource("3_vu5gy") texture = ExtResource("3_vu5gy")
hframes = 2 hframes = 2

@ -0,0 +1,34 @@
[gd_scene load_steps=6 format=3 uid="uid://cjvrn0m6dnkwm"]
[ext_resource type="Script" path="res://script/item/pt.gd" id="1_7fo1j"]
[ext_resource type="Material" uid="uid://b3mpocbc8svx2" path="res://render/material/fragment.tres" id="2_rgdfq"]
[ext_resource type="Texture2D" uid="uid://bcrr12gbos636" path="res://render/texture/particle/shape/fragment1.png" id="3_slgv7"]
[sub_resource type="Curve" id="Curve_q38s7"]
max_value = 8.0
_data = [Vector2(0, 4), 0.0, 1.4, 0, 0, Vector2(1, 8), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="BoxShape3D" id="BoxShape3D_4u1o3"]
size = Vector3(0.1, 0.1, 0.1)
[node name="PT" type="RigidBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.40703, 3.77352, 0)
collision_layer = 256
linear_damp = 0.1
script = ExtResource("1_7fo1j")
follow_speed_curve = SubResource("Curve_q38s7")
color_hp = Color(0.94902, 0.494118, 0.498039, 1)
color_mp = Color(0.286275, 0.701961, 0.854902, 1)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
unique_name_in_owner = true
shape = SubResource("BoxShape3D_4u1o3")
[node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
material_override = ExtResource("2_rgdfq")
pixel_size = 0.004
texture = ExtResource("3_slgv7")
hframes = 2
vframes = 2

@ -1,4 +1,4 @@
[gd_scene load_steps=33 format=3 uid="uid://eoydwrunmm5n"] [gd_scene load_steps=34 format=3 uid="uid://eoydwrunmm5n"]
[ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"] [ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"]
[ext_resource type="Script" path="res://script/manager/level_manager.gd" id="2_ewhkj"] [ext_resource type="Script" path="res://script/manager/level_manager.gd" id="2_ewhkj"]
@ -18,6 +18,7 @@
[ext_resource type="PackedScene" uid="uid://0uonhojhfgi" path="res://scene/ui/menu_screen.tscn" id="10_sky2n"] [ext_resource type="PackedScene" uid="uid://0uonhojhfgi" path="res://scene/ui/menu_screen.tscn" id="10_sky2n"]
[ext_resource type="Script" path="res://script/manager/ai_manager.gd" id="11_fm4d1"] [ext_resource type="Script" path="res://script/manager/ai_manager.gd" id="11_fm4d1"]
[ext_resource type="Script" path="res://script/manager/input_manager.gd" id="12_vfqm4"] [ext_resource type="Script" path="res://script/manager/input_manager.gd" id="12_vfqm4"]
[ext_resource type="Script" path="res://script/manager/item_manager.gd" id="12_xwufn"]
[ext_resource type="Script" path="res://script/character/status.gd" id="18_nr8sb"] [ext_resource type="Script" path="res://script/character/status.gd" id="18_nr8sb"]
[ext_resource type="SpriteFrames" uid="uid://2cb8lknel0ih" path="res://resource/animation/character/basic_move.aseprite" id="20_4ni1a"] [ext_resource type="SpriteFrames" uid="uid://2cb8lknel0ih" path="res://resource/animation/character/basic_move.aseprite" id="20_4ni1a"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="20_8k3m1"] [ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="20_8k3m1"]
@ -180,6 +181,9 @@ script = ExtResource("8_0jv87")
[node name="AIManager" type="Node3D" parent="GameManager/Stage/SubViewport"] [node name="AIManager" type="Node3D" parent="GameManager/Stage/SubViewport"]
script = ExtResource("11_fm4d1") script = ExtResource("11_fm4d1")
[node name="ItemManager" type="Node3D" parent="GameManager/Stage/SubViewport"]
script = ExtResource("12_xwufn")
[node name="UIManager" type="Node3D" parent="GameManager"] [node name="UIManager" type="Node3D" parent="GameManager"]
process_mode = 3 process_mode = 3
script = ExtResource("7_wa6ef") script = ExtResource("7_wa6ef")

@ -19,6 +19,7 @@ background_mode = 1
sky = SubResource("Sky_hmsea") sky = SubResource("Sky_hmsea")
ambient_light_source = 2 ambient_light_source = 2
ambient_light_color = Color(1, 1, 1, 1) ambient_light_color = Color(1, 1, 1, 1)
glow_enabled = true
fog_height = 3.0 fog_height = 3.0
fog_height_density = 0.5 fog_height_density = 0.5

@ -98,6 +98,7 @@ offset_bottom = 40.0
script = ExtResource("1_t7dgf") script = ExtResource("1_t7dgf")
[node name="HudDesign" type="Sprite2D" parent="HudPage"] [node name="HudDesign" type="Sprite2D" parent="HudPage"]
visible = false
position = Vector2(320, 180) position = Vector2(320, 180)
texture = ExtResource("2_ouq6l") texture = ExtResource("2_ouq6l")

@ -1,8 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://dy0u26ba7dle"] [gd_scene load_steps=8 format=3 uid="uid://dy0u26ba7dle"]
[ext_resource type="Script" path="res://script/ui/hud/headbar.gd" id="1_k0rtd"] [ext_resource type="Script" path="res://script/ui/hud/headbar.gd" id="1_k0rtd"]
[ext_resource type="Texture2D" uid="uid://cwhu1ec03t3c8" path="res://resource/ui/hud/headbar_hp_empty.png" id="2_g5t31"] [ext_resource type="Texture2D" uid="uid://cwhu1ec03t3c8" path="res://resource/ui/hud/headbar_hp_empty.png" id="2_g5t31"]
[ext_resource type="Texture2D" uid="uid://b4ly1exl0owck" path="res://resource/ui/hud/headbar_hp.png" id="3_vh1p5"] [ext_resource type="Texture2D" uid="uid://b4ly1exl0owck" path="res://resource/ui/hud/headbar_hp.png" id="3_vh1p5"]
[ext_resource type="Texture2D" uid="uid://c5xgdirnx5gq8" path="res://resource/ui/hud/headbar_shield.png" id="4_5g4h6"]
[ext_resource type="Texture2D" uid="uid://dqqd56qoquts7" path="res://resource/ui/hud/break_level.png" id="4_wo8oo"] [ext_resource type="Texture2D" uid="uid://dqqd56qoquts7" path="res://resource/ui/hud/break_level.png" id="4_wo8oo"]
[ext_resource type="Texture2D" uid="uid://0l8bh5eq104a" path="res://resource/ui/hud/headbar_alert_empty.png" id="5_y2g2r"] [ext_resource type="Texture2D" uid="uid://0l8bh5eq104a" path="res://resource/ui/hud/headbar_alert_empty.png" id="5_y2g2r"]
[ext_resource type="Texture2D" uid="uid://b8ejwekki1ubx" path="res://resource/ui/hud/headbar_alert.png" id="6_j2n1r"] [ext_resource type="Texture2D" uid="uid://b8ejwekki1ubx" path="res://resource/ui/hud/headbar_alert.png" id="6_j2n1r"]
@ -42,7 +43,6 @@ stretch_margin_left = 1
stretch_margin_right = 1 stretch_margin_right = 1
texture_under = ExtResource("2_g5t31") texture_under = ExtResource("2_g5t31")
texture_progress = ExtResource("3_vh1p5") texture_progress = ExtResource("3_vh1p5")
tint_progress = Color(1, 0, 0, 1)
[node name="ShieldBar" type="TextureProgressBar" parent="BattleInfo"] [node name="ShieldBar" type="TextureProgressBar" parent="BattleInfo"]
unique_name_in_owner = true unique_name_in_owner = true
@ -63,8 +63,7 @@ nine_patch_stretch = true
stretch_margin_left = 1 stretch_margin_left = 1
stretch_margin_right = 1 stretch_margin_right = 1
texture_under = ExtResource("2_g5t31") texture_under = ExtResource("2_g5t31")
texture_progress = ExtResource("3_vh1p5") texture_progress = ExtResource("4_5g4h6")
tint_progress = Color(0.996078, 0.752941, 0.278431, 1)
[node name="BreakLevel" type="Sprite2D" parent="BattleInfo"] [node name="BreakLevel" type="Sprite2D" parent="BattleInfo"]
unique_name_in_owner = true unique_name_in_owner = true
@ -93,7 +92,6 @@ stretch_margin_left = 1
stretch_margin_right = 1 stretch_margin_right = 1
texture_under = ExtResource("5_y2g2r") texture_under = ExtResource("5_y2g2r")
texture_progress = ExtResource("6_j2n1r") texture_progress = ExtResource("6_j2n1r")
tint_progress = Color(0.729412, 0, 0, 1)
[node name="DebugInfo" type="Control" parent="."] [node name="DebugInfo" type="Control" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

@ -19,4 +19,5 @@ enum ECoreType {Active, Passive}
enum EGlobalEffect {CameraSize, CameraShake, ColorShift, Blur, SpeedLine} enum EGlobalEffect {CameraSize, CameraShake, ColorShift, Blur, SpeedLine}
enum EAIRoleType {None, Saber, Assassin, Caster} enum EAIRoleType {None, Saber, Assassin, Caster}
enum ESkillWarnType {None, Normal, Mid, Heavy} enum ESkillWarnType {None, Normal, Mid, Heavy}
enum EMaterial {None, Cloth, Steel} enum EMaterial {None, Cloth, Steel}
enum EPtType {HP,MP,Money}

@ -3,6 +3,7 @@ extends Node3D
var view_mgr: ViewManager var view_mgr: ViewManager
var camera_mgr: CameraManager var camera_mgr: CameraManager
var character_mgr: CharacterManager var character_mgr: CharacterManager
var item_mgr: ItemManager
var level_mgr: LevelManager var level_mgr: LevelManager
var ui_mgr: UIManager var ui_mgr: UIManager
#全局状态 #全局状态

@ -11,7 +11,11 @@ const input_alive_time: float = 0.5
const drag_ground: float = 20 const drag_ground: float = 20
const drag_air: float = 5 const drag_air: float = 5
#关卡 #关卡
const size_basic: Vector3 = Vector3(12.8, 5.12, 7.68) const size_basic: Vector3 = Vector3(12.8, 5.12, 7.68)
#ui #ui
const weapon_hide_duration: float = 2.0 const weapon_hide_duration: float = 2.0
const weapon_anime_duration: float = 0.1 const weapon_anime_duration: float = 0.1
#pt
const pt_mp_damage_rate: float = 0.5
const pt_mp_break_or_kill: int = 100
const pt_hp_break_or_kill: int = 5

@ -150,7 +150,7 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul
else: else:
damage = min(hp, damage) damage = min(hp, damage)
character_to.set_status("hp", hp-damage) character_to.set_status("hp", hp-damage)
is_kill = damage == hp is_kill = (damage>0) and (damage == hp)
if is_kill: if is_kill:
character_to.add_buff("die", 1) character_to.add_buff("die", 1)
@ -173,8 +173,8 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul
character_to.add_buff("stun_recover_cd", cfg_to.stun.recover_cd) character_to.add_buff("stun_recover_cd", cfg_to.stun.recover_cd)
#mp累加 #mp累加
if not is_bullet: # if not is_bullet:
character_from.add_mp_sub(damage * cfg_from.mp.add_rate_attack, true) # character_from.add_mp_sub(damage * cfg_from.mp.add_rate_attack, true)
character_to.add_mp_sub(damage * cfg_to.mp.add_rate_hit, true) character_to.add_mp_sub(damage * cfg_to.mp.add_rate_hit, true)
#受击结束警戒 #受击结束警戒
@ -237,13 +237,21 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul
character_from.move_stop() character_from.move_stop()
character_from.set_status("skill_move_stop", true) character_from.set_status("skill_move_stop", true)
#受击pt掉落
if damage>0:
if is_kill || is_break_shield:
Global.item_mgr.create_pt(Enum.EPtType.MP, Setting.pt_mp_break_or_kill, character_to.pos())
Global.item_mgr.create_pt(Enum.EPtType.HP, Setting.pt_hp_break_or_kill, character_to.pos())
else:
Global.item_mgr.create_pt(Enum.EPtType.MP, damage * Setting.pt_mp_damage_rate, character_to.pos())
#受击特效 #受击特效
match attack.damage_type: match attack.damage_type:
Enum.EDamageType.Sharp: character_to.cast_particle(ResourceManager.particle_hit_sharp, false) Enum.EDamageType.Sharp: character_to.cast_particle(ResourceManager.particle_hit_sharp, false)
Enum.EDamageType.Blunt: character_to.cast_particle(ResourceManager.particle_hit_blunt, false) Enum.EDamageType.Blunt: character_to.cast_particle(ResourceManager.particle_hit_blunt, false)
Enum.EDamageType.Ground: character_to.cast_particle(ResourceManager.particle_hit_ground, false) Enum.EDamageType.Ground: character_to.cast_particle(ResourceManager.particle_hit_ground, false)
_: pass _: pass
#受击材质特效 #受击材质特效
if damage>0: if damage>0:
var material: Enum.EMaterial = cfg_to.material_on if has_shield else cfg_to.material_off var material: Enum.EMaterial = cfg_to.material_on if has_shield else cfg_to.material_off
@ -257,6 +265,12 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul
#闪白 #闪白
character_to.add_buff("flash_white", 0.1) character_to.add_buff("flash_white", 0.1)
#卡帧时间修正
if is_break_shield:
pause_time = 0.15
elif is_kill:
pause_time = 0.3
#卡帧 #卡帧
if not is_bullet: if not is_bullet:
character_from.set_pause_time(pause_time) character_from.set_pause_time(pause_time)
@ -278,6 +292,14 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul
return hit_result return hit_result
func add_hp(value: float) -> void:
if status.is_dead:
return
var hp = character.get_status("hp")
var hp_max = character.get_status("hp_max")
character.set_status("hp", min(hp_max, hp+value))
func add_mp_sub(value: float, from_battle: bool): func add_mp_sub(value: float, from_battle: bool):
var mp = character.get_status("mp") var mp = character.get_status("mp")
var mp_max = character.get_status("mp_max") var mp_max = character.get_status("mp_max")

@ -138,11 +138,12 @@ func move_stop():
set_status("move_dir", Vector2.ZERO) set_status("move_dir", Vector2.ZERO)
move.stop() move.stop()
func get_face_dir() -> Vector2: func get_face_dir() -> Vector2:
if status.move_dir == Vector2.ZERO: if status.move_dir == Vector2.ZERO:
return Vector2.RIGHT if is_right() else Vector2.LEFT return Vector2.RIGHT if is_right() else Vector2.LEFT
return status.move_dir return status.move_dir
func add_buff(buff_name: String, duration: float, ignore_pause: bool = false): buff.add_buff(buff_name, duration, ignore_pause) func add_buff(buff_name: String, duration: float, ignore_pause: bool = false): buff.add_buff(buff_name, duration, ignore_pause)
@ -188,6 +189,10 @@ func add_mp_sub(value: float, from_battle: bool):
battle.add_mp_sub(value, from_battle) battle.add_mp_sub(value, from_battle)
func add_hp(value: float):
battle.add_hp(value)
func cost_mp(value: int): func cost_mp(value: int):
battle.cost_mp(value) battle.cost_mp(value)

@ -135,7 +135,8 @@ func break_skill():
buff.remove_buff("charging") buff.remove_buff("charging")
if status.throw_target != 0: if status.throw_target != 0:
var character_to: Character = Global.character_mgr.get_character(status.throw_target) var character_to: Character = Global.character_mgr.get_character(status.throw_target)
character_to.set_status("is_be_throw", false) if character_to:
character_to.set_status("is_be_throw", false)
status.throw_target = 0 status.throw_target = 0
effect.release_effect() effect.release_effect()

@ -9,8 +9,10 @@ func _process(delta) -> void:
if status.throw_target == 0: if status.throw_target == 0:
return return
var target: Character = Global.character_mgr.get_character(status.throw_target) var target: Character = Global.character_mgr.get_character(status.throw_target)
if not target:
return
var thorw_pos_2d: Vector2 = status.skill_dir * position.x var thorw_pos_2d: Vector2 = status.skill_dir * position.x
var thow_pos: Vector3 = Vector3(thorw_pos_2d.x, position.y, thorw_pos_2d.y) var thow_pos: Vector3 = Vector3(thorw_pos_2d.x, position.y, thorw_pos_2d.y)
var target_pos: Vector3 = thow_pos + character.pos() - (target.view_pos() - target.pos()) var target_pos: Vector3 = thow_pos + character.pos() - (target.view_pos() - target.pos())
target.set_pos(target_pos) target.set_pos(target_pos)
target.set_status("is_right", (scale.x>0) == status.is_right) target.set_status("is_right", (scale.x>0) == status.is_right)

@ -0,0 +1,109 @@
extends RigidBody3D
class_name PT
@export var follow_speed_curve: Curve
@export var color_hp: Color = Color.WHITE
@export var color_mp: Color = Color.WHITE
var type: Enum.EPtType
var value: int = 1
var velocity_min: Vector2 = Vector2.RIGHT *1
var velocity_max: Vector2 = Vector2.ONE *4
var born_time: float = 1.0 #生成时间,无法收集
var alive_time: float = 10.0 #存活时间
var is_born: bool = false
var is_init: bool = false
var is_collect: bool = false
var collect_range: float = 2.0
var follow_dist_max: float = 5.0
@onready var sprite3D: Sprite3D = %Sprite3D as Sprite3D
@onready var collision_shape: CollisionShape3D = %CollisionShape3D as CollisionShape3D
var frame_rate: float = 0.1
var frame_time: float = 0
func _ready():
var dir: Vector2 = Util.angle_dir(randf_range(0, 360)) * randf_range(velocity_min.x, velocity_max.x)
var velocity: Vector3 = Vector3(dir.x, randf_range(velocity_min.y, velocity_max.y), dir.y)
set_linear_velocity(velocity)
func _process(delta: float) -> void:
if not is_init:
var scale: Vector3 = Vector3.ONE * sqrt(sqrt(value))
sprite3D.scale = scale
collision_shape.scale = scale
var color: Color = Color.WHITE
match type:
Enum.EPtType.HP: color = color_hp
Enum.EPtType.MP: color = color_mp
_: pass
#随机色移
color.r += randf_range(0, 0.3)
color.g += randf_range(0, 0.3)
color.b += randf_range(0, 0.3)
color.clamp()
sprite3D.modulate = color
sprite3D.rotation.z = randf_range(0, 360)
is_init = true
var velocity: Vector3 = get_linear_velocity()
if velocity.y > 0.01:
var frame_count: int = sprite3D.hframes * sprite3D.vframes
var frame_time_all: float = frame_rate * frame_count
frame_time += delta
sprite3D.frame = int(frame_time / frame_rate) % frame_count
frame_time = fmod(frame_time, frame_time_all)
#生成
if not is_born:
if born_time <= 0:
is_born = true
else:
born_time -= delta
return
#收集激活
if not is_collect:
var target: Character = Global.character_mgr.get_player()
if not target:
return
var dir: Vector3 = target.view_pos() - global_position
var dist: float = dir.length()
if dist < collect_range:
is_collect = true
#存活时间
if not is_collect:
if alive_time <= 0:
queue_free()
return
else:
alive_time -= delta
#收集
if is_collect:
var target: Character = Global.character_mgr.get_player()
if not target:
return
var dir: Vector3 = target.view_pos() - global_position
var dist: float = dir.length()
if dist > 0.1:
var dist_rate = clamp(dist / follow_dist_max, 0, 1)
var speed: float = follow_speed_curve.sample(dist_rate)
set_linear_velocity(dir.normalized() * speed)
else:
collect()
func collect() -> void:
var target: Character = Global.character_mgr.get_player()
if not target:
return
match type:
Enum.EPtType.HP: target.add_hp(value)
Enum.EPtType.MP: target.add_mp_sub(value, true)
_: pass
queue_free()

@ -58,7 +58,7 @@ func update_global_effect(delta):
var value: float = global_effect_curve.sample(rate)*global_effect.value var value: float = global_effect_curve.sample(rate)*global_effect.value
match global_effect.effect_type: match global_effect.effect_type:
Enum.EGlobalEffect.CameraSize: Enum.EGlobalEffect.CameraSize:
size = camera_size * (1 - 0.2*value) size = camera_size * (1 - value)
refresh_target_pos() refresh_target_pos()
Enum.EGlobalEffect.CameraShake: Enum.EGlobalEffect.CameraShake:
shake_offset_x = (sin(rate * PI * 10) - 0.5)*0.04*value shake_offset_x = (sin(rate * PI * 10) - 0.5)*0.04*value
@ -164,7 +164,7 @@ func effect(pause_time) -> void:
var effect_time = pause_time * 2 var effect_time = pause_time * 2
var rate = pause_time/basic_pause_time var rate = pause_time/basic_pause_time
add_global_effect(Enum.EGlobalEffect.CameraShake, effect_time, 0.8 * rate) add_global_effect(Enum.EGlobalEffect.CameraShake, effect_time, 0.8 * rate)
add_global_effect(Enum.EGlobalEffect.CameraSize, effect_time, 0.4 * rate) add_global_effect(Enum.EGlobalEffect.CameraSize, effect_time, 0.1 * rate)
add_global_effect(Enum.EGlobalEffect.ColorShift, effect_time, 0.8 * rate) add_global_effect(Enum.EGlobalEffect.ColorShift, effect_time, 0.8 * rate)
add_global_effect(Enum.EGlobalEffect.Blur, effect_time, 0.8 * rate) add_global_effect(Enum.EGlobalEffect.Blur, effect_time, 0.8 * rate)
#add_global_effect(Enum.EGlobalEffect.SpeedLine,effect_time,0.2* rate) #add_global_effect(Enum.EGlobalEffect.SpeedLine,effect_time,0.2* rate)

@ -4,9 +4,5 @@ func _ready():
SignalManager.effect_create.connect(on_effect_create) SignalManager.effect_create.connect(on_effect_create)
func _process(delta):
pass
func on_effect_create(effect: Node3D): func on_effect_create(effect: Node3D):
add_child(effect) add_child(effect)

@ -0,0 +1,30 @@
extends Node3D
class_name ItemManager
func _ready():
Global.item_mgr = self
SignalManager.level_loading_start.connect(on_level_loading_start)
func on_level_loading_start():
pass
func create_pt(type: Enum.EPtType, value: int, pos: Vector3):
value = randi_range(0.5 * value, 1.5 * value)
var pt_slice: Array[int] = [100, 50, 20, 10, 5, 2, 1]
while value > 0:
for i in pt_slice:
if value < i:
continue
value -= i
_create_pt(type, i, pos)
break
func _create_pt(type: Enum.EPtType, value: int, pos: Vector3):
var pt: PT = ResourceManager.scene_pt.instantiate() as PT
pt.type = type
pt.value = value
add_child(pt)
pt.position = pos

@ -1,11 +1,14 @@
extends Node3D extends Node3D
#==scene== #==scene==
#character
var scene_character: PackedScene = load("res://scene/character/character.tscn") var scene_character: PackedScene = load("res://scene/character/character.tscn")
var scene_player: PackedScene = load("res://scene/character/player.tscn") var scene_player: PackedScene = load("res://scene/character/player.tscn")
var scene_monster: PackedScene = load("res://scene/character/monster.tscn") var scene_monster: PackedScene = load("res://scene/character/monster.tscn")
var scene_bullet: PackedScene = load("res://scene/character/bullet.tscn") var scene_bullet: PackedScene = load("res://scene/character/bullet.tscn")
var scene_soul: PackedScene = load("res://scene/character/soul.tscn") var scene_soul: PackedScene = load("res://scene/character/soul.tscn")
#item
var scene_pt: PackedScene = load("res://scene/item/pt.tscn")
#==material== #==material==
var material_character: Material = load("res://render/material/character.tres") as Material var material_character: Material = load("res://render/material/character.tres") as Material
var material_character_sub: Material = load("res://render/material/character_sub.tres") as Material var material_character_sub: Material = load("res://render/material/character_sub.tres") as Material
@ -15,7 +18,7 @@ var particle_hit_sharp: PackedScene = load("res://scene/effect/particle/particl
var particle_hit_blunt: PackedScene = load("res://scene/effect/particle/particle_hit_blunt.tscn") var particle_hit_blunt: PackedScene = load("res://scene/effect/particle/particle_hit_blunt.tscn")
var particle_hit_ground: PackedScene = load("res://scene/effect/particle/particle_hit_ground.tscn") var particle_hit_ground: PackedScene = load("res://scene/effect/particle/particle_hit_ground.tscn")
#hit_material #hit_material
var particle_material_cloth: PackedScene = load("res://scene/effect/particle/particle_material_cloth.tscn") var particle_material_cloth: PackedScene = load("res://scene/effect/particle/particle_material_cloth.tscn")
#warn #warn
var particle_warn_normal: PackedScene = load("res://scene/effect/particle/particle_warn_normal.tscn") var particle_warn_normal: PackedScene = load("res://scene/effect/particle/particle_warn_normal.tscn")
var particle_warn_mid: PackedScene = load("res://scene/effect/particle/particle_warn_mid.tscn") var particle_warn_mid: PackedScene = load("res://scene/effect/particle/particle_warn_mid.tscn")

Loading…
Cancel
Save