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); }
private void UpdateRepository(CivPopRepository repo) { if (repo.GetFunds() > 0) { Funding.Instance.AddFunds(repo.GetFunds(), TransactionReasons.Progression); repo.AddFunds(repo.GetFunds() * -1); } ProtoCrewMember.KerbalType type = ProtoCrewMember.KerbalType.Crew; //ProtoCrewMember.KerbalType.Applicant; //ProtoCrewMember.KerbalType.Crew; //ProtoCrewMember.KerbalType.Tourist; //ProtoCrewMember.KerbalType.Unowned; ProtoCrewMember.RosterStatus[] statuses = { ProtoCrewMember.RosterStatus.Assigned, ProtoCrewMember.RosterStatus.Available, ProtoCrewMember.RosterStatus.Dead, ProtoCrewMember.RosterStatus.Missing }; IEnumerable <ProtoCrewMember> kerbals = HighLogic.CurrentGame.CrewRoster.Kerbals(type, statuses); foreach (ProtoCrewMember kerbal in kerbals) { CivPopKerbal civKerbal = repo.GetKerbal(kerbal.name); if (civKerbal == null) { string kerbalName = kerbal.name; CivPopKerbalGender gender = CivPopKerbalGender.FEMALE; if (ProtoCrewMember.Gender.Male.Equals(kerbal.gender)) { gender = CivPopKerbalGender.MALE; } double birthdate = Planetarium.GetUniversalTime() - 15 * TimeUnit.YEAR - rng.Next(15 * TimeUnit.YEAR); civKerbal = new CivPopKerbal(kerbalName, gender, birthdate, false); } bool civilian = "Civilian".Equals(kerbal.trait); civKerbal.SetCivilian(civilian); if (ProtoCrewMember.RosterStatus.Assigned.Equals(kerbal.rosterStatus)) { repo.Add(civKerbal); } else { repo.Remove(civKerbal); } } foreach (Vessel vessel in FlightGlobals.Vessels) { CivPopVessel civVessel; if (vessel != null && !repo.VesselExists(vessel.id.ToString())) { civVessel = new CivPopVessel(vessel); } else { civVessel = repo.GetVessel(vessel.id.ToString()); } civVessel.SetOrbiting(!vessel.LandedOrSplashed); civVessel.SetBody(new Domain.CelestialBody(vessel.mainBody.name, GetBodyType(vessel.mainBody))); foreach (VesselModule module in vessel.vesselModules) { if (module.GetType() == typeof(CivilianPopulationVesselModule)) { CivilianPopulationVesselModule civModule = (CivilianPopulationVesselModule)module; civVessel.SetCapacity(civModule.capacity); civVessel.SetAllowDocking(civModule.allowDocking); civVessel.SetAllowBreeding(civModule.allowBreeding); } } foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew()) { CivPopKerbal civKerbal = repo.GetKerbal(kerbal.name); if (civKerbal != null) { civKerbal.SetVesselId(vessel.id.ToString()); } } repo.Add(civVessel); } foreach (CivPopVessel civVessel in repo.GetVessels()) { bool found = false; foreach (Vessel vessel in FlightGlobals.Vessels) { if (vessel != null && vessel.id.ToString().Equals(civVessel.GetId())) { found = true; break; } } if (!found) { repo.Remove(civVessel); } } }