Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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)));
 }