public void draw()
        {
            var i    = 0;
            var data = new string[repo.GetRoster().Count(), 6];

            foreach (var crew in repo.GetRoster().OrderBy(crew => crew.GetName()))
            {
                ProtoCrewMember kCrew = null;
                foreach (var current in HighLogic.CurrentGame.CrewRoster.Crew)
                {
                    if (current.name == crew.GetName())
                    {
                        kCrew = current;
                        break;
                    }
                }

                data[i, 0] = crew.GetName();
                data[i, 1] = getTrait(kCrew);
                data[i, 2] = getStatus(crew);
                data[i, 3] = getGender(crew);
                data[i, 4] = getAge(crew);
                data[i, 5] = getChildbirth(crew);
                i++;
            }
            GUILayout.BeginVertical();
            grid.setData(data);
            grid.draw();
            GUILayout.EndVertical();
        }
예제 #2
0
        public void birthOfNewCivilans(double date, CivPopRepository repo)
        {
            List <CivPopKerbal> childs = new List <CivPopKerbal>();

            IEnumerable <CivPopKerbal> females = repo.GetRoster()
                                                 .Where(kerbal => kerbal.GetExpectingBirthAt() > 0)
                                                 .Where(kerbal => !kerbal.IsDead())
                                                 .Where(kerbal => kerbal.GetExpectingBirthAt() < date)
            ;

            foreach (CivPopKerbal female in females)
            {
                female.SetExpectingBirthAt(-1);
                if (female.GetVesselId() != null)
                {
                    CivPopVessel vessel = repo.GetVessel(female.GetVesselId());
                    if (vessel.GetCapacity() > repo.GetLivingRosterForVessel(vessel.GetId()).Count())
                    {
                        CivPopKerbal child = builder.build(date);
                        child.SetBirthdate(date);
                        child.SetVesselId(female.GetVesselId());
                        childs.Add(child);
                    }
                }
            }

            foreach (CivPopKerbal child in childs)
            {
                repo.Add(child);
            }
        }
예제 #3
0
        public void birthOfNewCivilans(double date, CivPopRepository repo)
        {
            List <CivPopKerbal> childs = new List <CivPopKerbal>();

            IEnumerable <CivPopKerbal> females = repo.GetRoster()
                                                 .Where(kerbal => kerbal.GetExpectingBirthAt() > 0)
                                                 .Where(kerbal => !kerbal.IsDead())
                                                 .Where(kerbal => kerbal.GetExpectingBirthAt() < date)
            ;

            foreach (CivPopKerbal female in females)
            {
                female.SetExpectingBirthAt(-1);
                if (female.GetVesselId() != null)
                {
                    CivPopVessel vessel = repo.GetVessel(female.GetVesselId());
                    if (vessel.GetCapacity() > repo.GetLivingRosterForVessel(vessel.GetId()).Count())
                    {
                        CivPopKerbal child = builder.build(date);
                        child.SetBirthdate(date);
                        child.SetVesselId(female.GetVesselId());

                        ProtoCrewMember pcm = new ProtoCrewMember(ProtoCrewMember.KerbalType.Crew, child.GetName());
                        KerbalRoster.SetExperienceTrait(pcm, "Civilian");//Set the Kerbal as the specified role (kerbalTraitName)
                        var plist = vessel.KSPVessel.parts.FindAll(p => p.CrewCapacity > p.protoModuleCrew.Count);

                        // There may be a better way, but this will look for space in the same part as the female giving birth
                        Part part = null;
                        foreach (var p in plist)
                        {
                            var crew = p.protoModuleCrew.Find(c => c.name == female.GetName());
                            if (crew != null)
                            {
                                part = p;
                                SimpleLogger.fetch.Info("Crew member: " + female.GetName() + ", found on part: " + p.partInfo.title);
                                break;
                            }
                        }
                        // If part is null, no room in same part, so just find a part with room
                        if (part == null)
                        {
                            part = vessel.KSPVessel.parts.Find(p => p.CrewCapacity > p.protoModuleCrew.Count);
                        }
                        if (part != null)
                        {
                            part.AddCrewmember(pcm);
                            vessel.KSPVessel.SpawnCrew();
                            SimpleLogger.fetch.Info("Child added to childs, name: " + child.GetName());
                        }
                        childs.Add(child);
                    }
                }
            }

            foreach (CivPopKerbal child in childs)
            {
                repo.Add(child);
            }
        }
예제 #4
0
        protected override void DoUpdate(double date, CivPopRepository repo)
        {
            int count = repo.GetRoster()
                        .Where(kerbal => kerbal.IsCivilian())
                        .Where(kerbal => kerbal.GetVesselId() != null)
                        .Where(kerbal => !kerbal.IsDead())
                        .Count()
            ;

            repo.AddFunds(this.rent * count);
        }
예제 #5
0
 protected override void DoUpdate(double date, CivPopRepository repo)
 {
     foreach (CivPopKerbal kerbal in repo.GetRoster())
     {
         int age           = (int)((date - kerbal.GetBirthdate()) / TimeUnit.YEAR);
         int chanceOfDeath = GetChanceOfDeath(age);
         if (chanceOfDeath > 0)
         {
             if (rng.Next() % chanceOfDeath == 0)
             {
                 repo.Kill(kerbal);
             }
         }
     }
 }
        public void complete_civilian_delivery_mission()
        {
            vessel.SetOrbiting(true);
            vessel.SetBody(KERBIN);
            vessel.SetMissionType("HOMEWORLD");
            vessel.SetMissionArrival(0);
            vessel.SetAllowDocking(true);

            service.Update(1, repo);

            Assert.AreEqual(-1, repo.GetVessel("vessel").GetMissionArrival());
            Assert.AreEqual(null, repo.GetVessel("vessel").GetMissionType());
            int count = repo.GetRoster().Where(kerbal => kerbal.GetVesselId().Equals(vessel.GetId())).Count();

            Assert.AreEqual(1, count);
        }
        internal void DoGrowthUpdateNow()
        {
            var currentDate       = Planetarium.GetUniversalTime();
            CivPopRepository repo = GetRepository();

            foreach (var crew in repo.GetRoster())
            {
                if (crew.GetExpectingBirthAt() <= currentDate)
                {
                    growth.Update(currentDate, repo, true);
#if DEBUG
                    monitor.add("growth");
#endif
                    return;
                }
            }
        }
