Sine Morphization implementation

This commit is contained in:
2025-03-03 21:04:44 -08:00
parent a41c443004
commit f153a53d8d
13 changed files with 62 additions and 16 deletions

View File

@@ -2,8 +2,8 @@
state "AppLogic State" as GameJamDungeon_AppLogic_State {
state "SetupGameScene" as GameJamDungeon_AppLogic_State_SetupGameScene
state "InGame" as GameJamDungeon_AppLogic_State_InGame
state "MainMenu" as GameJamDungeon_AppLogic_State_MainMenu
state "LoadingScreen" as GameJamDungeon_AppLogic_State_LoadingScreen
state "MainMenu" as GameJamDungeon_AppLogic_State_MainMenu
}
GameJamDungeon_AppLogic_State_InGame --> GameJamDungeon_AppLogic_State_MainMenu : GameOver

View File

@@ -168,7 +168,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
_attackTimer.Timeout -= OnAttackTimeout;
}
public Vector3 EnemyGlobalPosition => GlobalPosition;
public Vector3 GetEnemyGlobalPosition() => GlobalPosition;
public void SetEnemyGlobalPosition(Vector3 target)
{

View File

@@ -22,5 +22,7 @@ public interface IEnemy : IKillable
public void SetEnemyGlobalPosition(Vector3 target);
public Vector3 GetEnemyGlobalPosition();
public IDungeonRoom GetCurrentRoom();
}

View File

@@ -24,13 +24,15 @@ DropsSoulGemChance = 0.75
metadata/_custom_type_script = ExtResource("2_oln85")
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 0.106078
height = 1.23076
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
height = 5.0
radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
radius = 1.20703
radius = 0.762524
[node name="Sproingy" type="CharacterBody3D"]
process_mode = 1

View File

@@ -693,6 +693,7 @@ script = ExtResource("1_oh25a")
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
pixel_size = 0.003
billboard = 2
alpha_cut = 1
texture_filter = 0

View File

@@ -2,8 +2,8 @@
state "EnemyLogic State" as GameJamDungeon_EnemyLogic_State {
state "Alive" as GameJamDungeon_EnemyLogic_State_Alive {
state "Activated" as GameJamDungeon_EnemyLogic_State_Activated {
state "FollowPlayer" as GameJamDungeon_EnemyLogic_State_FollowPlayer
state "Attacking" as GameJamDungeon_EnemyLogic_State_Attacking
state "FollowPlayer" as GameJamDungeon_EnemyLogic_State_FollowPlayer
state "Patrolling" as GameJamDungeon_EnemyLogic_State_Patrolling
}
state "Idle" as GameJamDungeon_EnemyLogic_State_Idle

View File

@@ -5,7 +5,6 @@ using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System;
using System.Collections.Immutable;
using static GameJamDungeon.GameLogic.State;
[Meta(typeof(IAutoNode))]
@@ -188,7 +187,6 @@ public partial class Game : Node3D, IGame
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource)
{
Player.GainExp(resource.ExpFromDefeat * GameRepo.EXPRate);
DropRestorative(defeatedLocation);
}
private void DropRestorative(Vector3 vector)

View File

@@ -2,12 +2,12 @@
state "GameLogic State" as GameJamDungeon_GameLogic_State {
state "GameStarted" as GameJamDungeon_GameLogic_State_GameStarted
state "Playing" as GameJamDungeon_GameLogic_State_Playing {
state "FloorClearedDecisionState" as GameJamDungeon_GameLogic_State_FloorClearedDecisionState
state "Paused" as GameJamDungeon_GameLogic_State_Paused
state "AskForTeleport" as GameJamDungeon_GameLogic_State_AskForTeleport
state "Resuming" as GameJamDungeon_GameLogic_State_Resuming
state "MinimapOpen" as GameJamDungeon_GameLogic_State_MinimapOpen
state "FloorClearedDecisionState" as GameJamDungeon_GameLogic_State_FloorClearedDecisionState
state "InventoryOpened" as GameJamDungeon_GameLogic_State_InventoryOpened
state "MinimapOpen" as GameJamDungeon_GameLogic_State_MinimapOpen
state "Paused" as GameJamDungeon_GameLogic_State_Paused
state "Resuming" as GameJamDungeon_GameLogic_State_Resuming
}
state "Quit" as GameJamDungeon_GameLogic_State_Quit
}

View File

@@ -6,7 +6,6 @@
size = Vector3(0.778381, 0.929947, 0.731567)
[node name="ConsumableItem" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.75, 0)
script = ExtResource("1_26bad")
[node name="Pickup" type="Area3D" parent="."]
@@ -17,7 +16,7 @@ collision_mask = 4
[node name="Sprite" type="Sprite3D" parent="Pickup"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0322805, 0)
pixel_size = 0.0015
pixel_size = 0.001
billboard = 2
shaded = true
double_sided = false

View File

@@ -45,6 +45,8 @@ public partial class EffectItem : Node3D, IUsableItem
TeleportEnemiesToCurrentRoom();
if (_effectItemStats.UsableItemTags.Contains(UsableItemTag.KillHalfEnemiesInRoom))
KillHalfEnemiesInRoom();
if (_effectItemStats.UsableItemTags.Contains(UsableItemTag.TurnAllEnemiesIntoHealingItem))
TurnAllEnemiesInRoomIntoHealingItem();
}
public void SetItemStats(InventoryItemStats inventoryItemStats)
@@ -101,8 +103,32 @@ public partial class EffectItem : Node3D, IUsableItem
var enemyList = currentMonsterRoom.GetEnemiesInCurrentRoom().ToList();
var enemiesToKill = enemyList.Count / 2;
for (var i = 0; i < enemiesToKill; i++)
{
enemyList[i].Die();
}
private void TurnAllEnemiesInRoomIntoHealingItem()
{
var currentRoom = Player.GetCurrentRoom();
var currentEnemies = currentRoom.EnemiesInRoom;
foreach (var enemy in currentEnemies)
{
enemy.Die();
DropHealingItem(enemy.GetEnemyGlobalPosition());
}
}
private void DropHealingItem(Vector3 vector)
{
var consumableFolder = "res://src/items/consumable";
var restorativeScene = GD.Load<PackedScene>($"{consumableFolder}/ConsumableItem.tscn");
var consumable = restorativeScene.Instantiate<ConsumableItem>();
var resourceFiles = DirAccess.GetFilesAt($"{consumableFolder}/resources");
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomResource = resourceFiles[rng.RandiRange(0, resourceFiles.Length - 1)];
var randomFile = ResourceLoader.Load<ConsumableItemStats>($"{consumableFolder}/resources/{randomResource}");
consumable.SetItemStats(randomFile);
Game.AddChild(consumable);
consumable.GlobalPosition = vector;
}
}

