private void AddWorker(IPlayer player) { IGatherer worker; switch (player.RaceType) { case RaceType.Protoss: worker = factory.CreateProbe(player.Position, CommandsConstant.WorkerWithNoName); worker.Work(ResourceType.Minerals); player.AddGameObject(worker); break; case RaceType.Terran: worker = factory.CreateScv(player.Position, CommandsConstant.WorkerWithNoName); worker.Work(ResourceType.Minerals); player.AddGameObject(worker); break; case RaceType.Zerg: worker = factory.CreateDrone(player.Position, CommandsConstant.WorkerWithNoName); worker.Work(ResourceType.Minerals); player.AddGameObject(worker); break; } }
private void ProceedCreateCommand(string[] command, IPlayer player) { IGameObject result; try { string methodName = GetMethodName(command); Type type = typeof(UnitFactory); MethodInfo method = type.GetMethod(methodName); result = (IGameObject)method.Invoke(factory, new object[] { player.Position, command[4] }); } catch (Exception) { throw new InvalidCommandException(CommandsConstant.InvalidCommand); } if (result != null && player.RaceType == result.Race) { if (player.Gas < result.GasCost) { throw new InvalidCommandException(CommandsConstant.NoGas); } if (player.Mineral < result.MineralCost) { throw new InvalidCommandException(CommandsConstant.NoMinerals); } player.GetGas(result.GasCost); player.GetMineral(result.MineralCost); player.AddGameObject(result); if (result is IGatherer) { var worker = result as IGatherer; worker.CollectResources(ResourceType.Minerals); } } }