using System; using System.Collections.Generic; using Content.Server.Botany; using Content.Server.GameObjects.Components.Botany; using Content.Shared.GameTicking; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Prototypes; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] public class PlantSystem : EntitySystem, IResettingEntitySystem { [Dependency] private readonly IComponentManager _componentManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private int _nextUid = 0; private readonly Dictionary _seeds = new(); private float _timer = 0f; public IReadOnlyDictionary Seeds => _seeds; public override void Initialize() { base.Initialize(); PopulateDatabase(); } private void PopulateDatabase() { _nextUid = 0; _seeds.Clear(); foreach (var seed in _prototypeManager.EnumeratePrototypes()) { AddSeedToDatabase(seed); } } public bool AddSeedToDatabase(Seed seed) { // If it's not -1, it's already in the database. Probably. if (seed.Uid != -1) return false; seed.Uid = GetNextSeedUid(); _seeds[seed.Uid] = seed; return true; } private int GetNextSeedUid() { return _nextUid++; } public override void Update(float frameTime) { base.Update(frameTime); _timer += frameTime; if (_timer < 3f) return; _timer = 0f; foreach (var plantHolder in _componentManager.EntityQuery(true)) { plantHolder.Update(); } } public void Reset() { PopulateDatabase(); } } }