cirnogodot/Scripts/Resources/Roguelite/RogueliteRoomResource.cs

60 lines
1.9 KiB
C#
Raw Normal View History

2025-04-22 13:50:26 +02:00
using System.Collections.Generic;
using Cirno.Scripts.Enums;
2025-04-11 18:39:39 +02:00
using Godot;
2025-04-11 15:53:59 +02:00
using Godot.Collections;
2025-04-10 19:04:06 +02:00
namespace Cirno.Scripts.Resources.Roguelite;
[GlobalClass]
2025-04-23 13:38:54 +02:00
[Tool]
2025-04-10 19:04:06 +02:00
public partial class RogueliteRoomResource : Resource
{
[Export] public StringName RoomName { get; set; }
2025-04-11 18:39:39 +02:00
[Export] public RoomType Type { get; set; } = RoomType.Regular;
2025-04-10 19:04:06 +02:00
[Export] public StringName ScenePath { get; set; }
2025-04-11 18:39:39 +02:00
[Export] public Vector2I Size { get; set; } = new(1, 1);
2025-04-28 09:50:55 +02:00
[Export] public bool StartShrouded { get; set; } = true;
2025-04-11 18:39:39 +02:00
[Export] public Array<Vector2I> DoorGridPositions { get; set; } = [];
2025-04-22 18:21:53 +02:00
2025-04-11 15:53:59 +02:00
[Export] public Array<EnemyResource> SpawnableEnemies { get; set; }
2025-04-22 18:21:53 +02:00
2025-04-20 17:47:57 +02:00
[Export] public DoorDirections DoorDirections { get; set; }
2025-04-22 18:21:53 +02:00
2025-04-20 17:47:57 +02:00
public bool HasDoors(DoorDirections required) => (DoorDirections & required) == required;
2025-04-21 17:46:26 +02:00
public override string ToString()
{
return $"{RoomName} {Type} {Size.X}x{Size.Y}";
}
2025-04-22 13:50:26 +02:00
2025-04-22 18:21:53 +02:00
public List<Vector2I> GetRoomOffsets(Vector2I gridPosition, Direction side)
2025-04-22 13:50:26 +02:00
{
List<Vector2I> offsets = [];
2025-04-22 18:21:53 +02:00
switch (side)
2025-04-22 13:50:26 +02:00
{
2025-04-22 18:21:53 +02:00
case Direction.Down:
for (int i = 0; i < Size.X; i++)
offsets.Add(new Vector2I(gridPosition.X - i, gridPosition.Y));
break;
case Direction.Up:
for (int i = 0; i < Size.X; i++)
2025-05-02 11:17:09 +02:00
offsets.Add(new Vector2I(gridPosition.X - i, gridPosition.Y + (Size.Y - 1)));
2025-04-22 18:21:53 +02:00
break;
case Direction.Right:
for (int i = 0; i < Size.Y; i++)
offsets.Add(new Vector2I(gridPosition.X, gridPosition.Y - i));
break;
case Direction.Left:
for (int i = 0; i < Size.Y; i++)
2025-05-02 11:17:09 +02:00
offsets.Add(new Vector2I(gridPosition.X - (Size.X - 1), gridPosition.Y - i));
2025-04-22 18:21:53 +02:00
break;
2025-04-22 13:50:26 +02:00
}
return offsets;
}
2025-04-10 19:04:06 +02:00
}