using System; using System.Collections.Generic; using MorgSimulator.Framework; namespace MorgSimulator.Factory { public class MorgFactory : IEntityFactory { public Morg CreateEntity(int id, string type, int x, int y, string movement, string feeding) { var trimmedFeeding = feeding.Trim(); var feedingParts = trimmedFeeding.Split(' '); var movementStrategy = CreateMovementStrategy(movement); var feedingStrategy = CreateFeedingStrategy(feedingParts[0]); var preyTypes = ParsePreyTypes(feedingParts); var morg = new Morg(id, (x, y), (0, 0)) { Type = type, MovementStrategy = movementStrategy, FeedingStrategy = feedingStrategy, PreyTypes = preyTypes }; return morg; } public IMovementStrategy CreateMovementStrategy(string movementType) { return movementType.Trim() switch { "Paddles" => new MovementStrategyPaddles(), "Oozes" => new MovementStrategyOozes(), _ => throw new ArgumentException($"Unknown movement type: {movementType}") }; } public IFeedingStrategy CreateFeedingStrategy(string behavior) { return behavior switch { "Absorbs" => new FeedingStrategyAbsorbs(), "Envelops" => new FeedingStrategyEnvelops(), _ => throw new ArgumentException($"Unknown feeding type: {behavior}") }; } private static List ParsePreyTypes(string[] feedingParts) { var preyTypes = new List(); for (int i = 1; i < feedingParts.Length; i++) { var prey = feedingParts[i].Trim(); if (!string.IsNullOrEmpty(prey)) preyTypes.Add(prey); } return preyTypes; } } }