Exemple #1
0
        public static ISoldier GetUnit(List <string> args, MilitaryEliteManager manager)
        {
            string type = args[0];

            args.RemoveAt(0);

            switch (type)
            {
            case "Private":
                return(new Private(args[0], args[1], args[2], double.Parse(args[3])));

            case "LeutenantGeneral":
            {
                LeutenantGeneral newSoldier    = new LeutenantGeneral(args[0], args[1], args[2], double.Parse(args[3]));
                List <string>    privatesToAdd = args.Skip(4).ToList();
                foreach (var privateSoldierId in privatesToAdd)
                {
                    newSoldier.AddPrivate(manager.GetSoldier(privateSoldierId));
                }

                return(newSoldier);
            }

            case "Engineer":
            {
                try
                {
                    Engineer newEngineer = new Engineer(args[0], args[1], args[2], double.Parse(args[3]), args[4]);

                    List <string> parts = args.Skip(5).ToList();

                    for (int i = 0; i < parts.Count; i += 2)
                    {
                        string partName = parts[i];
                        int    hours    = int.Parse(parts[i + 1]);

                        IRepair newRepair = new Repair(partName, hours);
                        newEngineer.AddRepair(newRepair);
                    }

                    return(newEngineer);
                }
                catch (ArgumentException e)
                {
                    exceptions.AppendLine(e.Message);
                }
            }
            break;

            case "Commando":
            {
                try
                {
                    Commando newCommando = new Commando(args[0], args[1], args[2], double.Parse(args[3]), args[4]);

                    List <string> missions = args.Skip(5).ToList();

                    for (int i = 0; i < missions.Count; i += 2)
                    {
                        string missionName  = missions[i];
                        string missionState = missions[i + 1];

                        try
                        {
                            IMission newMission = new Mission(missionName, missionState);
                            newCommando.AddRepair(newMission);
                        }
                        catch (ArgumentException e)
                        {
                            exceptions.AppendLine(e.Message);
                        }
                    }

                    return(newCommando);
                }
                catch (ArgumentException e)
                {
                    exceptions.AppendLine(e.Message);
                }
            }
            break;

            case "Spy":
            default:
            {
                return(new Spy(args[0], args[1], args[2], int.Parse(args[3])));
            }
            }

            return(null);
        }