private long CalculateTriggerDate(CellGroup group) { float randomFactor = group.GetNextLocalRandomFloat(IdHash); float dateSpan = randomFactor * EventTimeToTrigger; if (EventTimeToTriggerFactors != null) { foreach (Factor factor in EventTimeToTriggerFactors) { float factorValue = factor.Calculate(group); dateSpan *= Mathf.Clamp01(factorValue); } } long targetDate = group.World.CurrentDate + (long)dateSpan + 1; if ((targetDate <= group.World.CurrentDate) || (targetDate > World.MaxSupportedDate)) { // log details about invalid date Debug.LogWarning("Discovery+Event.CalculateTriggerDate - targetDate (" + targetDate + ") less than or equal to World.CurrentDate (" + group.World.CurrentDate + "), randomFactor: " + randomFactor + ", EventTimeToTrigger: " + EventTimeToTrigger + ", dateSpan: " + dateSpan); return(long.MinValue); } return(targetDate); }
public void Merge(int value, float percentage) { float d; // _newvalue should have been set correctly either by the constructor or by the Update function int mergedValue = MathUtility.LerpToIntAndGetDecimals(_newValue, value, percentage, out d); if (d > Group.GetNextLocalRandomFloat(RngOffsets.KNOWLEDGE_MERGE + InstanceRngOffset)) { mergedValue++; } #if DEBUG if ((Id == SocialOrganizationKnowledge.KnowledgeId) && (mergedValue < SocialOrganizationKnowledge.MinValueForTribeFormation)) { if (Group.GetFactionCores().Count > 0) { Debug.LogWarning("group with low social organization has faction cores - Id: " + Group.Id); } } #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.Merge - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", Id: " + Id + // ", IsPresent: " + IsPresent + // ", Value: " + Value + // ", _newValue: " + _newValue + // ", mergedValue: " + mergedValue + // ", value (param): " + value + // ", percentage: " + percentage + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif _newValue = mergedValue; }
public override bool ShouldMigrateFactionCore(CellGroup sourceGroup, TerrainCell targetCell, float targetProminence, int targetPopulation) { //#if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) // { // if (sourceGroup.Id == Manager.TracingData.GroupId) // { // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "ShouldMigrateFactionCore - Clan:" + Id + ", sourceGroup:" + sourceGroup.Id, // "CurrentDate: " + World.CurrentDate + // ", targetPopulation: " + targetPopulation + // ", targetProminence: " + targetProminence + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif float targetProminenceFactor = Mathf.Max(0, targetProminence - MinCorePolityProminence); if (targetProminenceFactor <= 0) { return(false); } float targetPopulationFactor = Mathf.Max(0, targetPopulation - MinCorePopulation); if (targetPopulationFactor <= 0) { return(false); } int sourcePopulation = sourceGroup.Population; PolityProminence pi = sourceGroup.GetPolityProminence(Polity); if (pi == null) { Debug.LogError("Unable to find Polity with Id: " + Polity.Id); } float sourceProminence = pi.Value; float sourceProminenceFactor = Mathf.Max(0, sourceProminence - MinCorePolityProminence); float sourcePopulationFactor = Mathf.Max(0, sourcePopulation - MinCorePopulation); float sourceFactor = sourceProminenceFactor * sourcePopulationFactor; //#if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) // { // if (sourceGroup.Id == Manager.TracingData.GroupId) // { // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "ShouldMigrateFactionCore - Clan:" + Id + ", sourceGroup:" + sourceGroup.Id, // "CurrentDate: " + World.CurrentDate + // ", sourceProminence: " + sourceProminence + // ", sourcePopulation: " + sourcePopulation + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif if (sourceFactor <= 0) { return(true); } float targetFactor = targetProminenceFactor * targetPopulationFactor; float migrateCoreFactor = sourceFactor / (sourceFactor + targetFactor); float randomValue = sourceGroup.GetNextLocalRandomFloat(RngOffsets.MIGRATING_GROUP_MOVE_FACTION_CORE + unchecked ((int)Id)); //#if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) // { // if (sourceGroup.Id == Manager.TracingData.GroupId) // { // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "ShouldMigrateFactionCore - Clan:" + Id + ", sourceGroup:" + sourceGroup.Id, // "CurrentDate: " + World.CurrentDate + // ", randomValue: " + randomValue + // ", migrateCoreFactor: " + migrateCoreFactor + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif return(randomValue > migrateCoreFactor); }
public float GetNextLocalRandomFloat(int iterationOffset) { return(CoreGroup.GetNextLocalRandomFloat(iterationOffset + unchecked ((int)Id))); }