Пример #1
0
    protected void RemoveKnowledge(CulturalKnowledge knowledge)
    {
        if (!_knowledges.ContainsKey(knowledge.Id))
        {
            return;
        }

        _knowledges.Remove(knowledge.Id);
    }
Пример #2
0
    public bool HasKnowledge(string id)
    {
        CulturalKnowledge knowledge = GetKnowledge(id);

        if (knowledge != null)
        {
            return(true);
        }

        return(false);
    }
Пример #3
0
    protected void AddKnowledge(CulturalKnowledge knowledge)
    {
        if (_knowledges.ContainsKey(knowledge.Id))
        {
            return;
        }

        World.AddExistingCulturalKnowledgeInfo(knowledge);

        _knowledges.Add(knowledge.Id, knowledge);
    }
    public override bool Evaluate(CellGroup group)
    {
        CulturalKnowledge knowledge = group.Culture.GetKnowledge(KnowledgeId);

        if (knowledge != null)
        {
            return(knowledge.Value >= MinValue);
        }

        return(false);
    }
    public void AddKnowledgeToLose(string knowledgeId)
    {
        CulturalKnowledge knowledge = null;

        if (!_knowledges.TryGetValue(knowledgeId, out knowledge))
        {
            Debug.LogWarning("CellCulture: Trying to remove knowledge that is not present: " + knowledgeId);

            return;
        }

        _knowledgesToLose.Add(knowledge as CellCulturalKnowledge);
    }
Пример #6
0
    public bool TryGetKnowledgeScaledValue(string id, out float scaledValue)
    {
        scaledValue = 0;

        CulturalKnowledge knowledge = GetKnowledge(id);

        if (knowledge != null)
        {
            scaledValue = knowledge.ScaledValue;

            return(true);
        }

        return(false);
    }
Пример #7
0
    public bool TryGetKnowledgeValue(string id, out int value)
    {
        value = 0;

        CulturalKnowledge knowledge = GetKnowledge(id);

        if (knowledge != null)
        {
            value = knowledge.Value;

            return(true);
        }

        return(false);
    }
    public override void AddPolityProminenceEffect(CulturalKnowledge polityKnowledge, PolityProminence polityProminence, long timeSpan)
    {
        AddPolityProminenceEffectInternal(polityKnowledge, polityProminence, timeSpan, TimeEffectConstant);

#if DEBUG
        if (_newValue < 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
    }
Пример #9
0
 public static bool IsAgricultureKnowledge(CulturalKnowledge knowledge)
 {
     return(knowledge.Id.Contains(KnowledgeId));
 }
 public static bool IsSocialOrganizationKnowledge(CulturalKnowledge knowledge)
 {
     return(knowledge.Id.Contains(KnowledgeId));
 }
Пример #11
0
 public override void AddPolityProminenceEffect(CulturalKnowledge polityKnowledge, PolityProminence polityProminence, long timeSpan)
 {
     throw new System.NotImplementedException();
 }
Пример #12
0
 public CulturalKnowledge(CulturalKnowledge baseKnowledge) : base(baseKnowledge)
 {
     Value = baseKnowledge.Value;
 }
Пример #13
0
 public override void AddPolityProminenceEffect(CulturalKnowledge polityKnowledge, PolityProminence polityProminence, long timeSpan)
 {
     AddPolityProminenceEffectInternal(polityKnowledge, polityProminence, timeSpan, TimeEffectConstant);
 }
Пример #14
0
 public static bool IsShipbuildingKnowledge(CulturalKnowledge knowledge)
 {
     return(knowledge.Id.Contains(KnowledgeId));
 }
Пример #15
0
 public PolityCulturalKnowledge(CulturalKnowledge baseKnowledge) : base(baseKnowledge)
 {
     Value = 0; // this should be set by calling FinalizeUpdateFromFactions afterwards
 }
Пример #16
0
 public abstract void AddPolityProminenceEffect(CulturalKnowledge polityKnowledge, PolityProminence polityProminence, long timeSpan);
Пример #17
0
    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;
    }
    private void UpdateKnowledges(CellCulture coreCulture, float timeFactor)
    {
        //Profiler.BeginSample("Culture - Update Knowledges");

        //#if DEBUG
        //        if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0))
        //        {
        //            if (Manager.TracingData.FactionId == Faction.Id)
        //            {
        //                SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage(
        //                    "FactionCulture:Update - Update Knowledges - Faction.Id:" + Faction.Id,
        //                    "CurrentDate: " + World.CurrentDate +
        //                    ", coreCulture.Group.Id: " + coreCulture.Group.Id +
        //                    ", Knowledges.Count: " + Knowledges.Count +
        //                    "");

        //                Manager.RegisterDebugEvent("DebugMessage", debugMessage);
        //            }
        //        }
        //#endif

        foreach (CellCulturalKnowledge k in coreCulture.GetKnowledges())
        {
            //Profiler.BeginSample("GetKnowledge");

            CulturalKnowledge knowledge = GetKnowledge(k.Id);

            //Profiler.EndSample();

            if (knowledge == null)
            {
                //Profiler.BeginSample("new CulturalKnowledge");

                knowledge = new CulturalKnowledge(k);
                AddKnowledge(knowledge);

                //Profiler.EndSample();
            }

            //Profiler.BeginSample("update knowledge.Value");

            float addValue = k.Value * timeFactor;

            if (addValue < 1) // Always try approaching the core cell knowledge value regardless how small the timeFactor is
            {
                if ((knowledge.Value - k.Value) <= -1)
                {
                    knowledge.Value++;
                }
                else if ((knowledge.Value - k.Value) >= 1)
                {
                    knowledge.Value--;
                }
            }
            else
            {
                knowledge.Value = (int)((knowledge.Value * (1f - timeFactor)) + addValue);
            }

            //Profiler.EndSample();
        }

        foreach (CulturalKnowledge k in _knowledges.Values)
        {
            //Profiler.BeginSample("coreCulture.Skills.ContainsKey");

            if (coreCulture.GetKnowledge(k.Id) == null)
            {
                k.Value = (int)(k.Value * (1f - timeFactor));
            }

            //Profiler.EndSample();
        }

        //Profiler.EndSample();
    }