diff --git a/components/Bullets/BlockWall.tscn b/components/Bullets/BlockWall.tscn index b9a0e11..006087b 100644 --- a/components/Bullets/BlockWall.tscn +++ b/components/Bullets/BlockWall.tscn @@ -1,6 +1,7 @@ [gd_scene format=3 uid="uid://cch4xtc70ad5c"] [ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_3kq6o"] +[ext_resource type="Script" uid="uid://b6bkhv8nc1ao3" path="res://scripts/Contents/Bullets/BlockWall.gd" id="2_3x2nv"] [ext_resource type="Texture2D" uid="uid://cqcakyrw4vbfn" path="res://resources/bullets/blockwall/blockwall.svg" id="2_k65pw"] [sub_resource type="SpriteFrames" id="SpriteFrames_3x2nv"] @@ -14,7 +15,142 @@ animations = [{ "speed": 5.0 }] -[node name="BulletBase" unique_id=5571707 instance=ExtResource("1_3kq6o")] +[sub_resource type="Animation" id="Animation_k65pw"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -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(".:position:x") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.15, 0, 0.15, 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, 1)] +} + +[sub_resource type="Animation" id="Animation_3x2nv"] +resource_name = "spawn" +length = 0.2 +step = 0.1 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0, 0, 0, 0.2, 0, -100, 0, 0, 0, 0), +"times": PackedFloat32Array(0, 0.2) +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_cdtmv"] +resource_name = "loop" +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 6.28319] +} + +[sub_resource type="Animation" id="Animation_a0fqf"] +resource_name = "spawn" +length = 0.2 +step = 0.1 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(2, 0), +"points": PackedFloat32Array(-100, 0, 0, 0, 0, 0, -0.2, 0, 0, 0), +"times": PackedFloat32Array(0, 0.2) +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_y5axk"] +_data = { +&"RESET": SubResource("Animation_k65pw"), +&"destroy": SubResource("Animation_3x2nv"), +&"loop": SubResource("Animation_cdtmv"), +&"spawn": SubResource("Animation_a0fqf") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_k65pw"] +size = Vector2(734, 56) + +[node name="BlockWall" unique_id=5571707 instance=ExtResource("1_3kq6o")] +script = ExtResource("2_3x2nv") +speed = -10.0 +baseDamage = 0.0 +penerate = 1.0 +lifeTime = 1000.0 +autoSpawnAnimation = true +autoDestroyAnimation = true [node name="texture" parent="." index="0" unique_id=162977358] sprite_frames = SubResource("SpriteFrames_3x2nv") + +[node name="animator" parent="texture" index="0" unique_id=1114087117] +libraries/ = SubResource("AnimationLibrary_y5axk") + +[node name="hitbox" parent="." index="1" unique_id=175349408] +rotation = 1.5707964 +shape = SubResource("RectangleShape2D_k65pw") diff --git a/resources/bullets/blockwall/blockwall.svg b/resources/bullets/blockwall/blockwall.svg index 7ec475e..095244c 100644 --- a/resources/bullets/blockwall/blockwall.svg +++ b/resources/bullets/blockwall/blockwall.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/scripts/Contents/Bullets/BlockWall.gd b/scripts/Contents/Bullets/BlockWall.gd new file mode 100644 index 0000000..446e74f --- /dev/null +++ b/scripts/Contents/Bullets/BlockWall.gd @@ -0,0 +1,5 @@ +extends BulletBase +class_name BlockWallBullet + +func succeedToHit(_dmg: float, entity: EntityBase): + entity.impluse(Vector2.from_angle(rotation) * 1000) diff --git a/scripts/Contents/Bullets/BlockWall.gd.uid b/scripts/Contents/Bullets/BlockWall.gd.uid new file mode 100644 index 0000000..de90e85 --- /dev/null +++ b/scripts/Contents/Bullets/BlockWall.gd.uid @@ -0,0 +1 @@ +uid://b6bkhv8nc1ao3 diff --git a/scripts/Contents/Characters/CyberCat.gd b/scripts/Contents/Characters/CyberCat.gd index 35675c4..ffa7400 100644 --- a/scripts/Contents/Characters/CyberCat.gd +++ b/scripts/Contents/Characters/CyberCat.gd @@ -8,10 +8,12 @@ func register(): attackCooldownMap[0] = 6000 attackCooldownMap[1] = 10000 attackCooldownMap[2] = 100 + attackCooldownMap[3] = 200 func ai(): PresetEntityAI.follow(self , currentFocusedBoss) for i in 3: tryAttack(i) + PresetEntityAI.distanceAttack(self , currentFocusedBoss, 1000, INF, 3) func attack(type: int): if type == 0: BulletBase.generate(ComponentManager.getBullet("Bengbeng"), self , position, 0) @@ -19,3 +21,8 @@ func attack(type: int): heal(percentHealth(0.05)) elif type == 2: BulletBase.generate(ComponentManager.getBullet("SCBlock"), self , position, 0) + elif type == 3: + for bullet in BulletBase.generate(ComponentManager.getBullet("BlockWall"), self , currentFocusedBoss.hurtbox.global_position, 0): + if bullet is BlockWallBullet: + bullet.look_at(position) + bullet.position -= Vector2.from_angle(bullet.rotation) * 100 diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index 235f7a1..c42148d 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -50,8 +50,8 @@ static var WAVE_TESTBOSS_CHICK = [ ] static var WAVE_JUSTJOKE = [ # Wave.create("Kernyr", 0, 0, true, 0, INF, 1), - # Wave.create("CyberCat", 0, 0, true, 0, INF, 1), - Wave.create("Deepsea", 0, 0, true, 0, INF, 1) + Wave.create("CyberCat", 0, 0, true, 0, INF, 1), + # Wave.create("Deepsea", 0, 0, true, 0, INF, 1) ] static var WAVE_MOWING = [ Wave.create("Hen", 15, 30, false, 0, INF, 1),