diff --git a/config/character/monster00.tres b/config/character/monster00.tres index c2f29a0..f34c6ab 100644 --- a/config/character/monster00.tres +++ b/config/character/monster00.tres @@ -20,7 +20,7 @@ shield = ExtResource("5_gshoi") stun = ExtResource("7_5odff") mp = ExtResource("3_ig5en") ai = ExtResource("1_lsd6j") -hp_max = 1000.0 +hp_max = 100.0 attack = 10.0 sub_character_auto_create = false material_on = 1 diff --git a/render/shader/fragment.gdshader b/render/shader/fragment.gdshader index eab3a59..d775252 100644 --- a/render/shader/fragment.gdshader +++ b/render/shader/fragment.gdshader @@ -7,4 +7,5 @@ void fragment() { vec4 col = texture(tex_main, UV); ALBEDO = COLOR.rgb * col.r; ALPHA = COLOR.a * col.r; + EMISSION = vec3(5.0,5.0,5.0); } diff --git a/resource/ui/hud/break_level.png b/resource/ui/hud/break_level.png index e4a9d56..bf79a8d 100644 Binary files a/resource/ui/hud/break_level.png and b/resource/ui/hud/break_level.png differ diff --git a/resource/ui/hud/headbar_hp.png b/resource/ui/hud/headbar_hp.png index 1c8d943..83a969b 100644 Binary files a/resource/ui/hud/headbar_hp.png and b/resource/ui/hud/headbar_hp.png differ diff --git a/resource/ui/hud/headbar_shield.png b/resource/ui/hud/headbar_shield.png new file mode 100644 index 0000000..0a9127b Binary files /dev/null and b/resource/ui/hud/headbar_shield.png differ diff --git a/resource/ui/hud/headbar_shield.png.import b/resource/ui/hud/headbar_shield.png.import new file mode 100644 index 0000000..8b5d8a9 --- /dev/null +++ b/resource/ui/hud/headbar_shield.png.import @@ -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 diff --git a/resource/ui/hud/player_status_hp.png b/resource/ui/hud/player_status_hp.png index bcfd0fa..629e940 100644 Binary files a/resource/ui/hud/player_status_hp.png and b/resource/ui/hud/player_status_hp.png differ diff --git a/resource/ui/hud/player_status_mp.png b/resource/ui/hud/player_status_mp.png index e18f5c2..8e7b1db 100644 Binary files a/resource/ui/hud/player_status_mp.png and b/resource/ui/hud/player_status_mp.png differ diff --git a/scene/effect/particle/particle_blood_decal.tscn b/scene/effect/particle/particle_blood_decal.tscn index 40023bb..36b7fd4 100644 --- a/scene/effect/particle/particle_blood_decal.tscn +++ b/scene/effect/particle/particle_blood_decal.tscn @@ -4,9 +4,9 @@ [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"] -[sub_resource type="Gradient" id="Gradient_jevf8"] -offsets = PackedFloat32Array(0, 0.82808, 1) -colors = PackedColorArray(1, 0, 0, 1, 1, 0, 0, 0.805158, 1, 0, 0, 0) +[sub_resource type="Gradient" id="Gradient_lwltf"] +offsets = PackedFloat32Array(0, 0.641834, 1) +colors = PackedColorArray(0, 0, 0, 0.701961, 0, 0, 0, 0.629552, 0, 0, 0, 0) [sub_resource type="Curve" id="Curve_w5jkx"] max_value = 0.6 @@ -25,5 +25,5 @@ upper_fade = 21.3037 cull_mask = 1 script = ExtResource("3_yeg2u") lifetime = 3.0 -gradient = SubResource("Gradient_jevf8") +gradient = SubResource("Gradient_lwltf") scale_curve = SubResource("Curve_w5jkx") diff --git a/scene/effect/particle/particle_fragment.tscn b/scene/effect/particle/particle_fragment.tscn index 694a167..e14705d 100644 --- a/scene/effect/particle/particle_fragment.tscn +++ b/scene/effect/particle/particle_fragment.tscn @@ -21,7 +21,7 @@ shape = SubResource("SphereShape3D_1r022") [node name="Sprite3D" type="Sprite3D" parent="."] unique_name_in_owner = true material_override = ExtResource("2_cd8nd") -modulate = Color(1, 0, 0, 1) +modulate = Color(0, 0, 0, 1) pixel_size = 0.004 texture = ExtResource("3_vu5gy") hframes = 2 diff --git a/scene/item/pt.tscn b/scene/item/pt.tscn new file mode 100644 index 0000000..36a044b --- /dev/null +++ b/scene/item/pt.tscn @@ -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 diff --git a/scene/launcher.tscn b/scene/launcher.tscn index e99e280..e5f76c4 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -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/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="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/item_manager.gd" id="12_xwufn"] [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://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"] script = ExtResource("11_fm4d1") +[node name="ItemManager" type="Node3D" parent="GameManager/Stage/SubViewport"] +script = ExtResource("12_xwufn") + [node name="UIManager" type="Node3D" parent="GameManager"] process_mode = 3 script = ExtResource("7_wa6ef") diff --git a/scene/level/level.tscn b/scene/level/level.tscn index de737fd..1b62d70 100644 --- a/scene/level/level.tscn +++ b/scene/level/level.tscn @@ -19,6 +19,7 @@ background_mode = 1 sky = SubResource("Sky_hmsea") ambient_light_source = 2 ambient_light_color = Color(1, 1, 1, 1) +glow_enabled = true fog_height = 3.0 fog_height_density = 0.5 diff --git a/scene/ui/hud_screen.tscn b/scene/ui/hud_screen.tscn index 233953b..ea283fa 100644 --- a/scene/ui/hud_screen.tscn +++ b/scene/ui/hud_screen.tscn @@ -98,6 +98,7 @@ offset_bottom = 40.0 script = ExtResource("1_t7dgf") [node name="HudDesign" type="Sprite2D" parent="HudPage"] +visible = false position = Vector2(320, 180) texture = ExtResource("2_ouq6l") diff --git a/scene/ui/item/headbar.tscn b/scene/ui/item/headbar.tscn index 3f7b2f0..dc53e52 100644 --- a/scene/ui/item/headbar.tscn +++ b/scene/ui/item/headbar.tscn @@ -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="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://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://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"] @@ -42,7 +43,6 @@ stretch_margin_left = 1 stretch_margin_right = 1 texture_under = ExtResource("2_g5t31") texture_progress = ExtResource("3_vh1p5") -tint_progress = Color(1, 0, 0, 1) [node name="ShieldBar" type="TextureProgressBar" parent="BattleInfo"] unique_name_in_owner = true @@ -63,8 +63,7 @@ nine_patch_stretch = true stretch_margin_left = 1 stretch_margin_right = 1 texture_under = ExtResource("2_g5t31") -texture_progress = ExtResource("3_vh1p5") -tint_progress = Color(0.996078, 0.752941, 0.278431, 1) +texture_progress = ExtResource("4_5g4h6") [node name="BreakLevel" type="Sprite2D" parent="BattleInfo"] unique_name_in_owner = true @@ -93,7 +92,6 @@ stretch_margin_left = 1 stretch_margin_right = 1 texture_under = ExtResource("5_y2g2r") texture_progress = ExtResource("6_j2n1r") -tint_progress = Color(0.729412, 0, 0, 1) [node name="DebugInfo" type="Control" parent="."] unique_name_in_owner = true diff --git a/script/_global/enum.gd b/script/_global/enum.gd index 2f58f39..abd049c 100644 --- a/script/_global/enum.gd +++ b/script/_global/enum.gd @@ -19,4 +19,5 @@ enum ECoreType {Active, Passive} enum EGlobalEffect {CameraSize, CameraShake, ColorShift, Blur, SpeedLine} enum EAIRoleType {None, Saber, Assassin, Caster} enum ESkillWarnType {None, Normal, Mid, Heavy} -enum EMaterial {None, Cloth, Steel} \ No newline at end of file +enum EMaterial {None, Cloth, Steel} +enum EPtType {HP,MP,Money} \ No newline at end of file diff --git a/script/_global/global.gd b/script/_global/global.gd index 601981d..6c5d031 100644 --- a/script/_global/global.gd +++ b/script/_global/global.gd @@ -3,6 +3,7 @@ extends Node3D var view_mgr: ViewManager var camera_mgr: CameraManager var character_mgr: CharacterManager +var item_mgr: ItemManager var level_mgr: LevelManager var ui_mgr: UIManager #全局状态 diff --git a/script/_global/setting.gd b/script/_global/setting.gd index 47c5eab..84e60f6 100644 --- a/script/_global/setting.gd +++ b/script/_global/setting.gd @@ -11,7 +11,11 @@ const input_alive_time: float = 0.5 const drag_ground: float = 20 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 const weapon_hide_duration: float = 2.0 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 \ No newline at end of file diff --git a/script/character/battle.gd b/script/character/battle.gd index 837add1..7a1aede 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -150,7 +150,7 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul else: damage = min(hp, damage) character_to.set_status("hp", hp-damage) - is_kill = damage == hp + is_kill = (damage>0) and (damage == hp) if is_kill: 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) #mp累加 - if not is_bullet: - character_from.add_mp_sub(damage * cfg_from.mp.add_rate_attack, true) + # if not is_bullet: + # 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) #受击结束警戒 @@ -237,13 +237,21 @@ func add_attack(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResul character_from.move_stop() 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: 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.Ground: character_to.cast_particle(ResourceManager.particle_hit_ground, false) _: pass - + #受击材质特效 if damage>0: 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) + #卡帧时间修正 + if is_break_shield: + pause_time = 0.15 + elif is_kill: + pause_time = 0.3 + #卡帧 if not is_bullet: 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 +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): var mp = character.get_status("mp") var mp_max = character.get_status("mp_max") diff --git a/script/character/character.gd b/script/character/character.gd index abb11f9..e64b1c7 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -138,11 +138,12 @@ func move_stop(): set_status("move_dir", Vector2.ZERO) move.stop() + func get_face_dir() -> Vector2: if status.move_dir == Vector2.ZERO: return Vector2.RIGHT if is_right() else Vector2.LEFT return status.move_dir - + 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) +func add_hp(value: float): + battle.add_hp(value) + + func cost_mp(value: int): battle.cost_mp(value) diff --git a/script/character/skill.gd b/script/character/skill.gd index 763fd69..c7e85e6 100644 --- a/script/character/skill.gd +++ b/script/character/skill.gd @@ -135,7 +135,8 @@ func break_skill(): buff.remove_buff("charging") if status.throw_target != 0: 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 effect.release_effect() diff --git a/script/character/throw.gd b/script/character/throw.gd index fa2322b..96c88a4 100644 --- a/script/character/throw.gd +++ b/script/character/throw.gd @@ -9,8 +9,10 @@ func _process(delta) -> void: if status.throw_target == 0: return 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 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()) target.set_pos(target_pos) - target.set_status("is_right", (scale.x>0) == status.is_right) \ No newline at end of file + target.set_status("is_right", (scale.x>0) == status.is_right) diff --git a/script/item/pt.gd b/script/item/pt.gd new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/script/item/pt.gd @@ -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() diff --git a/script/manager/camera_manager.gd b/script/manager/camera_manager.gd index 3c7ae53..8be6a5a 100644 --- a/script/manager/camera_manager.gd +++ b/script/manager/camera_manager.gd @@ -58,7 +58,7 @@ func update_global_effect(delta): var value: float = global_effect_curve.sample(rate)*global_effect.value match global_effect.effect_type: Enum.EGlobalEffect.CameraSize: - size = camera_size * (1 - 0.2*value) + size = camera_size * (1 - value) refresh_target_pos() Enum.EGlobalEffect.CameraShake: 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 rate = pause_time/basic_pause_time 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.Blur, effect_time, 0.8 * rate) #add_global_effect(Enum.EGlobalEffect.SpeedLine,effect_time,0.2* rate) diff --git a/script/manager/effect_manager.gd b/script/manager/effect_manager.gd index 4d08a80..3674a8c 100644 --- a/script/manager/effect_manager.gd +++ b/script/manager/effect_manager.gd @@ -4,9 +4,5 @@ func _ready(): SignalManager.effect_create.connect(on_effect_create) -func _process(delta): - pass - - func on_effect_create(effect: Node3D): add_child(effect) diff --git a/script/manager/item_manager.gd b/script/manager/item_manager.gd new file mode 100644 index 0000000..1512000 --- /dev/null +++ b/script/manager/item_manager.gd @@ -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 \ No newline at end of file diff --git a/script/manager/resource_manager.gd b/script/manager/resource_manager.gd index e5934b5..d92ed7a 100644 --- a/script/manager/resource_manager.gd +++ b/script/manager/resource_manager.gd @@ -1,11 +1,14 @@ extends Node3D #==scene== +#character var scene_character: PackedScene = load("res://scene/character/character.tscn") var scene_player: PackedScene = load("res://scene/character/player.tscn") var scene_monster: PackedScene = load("res://scene/character/monster.tscn") var scene_bullet: PackedScene = load("res://scene/character/bullet.tscn") var scene_soul: PackedScene = load("res://scene/character/soul.tscn") +#item +var scene_pt: PackedScene = load("res://scene/item/pt.tscn") #==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 @@ -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_ground: PackedScene = load("res://scene/effect/particle/particle_hit_ground.tscn") #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 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")