diff --git a/game/entities/ships/abstract_ship.gd b/game/entities/ships/abstract_ship.gd index a96091d..0dd4571 100644 --- a/game/entities/ships/abstract_ship.gd +++ b/game/entities/ships/abstract_ship.gd @@ -108,13 +108,15 @@ func _add_weapon(weapon: AbstractWeapon, weapon_position: Vector2) -> void: _weapons.append(weapon) -func _on_shield_updated(value: int, _max_value: int) -> void: +func _on_shield_updated(value: int, max_value: int) -> void: shield_sprite.visible = value != 0 + shield_sprite.material.set("shader_parameter/intensity", value/float(max_value)) -func _on_armor_updated(value: int, _max_value: int) -> void: +func _on_armor_updated(value: int, max_value: int) -> void: armor_sprite.visible = value != 0 + armor_sprite.material.set("shader_parameter/intensity", value/float(max_value)) func _on_hull_updated(_value: int, _max_value: int) -> void: - pass # Replace with function body. + pass diff --git a/game/entities/ships/abstract_ship.tscn b/game/entities/ships/abstract_ship.tscn index e1c301a..7faf585 100644 --- a/game/entities/ships/abstract_ship.tscn +++ b/game/entities/ships/abstract_ship.tscn @@ -1,9 +1,22 @@ -[gd_scene load_steps=4 format=3 uid="uid://jvyagshykmgb"] +[gd_scene load_steps=7 format=3 uid="uid://jvyagshykmgb"] [ext_resource type="Script" uid="uid://cesibaqtrgotl" path="res://game/entities/ships/abstract_ship.gd" id="1_6isjb"] +[ext_resource type="Shader" uid="uid://dwh22f35u5qqi" path="res://game/entities/ships/shield.gdshader" id="2_dokxo"] [ext_resource type="PackedScene" uid="uid://clkymhkv3cevm" path="res://game/health_system/health.tscn" id="2_xxtvk"] [ext_resource type="PackedScene" uid="uid://d2snum2pxc2ui" path="res://game/health_system/health_bar/heath_bar.tscn" id="3_l62e5"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_dokxo"] +shader = ExtResource("2_dokxo") +shader_parameter/speed = 0.0 +shader_parameter/scale = 20.0 +shader_parameter/intensity = 1.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bkxo4"] +shader = ExtResource("2_dokxo") +shader_parameter/speed = 5.0 +shader_parameter/scale = 20.0 +shader_parameter/intensity = 1.0 + [node name="AbstractShip" type="CharacterBody2D"] disable_mode = 1 motion_mode = 1 @@ -13,8 +26,10 @@ script = ExtResource("1_6isjb") [node name="ShipSprite" type="Sprite2D" parent="."] [node name="ArmorSprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_dokxo") [node name="ShieldSprite" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_bkxo4") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] diff --git a/game/entities/ships/shield.gdshader b/game/entities/ships/shield.gdshader new file mode 100644 index 0000000..7015a74 --- /dev/null +++ b/game/entities/ships/shield.gdshader @@ -0,0 +1,42 @@ +shader_type canvas_item; + +uniform float speed = 5.0; +uniform float scale = 20.0; +uniform float intensity = 1; + +float rand(vec2 coord) { + return fract(sin(dot(coord, vec2(12.9898, 78.233))) * 43758.5453); +} + +float cellular(vec2 coord) { + vec2 i = floor(coord); + vec2 f = fract(coord); + + float min_dist = 1.0; + + for (int y = -1; y <= 1; y++) { + for (int x = -1; x <= 1; x++) { + vec2 neighbor = vec2(float(x), float(y)); + vec2 point = vec2(rand(i + neighbor), rand(i + neighbor + vec2(1000.0))); + point = 0.5 * sin(TIME * speed + 6.2831 * point); + vec2 diff = neighbor + point - f; + float dist = length(diff); + min_dist = min(min_dist, dist); + } + } + + return min_dist; +} + +void fragment() { + vec2 coord = UV * scale; + + float pattern = cellular(coord); + + float alpha = COLOR.a; + if (pattern > intensity) { + alpha = 0.0; + } + + COLOR = vec4(COLOR.rgb, alpha); +} \ No newline at end of file diff --git a/game/entities/ships/shield.gdshader.uid b/game/entities/ships/shield.gdshader.uid new file mode 100644 index 0000000..9e46e4e --- /dev/null +++ b/game/entities/ships/shield.gdshader.uid @@ -0,0 +1 @@ +uid://dwh22f35u5qqi diff --git a/game/passage.gd b/game/passage.gd index 8d9a62c..6234612 100644 --- a/game/passage.gd +++ b/game/passage.gd @@ -23,9 +23,9 @@ func _on_enemy_timer_timeout() -> void: if enemies.size() < 1: enemy_swamp_controller.create_enemy() - var factor := maxi(enemies.size(), 1) + var factor := maxi(enemies.size(), 1) * 0.5 - enemy_timer.start(randi_range(1 * factor, 3 * factor)) + enemy_timer.start(randf_range(1 * factor, 3 * factor)) func _on_player_ship_destroyed() -> void: diff --git a/images/ships/enemies/heavy.png b/images/ships/enemies/heavy.png index 59d5e6b..9c4e5db 100644 --- a/images/ships/enemies/heavy.png +++ b/images/ships/enemies/heavy.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69bd12b6cb56d5350930cd432942154e3a096477fdf7e9c695211967e9927e64 +oid sha256:9f645b98ed3dada08db3629db04d86deae83ede20c269e52c8c7f40377aaa83d size 1110 diff --git a/images/ships/enemies/medium.png b/images/ships/enemies/medium.png index 238999c..4d07698 100644 --- a/images/ships/enemies/medium.png +++ b/images/ships/enemies/medium.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db45fb3aefc232492fc162ef98f399162485b01f2b4a7b985f84e1602d208a30 +oid sha256:141c139f51f91e161676130c3db212b56ac4d46f853b12e11fe225ed7bd81d27 size 809 diff --git a/images/ships/enemies/small.png b/images/ships/enemies/small.png index 006eb65..8013ece 100644 --- a/images/ships/enemies/small.png +++ b/images/ships/enemies/small.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ef5b36b662f8733750d38d038267d29ac3089146ac967d7c8b8b2ffe00d48da +oid sha256:5fb3ef357cd11f435091859385d7cea7c53dee4aa95a1992c6f8ebb7c2294eca size 441 diff --git a/images/ships/player.png b/images/ships/player.png index ea927ed..b8ff50c 100644 --- a/images/ships/player.png +++ b/images/ships/player.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29d1c28fedef70f456b3e631a65ffe205f95402891ae728da416de13a2bc8caf +oid sha256:09e18c6c4871a4db2176e32a5ea3ec4499d9c242e20619feba8b46680e3d3829 size 981