From 7aedea82068e69b0b1e3011dd44bf1c1cd63bd16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torjus=20H=C3=A5kestad?= Date: Thu, 21 Aug 2025 23:56:18 +0200 Subject: [PATCH] game: add slime enemy --- scenes/enemies/enemy_slime_small.gd | 19 ++++++++++++ scenes/enemies/enemy_slime_small.gd.uid | 1 + scenes/enemies/enemy_slime_small.tscn | 41 +++++++++++++++++++++++++ scenes/managers/enemy_manager.gd | 10 ++++-- 4 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 scenes/enemies/enemy_slime_small.gd create mode 100644 scenes/enemies/enemy_slime_small.gd.uid create mode 100644 scenes/enemies/enemy_slime_small.tscn diff --git a/scenes/enemies/enemy_slime_small.gd b/scenes/enemies/enemy_slime_small.gd new file mode 100644 index 0000000..57613a2 --- /dev/null +++ b/scenes/enemies/enemy_slime_small.gd @@ -0,0 +1,19 @@ +class_name EnemySlimeSmall +extends EnemyBase + +@export var color: Color = Color.CHARTREUSE +@onready var disabled_sprite: Sprite2D = $Sprite2D +@onready var base_sprite: Sprite2D = $Sprite/BaseSprite + +var shader = preload("res://assets/shaders/base_color_tint.gdshader") +var shader_material: ShaderMaterial + +func _ready() -> void: + shader_material = ShaderMaterial.new() + disabled_sprite.visible = false + set_color(color) + shader_material.shader = shader + base_sprite.material = shader_material + +func set_color(new_color: Color) -> void: + shader_material.set_shader_parameter("base_color", new_color) diff --git a/scenes/enemies/enemy_slime_small.gd.uid b/scenes/enemies/enemy_slime_small.gd.uid new file mode 100644 index 0000000..041d428 --- /dev/null +++ b/scenes/enemies/enemy_slime_small.gd.uid @@ -0,0 +1 @@ +uid://c5wgwy5itcnkk diff --git a/scenes/enemies/enemy_slime_small.tscn b/scenes/enemies/enemy_slime_small.tscn new file mode 100644 index 0000000..1a4079b --- /dev/null +++ b/scenes/enemies/enemy_slime_small.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=9 format=3 uid="uid://cjikar11hbp3b"] + +[ext_resource type="PackedScene" uid="uid://b7vq8xspnlyeu" path="res://scenes/enemies/enemy_base.tscn" id="1_o6v6p"] +[ext_resource type="Script" uid="uid://c5wgwy5itcnkk" path="res://scenes/enemies/enemy_slime_small.gd" id="2_2bnvq"] +[ext_resource type="Shader" uid="uid://cf48pgfl308o3" path="res://assets/shaders/base_color_tint.gdshader" id="3_2yvgl"] +[ext_resource type="Texture2D" uid="uid://ctob5me7woid8" path="res://assets/sprites/slime_small grayscale.png" id="3_iaao1"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_daihb"] +shader = ExtResource("3_2yvgl") +shader_parameter/base_color = Color(3.46541e-06, 0.969973, 0.260278, 1) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2yvgl"] +atlas = ExtResource("3_iaao1") +region = Rect2(0, 15, 16, 15) + +[sub_resource type="AtlasTexture" id="AtlasTexture_daihb"] +atlas = ExtResource("3_iaao1") +region = Rect2(0, 30, 16, 15) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wu20c"] +atlas = ExtResource("3_iaao1") +region = Rect2(0, 45, 16, 15) + +[node name="EnemySlimeSmall" instance=ExtResource("1_o6v6p")] +script = ExtResource("2_2bnvq") +color = Color(0.498039, 1, 0, 1) + +[node name="Sprite" type="Node2D" parent="." index="0"] + +[node name="BaseSprite" type="Sprite2D" parent="Sprite" index="0"] +material = SubResource("ShaderMaterial_daihb") +texture = SubResource("AtlasTexture_2yvgl") + +[node name="Highlights" type="Sprite2D" parent="Sprite" index="1"] +texture = SubResource("AtlasTexture_daihb") + +[node name="Shading" type="Sprite2D" parent="Sprite" index="2"] +texture = SubResource("AtlasTexture_wu20c") + +[node name="Sprite2D" parent="." index="1"] +visible = false diff --git a/scenes/managers/enemy_manager.gd b/scenes/managers/enemy_manager.gd index 5ac847f..8bd55c3 100644 --- a/scenes/managers/enemy_manager.gd +++ b/scenes/managers/enemy_manager.gd @@ -10,7 +10,8 @@ extends Node2D const ENEMY_RAT = preload("res://scenes/enemies/enemy_rat.tscn") const ENEMY_BAT = preload("res://scenes/enemies/enemy_bat.tscn") - +const ENEMY_SLIME_SMALL = preload("res://scenes/enemies/enemy_slime_small.tscn") +const SLIME_COLOR_VARIATIONS: Array[Color]= [ Color.CHARTREUSE, Color.FUCHSIA, Color.DARK_ORANGE ] func _ready() -> void: timer.wait_time = 1 / spawn_rate @@ -23,16 +24,21 @@ func _on_timer_timeout() -> void: var enemies = get_tree().get_nodes_in_group(GlobalConst.GROUP_ENEMY) GlobalConst.sig_debug_stats_set.emit("enemy_count", "%s" % len(enemies)) var next_enemy: PackedScene - match randi() % 2: + match randi() % 3: 0: next_enemy = ENEMY_BAT 1: next_enemy = ENEMY_RAT + 2: + next_enemy = ENEMY_SLIME_SMALL if len(enemies) < max_enemies: var new_enemy = next_enemy.instantiate() new_enemy.position = _get_spawn_pos() new_enemy.target = target + if is_instance_of(new_enemy, EnemySlimeSmall): + var slime_color: Color = SLIME_COLOR_VARIATIONS.pick_random() + new_enemy.color = slime_color add_child(new_enemy)