예제 #8
0
        public void draw()
        {
            var i    = 0;
            int cnt  = 0;
            var data = new string[repo.GetRoster().Count(), 6];

            if (sortedList == null || lastSort != grid.GetCurrentSort || lastReverseSort != grid.GetReverseSort || repo.GetRoster().Count() != sortedList.Count())
            {
                lastSort        = grid.GetCurrentSort;
                lastReverseSort = grid.GetReverseSort;
                switch (lastSort)
                {
                case "Name":
                    if (grid.GetReverseSort)
                    {
                        sortedList = repo.GetRoster().OrderByDescending(crew => crew.GetName());
                    }
                    else
                    {
                        sortedList = repo.GetRoster().OrderBy(crew => crew.GetName());
                    }
                    break;

                case "Trait":
                    list.Clear();
                    reverseList.Clear();
                    foreach (var crew in repo.GetRoster())
                    {
                        foreach (var current in HighLogic.CurrentGame.CrewRoster.Crew)
                        {
                            if (current.name == crew.GetName())
                            {
                                if (grid.GetReverseSort)
                                {
                                    reverseList.Add(getTrait(current) + cnt.ToString(), crew);
                                }
                                else
                                {
                                    list.Add(getTrait(current) + cnt.ToString(), crew);
                                }
                                cnt++;
                                break;
                            }
                        }
                    }
                    if (grid.GetReverseSort)
                    {
                        cnt = 0;
                        foreach (var a in reverseList)
                        {
                            list.Add(cnt++.ToString(), a.Value);
                        }
                    }
                    sortedList = list.Values.OrderBy(key => 0);
                    break;

                case "Location":
                    list.Clear();
                    reverseList.Clear();
                    foreach (var crew in repo.GetRoster())
                    {
                        foreach (var current in HighLogic.CurrentGame.CrewRoster.Crew)
                        {
                            if (current.name == crew.GetName())
                            {
                                if (grid.GetReverseSort)
                                {
                                    reverseList.Add(getStatus(crew) + cnt.ToString(), crew);
                                }
                                else
                                {
                                    list.Add(getStatus(crew) + cnt.ToString(), crew);
                                }
                                cnt++;
                                break;
                            }
                        }
                    }
                    if (grid.GetReverseSort)
                    {
                        cnt = 0;
                        foreach (var a in reverseList)
                        {
                            list.Add(cnt++.ToString(), a.Value);
                        }
                    }
                    sortedList = list.Values.OrderBy(key => 0);

                    break;

                case "Gender":
                    list.Clear();
                    reverseList.Clear();
                    foreach (var crew in repo.GetRoster())
                    {
                        foreach (var current in HighLogic.CurrentGame.CrewRoster.Crew)
                        {
                            if (current.name == crew.GetName())
                            {
                                if (grid.GetReverseSort)
                                {
                                    reverseList.Add(getGender(crew) + cnt.ToString(), crew);
                                }
                                else
                                {
                                    list.Add(getGender(crew) + cnt.ToString(), crew);
                                }
                                cnt++;
                                break;
                            }
                        }
                    }
                    if (grid.GetReverseSort)
                    {
                        cnt = 0;
                        foreach (var a in reverseList)
                        {
                            list.Add(cnt++.ToString(), a.Value);
                        }
                    }
                    sortedList = list.Values.OrderBy(key => 0);

                    break;

                case "Age":
                    if (grid.GetReverseSort)
                    {
                        sortedList = repo.GetRoster().OrderByDescending(crew => currentDate - crew.GetBirthdate());
                    }
                    else
                    {
                        sortedList = repo.GetRoster().OrderBy(crew => currentDate - crew.GetBirthdate());
                    }
                    break;

                case "Childbirth":
                    if (grid.GetReverseSort)
                    {
                        sortedList = repo.GetRoster().OrderByDescending(crew => crew.GetExpectingBirthAt());
                    }
                    else
                    {
                        sortedList = repo.GetRoster().OrderBy(crew => crew.GetExpectingBirthAt());
                    }
                    break;

                default:
                    if (grid.GetReverseSort)
                    {
                        sortedList = repo.GetRoster().OrderByDescending(crew => crew.GetName());
                    }
                    else
                    {
                        sortedList = repo.GetRoster().OrderBy(crew => crew.GetName());
                    }
                    break;
                }
            }
            //sortedList = repo.GetRoster().OrderBy(crew => crew.GetName());

            foreach (var crew in sortedList)
            {
                ProtoCrewMember kCrew = null;
                foreach (var current in HighLogic.CurrentGame.CrewRoster.Crew)
                {
                    if (current.name == crew.GetName())
                    {
                        kCrew = current;
                        break;
                    }
                }

                data[i, 0] = crew.GetName();
                data[i, 1] = getTrait(kCrew);
                data[i, 2] = getStatus(crew);
                data[i, 3] = getGender(crew);
                data[i, 4] = getAge(crew);
                data[i, 5] = getChildbirth(crew);
                i++;
            }
            GUILayout.BeginVertical();
            grid.setData(data);
            grid.draw();
            GUILayout.EndVertical();
        }