Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }