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(); }
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); } }
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); } }
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); }
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; } } }
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(); }