aboutsummaryrefslogtreecommitdiff
path: root/V3/Objects/CreatureFactory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'V3/Objects/CreatureFactory.cs')
-rw-r--r--V3/Objects/CreatureFactory.cs127
1 files changed, 127 insertions, 0 deletions
diff --git a/V3/Objects/CreatureFactory.cs b/V3/Objects/CreatureFactory.cs
new file mode 100644
index 0000000..238ea41
--- /dev/null
+++ b/V3/Objects/CreatureFactory.cs
@@ -0,0 +1,127 @@
+using System;
+using Microsoft.Xna.Framework;
+using V3.Data;
+
+namespace V3.Objects
+{
+ // ReSharper disable once ClassNeverInstantiated.Global
+ public sealed class CreatureFactory
+ {
+ private readonly IBasicCreatureFactory mFactory;
+ private readonly Random mRnd = new Random();
+
+ public CreatureFactory(IBasicCreatureFactory factory)
+ {
+ mFactory = factory;
+ }
+
+ public ICreature CreateCreature(CreatureType type, int id)
+ {
+ IdGenerator.SetIdOnce(id);
+ switch (type)
+ {
+ case CreatureType.FemalePeasant:
+ return mFactory.CreateFemalePeasant();
+ case CreatureType.King:
+ return mFactory.CreateKing();
+ case CreatureType.KingsGuard:
+ return mFactory.CreateKingsGuard();
+ case CreatureType.Knight:
+ return mFactory.CreateKnight();
+ case CreatureType.MalePeasant:
+ return mFactory.CreateMalePeasant();
+ case CreatureType.Meatball:
+ return mFactory.CreateMeatball();
+ case CreatureType.Necromancer:
+ return mFactory.CreateNecromancer();
+ case CreatureType.Prince:
+ return mFactory.CreatePrince();
+ case CreatureType.Skeleton:
+ return mFactory.CreateSkeleton();
+ case CreatureType.Zombie:
+ return mFactory.CreateZombie();
+ default:
+ IdGenerator.ClearIdOnce();
+ return null;
+ }
+ }
+
+ public MalePeasant CreateMalePeasant(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateMalePeasant(), position, movementDirection);
+ }
+
+ public FemalePeasant CreateFemalePeasant(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateFemalePeasant(), position, movementDirection);
+ }
+
+ public Necromancer CreateNecromancer(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateNecromancer(), position, movementDirection);
+ }
+
+ public Skeleton CreateSkeleton(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateSkeleton(), position, movementDirection);
+ }
+
+ public SkeletonElite CreateSkeletonElite(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateSkeletonElite(), position, movementDirection);
+ }
+
+ public Zombie CreateZombie(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateZombie(), position, movementDirection);
+ }
+
+ public Knight CreateKnight(Vector2 position, MovementDirection movementDirection)
+ {
+ Knight knight = CreateCreature(mFactory.CreateKnight(), position, movementDirection);
+ if (mRnd.Next(3) == 0)
+ {
+ knight.MakeFemale();
+ }
+ return knight;
+ }
+
+ public KingsGuard CreateKingsGuard(Vector2 position, MovementDirection movementDirection)
+ {
+ KingsGuard guard = CreateCreature(mFactory.CreateKingsGuard(), position, movementDirection);
+ if (mRnd.Next(3) == 0)
+ {
+ guard.MakeFemale();
+ }
+ return guard;
+ }
+
+ public SkeletonHorse CreateSkeletonHorse(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateSkeletonHorse(), position, movementDirection);
+ }
+
+ public Meatball CreateMeatball(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateMeatball(), position, movementDirection);
+ }
+
+ public Prince CreatePrince(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreatePrince(), position, movementDirection);
+ }
+
+ public King CreateKing(Vector2 position, MovementDirection movementDirection)
+ {
+ return CreateCreature(mFactory.CreateKing(), position, movementDirection);
+ }
+
+ private T CreateCreature<T>(T creature, Vector2 position, MovementDirection movementDirection) where T: ICreature
+ {
+ creature.Position = position;
+ creature.InitialPosition = position;
+ creature.MovementDirection = movementDirection;
+ return creature;
+ }
+ }
+}