public void ApplyCommodityGains() { mCount++; if ((mCount > Relativity.Settings.mCyclesPerUpdate) || (mCommodities.Count == 0)) { mCount = 0; Relativity.Logger.Append("Relative Speed: " + PersistedSettings.sRelativeFactor); foreach (Sim sim in LotManager.Actors) { try { if (sim.InteractionQueue == null) { continue; } InteractionInstance head = sim.InteractionQueue.GetHeadInteraction(); if (head == null) { continue; } PriorCommodities commodities = null; if (mCommodities.TryGetValue(sim, out commodities)) { if ((object.ReferenceEquals(commodities.mInteraction, head)) && (head.mActiveCommodityUpdates.Count == commodities.ActiveCommodities)) { continue; } mCommodities.Remove(sim); } if (head.mActiveCommodityUpdates.Count == 0) { continue; } /* * Relativity.Logger.Append(Common.NewLine + head.InstanceActor.FullName); * Relativity.Logger.Append(Common.NewLine + head.InteractionDefinition.GetType().ToString()); */ commodities = new PriorCommodities(head); mCommodities.Add(sim, commodities); if (head.mSkillMultipliers != null) { commodities.EndSkillCommodityUpdates(head); commodities.mSkillMultipliers = head.mSkillMultipliers; head.mSkillMultipliers = new Dictionary <SkillNames, float>(); commodities.BeginSkillCommodityUpdates(head, commodities.mSkillMultipliers, true, true); } commodities.mMotives = head.mMotiveDeltas; head.mMotiveDeltas = new List <MotiveDelta>(); foreach (MotiveDelta delta in commodities.mMotives) { if (delta == null) { continue; } float adjusted = delta.ChangePerHour; float original = adjusted; if (adjusted > 0) { adjusted *= Relativity.Settings.GetMotiveFactor(new MotiveKey(sim.SimDescription, delta.Motive), true); } else { adjusted *= Relativity.Settings.GetMotiveDecayFactor(new MotiveKey(sim.SimDescription, delta.Motive)); } Relativity.Logger.Append(delta.Motive + ": " + original + " -> " + adjusted); head.mMotiveDeltas.Add(CloneDelta(delta, adjusted)); } } catch (Exception e) { Common.Exception(sim, e); } } } }
public void ApplyCommodityGains() { mCount++; if ((mCount > Relativity.Settings.mCyclesPerUpdate) || (mCommodities.Count == 0)) { mCount = 0; Relativity.Logger.Append("Relative Speed: " + PersistedSettings.sRelativeFactor); foreach (Sim sim in LotManager.Actors) { try { if (sim.InteractionQueue == null) continue; InteractionInstance head = sim.InteractionQueue.GetHeadInteraction(); if (head == null) continue; PriorCommodities commodities = null; if (mCommodities.TryGetValue(sim, out commodities)) { if ((object.ReferenceEquals(commodities.mInteraction, head)) && (head.mActiveCommodityUpdates.Count == commodities.ActiveCommodities)) { continue; } mCommodities.Remove(sim); } if (head.mActiveCommodityUpdates.Count == 0) continue; /* Relativity.Logger.Append(Common.NewLine + head.InstanceActor.FullName); Relativity.Logger.Append(Common.NewLine + head.InteractionDefinition.GetType().ToString()); */ commodities = new PriorCommodities(head); mCommodities.Add(sim, commodities); if (head.mSkillMultipliers != null) { commodities.EndSkillCommodityUpdates(head); commodities.mSkillMultipliers = head.mSkillMultipliers; head.mSkillMultipliers = new Dictionary<SkillNames, float>(); commodities.BeginSkillCommodityUpdates(head, commodities.mSkillMultipliers, true, true); } commodities.mMotives = head.mMotiveDeltas; head.mMotiveDeltas = new List<MotiveDelta>(); foreach (MotiveDelta delta in commodities.mMotives) { if (delta == null) continue; float adjusted = delta.ChangePerHour; float original = adjusted; if (adjusted > 0) { adjusted *= Relativity.Settings.GetMotiveFactor(new MotiveKey(sim.SimDescription, delta.Motive), true); } else { adjusted *= Relativity.Settings.GetMotiveDecayFactor(new MotiveKey(sim.SimDescription, delta.Motive)); } Relativity.Logger.Append(delta.Motive + ": " + original + " -> " + adjusted); head.mMotiveDeltas.Add(CloneDelta(delta, adjusted)); } } catch (Exception e) { Common.Exception(sim, e); } } } }