public void Update(long timeSpan) { TerrainCell groupCell = Group.Cell; float randomModifier = groupCell.GetNextLocalRandomFloat(RngOffsets.ACTIVITY_UPDATE + RngOffset); randomModifier = 1f - (randomModifier * 2f); float randomFactor = MaxChangeDelta * randomModifier; float maxTargetValue = 1f; float minTargetValue = 0f; float targetValue = 0; if (randomFactor > 0) { targetValue = Value + (maxTargetValue - Value) * randomFactor; } else { targetValue = Value - (minTargetValue - Value) * randomFactor; } float timeEffect = timeSpan / (timeSpan + TimeEffectConstant); _newValue = (Value * (1 - timeEffect)) + (targetValue * timeEffect); }
protected void AddPolityProminenceEffectInternal(CulturalSkill politySkill, PolityProminence polityProminence, long timeSpan, float timeEffectFactor) { float targetValue = politySkill.Value; float prominenceEffect = polityProminence.Value; TerrainCell groupCell = Group.Cell; float randomEffect = groupCell.GetNextLocalRandomFloat(RngOffsets.SKILL_POLITY_PROMINENCE + RngOffset + unchecked ((int)polityProminence.PolityId)); float timeEffect = timeSpan / (timeSpan + timeEffectFactor); // _newvalue should have been set correctly either by the constructor or by the Update function float change = (targetValue - _newValue) * prominenceEffect * timeEffect * randomEffect; //#if DEBUG // if (Manager.RegisterDebugEvent != null) // { // if (Manager.TracingData.Priority <= 0) // { // if (Group.Id == Manager.TracingData.GroupId) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "PolityCulturalProminenceInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", Name: " + Name + // ", timeSpan: " + timeSpan + // ", timeEffectFactor: " + timeEffectFactor + // ", randomEffect: " + randomEffect + // ", polity Id: " + polityProminence.PolityId + // ", polityProminence.Value: " + prominenceEffect + // ", politySkill.Value: " + targetValue + // ", Value: " + Value + // ", change: " + change + // "", Group.World.CurrentDate); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } // else if (Manager.TracingData.Priority <= 1) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "PolityCulturalProminenceInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // "", Group.World.CurrentDate); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif _newValue = _newValue + change; }
protected void UpdateInternal(long timeSpan, float timeEffectFactor, float specificModifier) { TerrainCell groupCell = Group.Cell; float randomModifier = groupCell.GetNextLocalRandomFloat(RngOffsets.SKILL_UPDATE + RngOffset); randomModifier *= randomModifier; float randomFactor = specificModifier - randomModifier; float maxTargetValue = 1.0f; float minTargetValue = -0.2f; float targetValue = 0; if (randomFactor > 0) { targetValue = Value + (maxTargetValue - Value) * randomFactor; } else { targetValue = Value - (minTargetValue - Value) * randomFactor; } float timeEffect = timeSpan / (float)(timeSpan + timeEffectFactor); float newValue = (Value * (1 - timeEffect)) + (targetValue * timeEffect); // #if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) { // if (Group.Id == Manager.TracingData.GroupId) { // // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "UpdateInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", Name: " + Name + // ", timeSpan: " + timeSpan + // ", timeEffectFactor: " + timeEffectFactor + // ", specificModifier: " + specificModifier + // ", randomModifier: " + randomModifier + // ", targetValue: " + targetValue + // ", Value: " + Value + // ", newValue: " + newValue + // ""); // // Manager.RegisterDebugEvent ("DebugMessage", debugMessage); // } // } // #endif _newValue = newValue; }
public void AddPolityProminenceEffect(CulturalActivity polityActivity, PolityProminence polityProminence, long timeSpan) { float targetValue = polityActivity.Value; float prominenceEffect = polityProminence.Value; TerrainCell groupCell = Group.Cell; float randomEffect = groupCell.GetNextLocalRandomFloat(RngOffsets.ACTIVITY_POLITY_PROMINENCE + RngOffset + unchecked ((int)polityProminence.PolityId)); float timeEffect = timeSpan / (timeSpan + TimeEffectConstant); // _newvalue should have been set correctly either by the constructor or by the Update function float change = (targetValue - _newValue) * prominenceEffect * timeEffect * randomEffect; _newValue = _newValue + change; }
protected void AddPolityProminenceEffectInternal(CulturalKnowledge polityKnowledge, PolityProminence polityProminence, long timeSpan, float timeEffectFactor) { int rngOffset = RngOffsets.KNOWLEDGE_POLITY_PROMINENCE + InstanceRngOffset + unchecked ((int)polityProminence.PolityId); int targetValue = polityKnowledge.Value; float prominenceEffect = polityProminence.Value; TerrainCell groupCell = Group.Cell; float randomEffect = groupCell.GetNextLocalRandomFloat(rngOffset++); float timeEffect = timeSpan / (float)(timeSpan + timeEffectFactor); int valueDelta = targetValue - _newValue; float d; // _newvalue should have been set correctly either by the constructor or by the Update function int valueChange = (int)MathUtility.MultiplyAndGetDecimals(valueDelta, prominenceEffect * timeEffect * randomEffect, out d); if (d > Group.GetNextLocalRandomFloat(rngOffset++)) { valueChange++; } //#if DEBUG // if (Manager.RegisterDebugEvent != null) // { // if (Manager.TracingData.Priority <= 0) // { // if (Group.Id == Manager.TracingData.GroupId) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "CellCulturalKnowledge.PolityCulturalProminenceInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", Name: " + Name + // ", timeSpan: " + timeSpan + // ", timeEffectFactor: " + timeEffectFactor + // ", randomEffect: " + randomEffect + // ", Group.PolityProminences.Count: " + Group.PolityProminences.Count + // ", polity Id: " + polityProminence.PolityId + // ", polityProminence.Value: " + prominenceEffect + // ", politySkill.Value: " + targetValue + // ", Value: " + Value + // ", _newValue: " + _newValue + // ", valueChange: " + valueChange + // "", Group.World.CurrentDate); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } // else if (Manager.TracingData.Priority <= 1) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "CellCulturalKnowledge.PolityCulturalProminenceInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // "", Group.World.CurrentDate); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif _newValue = _newValue + valueChange; }
protected void UpdateValueInternal(long timeSpan, float timeEffectFactor, float specificModifier) { TerrainCell groupCell = Group.Cell; int rngOffset = RngOffsets.KNOWLEDGE_UPDATE_VALUE_INTERNAL + InstanceRngOffset; float randomModifier = groupCell.GetNextLocalRandomFloat(rngOffset++); randomModifier *= randomModifier; float randomFactor = specificModifier - randomModifier; randomFactor = Mathf.Clamp(randomFactor, -1, 1); int maxTargetValue = Limit; int minTargetValue = 0; int targetValue = 0; if (randomFactor > 0) { targetValue = Value + (int)((maxTargetValue - Value) * randomFactor); } else { targetValue = Value - (int)((minTargetValue - Value) * randomFactor); } float timeEffect = timeSpan / (timeSpan + timeEffectFactor); float d; int newValue = MathUtility.LerpToIntAndGetDecimals(Value, targetValue, timeEffect, out d); if (d > Group.GetNextLocalRandomFloat(rngOffset++)) { newValue++; } #if DEBUG if ((Limit > 1) && (newValue > Limit) && (newValue > Value)) { throw new System.Exception("UpdateValueInternal: new value " + newValue + " above Level Limit " + Limit); } if (newValue > 1000000) { throw new System.Exception("UpdateValueInternal: new value " + newValue + " above 1000000"); } if ((Id == SocialOrganizationKnowledge.KnowledgeId) && (newValue < SocialOrganizationKnowledge.MinValueForTribeFormation)) { if (Group.GetFactionCores().Count > 0) { Debug.LogWarning("Group with low social organization has faction cores - Id: " + Group.Id + ", newValue:" + newValue); } if (Group.WillBecomeFactionCore) { Debug.LogWarning("Group with low social organization will become a faction core - Id: " + Group.Id + ", newValue:" + newValue); } } #endif //#if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) // { // if (Group.Id == Manager.TracingData.GroupId) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "CellCulturalKnowledge.UpdateValueInternal - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", Id: " + Id + // ", IsPresent: " + IsPresent + // ", Value: " + Value + // ", _newValue: " + _newValue + // ", newValue: " + newValue + // ", targetValue: " + targetValue + // ", Limit: " + Limit + // ", randomModifier: " + randomModifier + // ", specificModifier: " + specificModifier + // ", InstanceRngOffset: " + InstanceRngOffset + // ", timeEffect: " + timeEffect + // //", AcquisitionDate: " + AcquisitionDate + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif _newValue = newValue; }