57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
using Godot;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Newlon.Components.Level;
|
|
|
|
//
|
|
// PoolContainer contains nodes that contain different elemnts that generate during runtime
|
|
// Is not pool in traditional sense, but named like that to prevent repetition
|
|
//
|
|
|
|
public partial class PoolContainer : Node
|
|
{
|
|
[Export]
|
|
public Node2D Zombies { get; private set; }
|
|
[Export]
|
|
public Node2D Plants { get; private set; }
|
|
[Export]
|
|
public Node2D Projectiles { get; private set; }
|
|
[Export]
|
|
public Node2D Structures { get; private set; }
|
|
|
|
public static PoolContainer Instance {get; private set;}
|
|
|
|
public Dictionary<Vector2, IEntity>[] EntityField = { new(), new(), new() };
|
|
public override void _Ready()
|
|
{
|
|
Instance = this;
|
|
}
|
|
public bool TryGetEntity(Vector2 key, out IEntity result, int layer = 1)
|
|
{
|
|
if (EntityField[layer].ContainsKey(key))
|
|
{
|
|
result = EntityField[layer][key];
|
|
}
|
|
else
|
|
{
|
|
result = null;
|
|
}
|
|
return EntityField[layer].ContainsKey(key)
|
|
&& EntityField[layer][key] != null;
|
|
}
|
|
|
|
public bool TryGetEntity<T>(Vector2 key, out T result, int layer = 1) where T : class
|
|
{
|
|
if (EntityField[layer].ContainsKey(key))
|
|
{
|
|
result = EntityField[layer][key] as T;
|
|
}
|
|
else
|
|
{
|
|
result = null;
|
|
}
|
|
return EntityField[layer].ContainsKey(key)
|
|
&& EntityField[layer][key] != null
|
|
&& result != null;
|
|
}
|
|
}
|