View File

@@ -0,0 +1,18 @@
[gd_resource type="Resource" script_class="EffectItemStats" load_steps=3 format=3 uid="uid://cwh5w1yabwrxf"]
[ext_resource type="Script" uid="uid://b5w4iw4iqmxtn" path="res://src/items/effect/EffectItemStats.cs" id="1_ksb1c"]
[ext_resource type="Texture2D" uid="uid://c7v5pm32sedkg" path="res://src/items/effect/textures/entropic seal.PNG" id="1_vqhky"]
[resource]
script = ExtResource("1_ksb1c")
UsableItemTags = Array[int]([5])
Name = "Sine Morphization"
Description = "Turns all enemies in room to healing item."
Texture = ExtResource("1_vqhky")
SpawnRate = 0.5
ThrowSpeed = 12.0
HealHPAmount = 0
HealVTAmount = 0
ThrowDamage = 5
ItemTags = Array[int]([])
metadata/_custom_type_script = "uid://b5w4iw4iqmxtn"

View File

@@ -16,7 +16,7 @@
[ext_resource type="Texture2D" uid="uid://4k6vtn4oip5f" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_TILE4.png" id="14_qqc7i"]
[ext_resource type="Texture2D" uid="uid://cururtxtgylxf" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_COLUMN.jpg" id="15_ojbcg"]
[ext_resource type="PackedScene" uid="uid://d0pl1n1jf77jm" path="res://src/items/effect/EffectItem.tscn" id="16_aqomv"]
[ext_resource type="Resource" uid="uid://cxfu683mhpu6v" path="res://src/items/effect/resources/DevicBalance.tres" id="17_db2o3"]
[ext_resource type="Resource" uid="uid://cwh5w1yabwrxf" path="res://src/items/effect/resources/SineMorphization.tres" id="17_db2o3"]
[ext_resource type="Resource" uid="uid://bptg6eybj5dxk" path="res://src/items/effect/resources/DevicRecall.tres" id="18_ntxe5"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3ubi4"]

View File

@@ -1,11 +1,11 @@
@startuml PlayerLogic
state "PlayerLogic State" as GameJamDungeon_PlayerLogic_State {
state "Disabled" as GameJamDungeon_PlayerLogic_State_Disabled
state "Alive" as GameJamDungeon_PlayerLogic_State_Alive {
state "Idle" as GameJamDungeon_PlayerLogic_State_Idle
state "Attacking" as GameJamDungeon_PlayerLogic_State_Attacking
state "Idle" as GameJamDungeon_PlayerLogic_State_Idle
}
state "Dead" as GameJamDungeon_PlayerLogic_State_Dead
state "Disabled" as GameJamDungeon_PlayerLogic_State_Disabled
}
GameJamDungeon_PlayerLogic_State_Alive --> GameJamDungeon_PlayerLogic_State_Alive : PhysicsTick