public async Task <Polity> AddPolity(Polity polity)
        {
            var pt = _dbContext.polities.Add(polity);
            await _dbContext.SaveChangesAsync();

            return(pt.Entity);
        }
Exemple #2
0
    public static void LeaderPreventsSplit(Clan splitClan, Clan dominantClan, Tribe tribe, long eventId)
    {
        float charismaFactor = splitClan.CurrentLeader.Charisma / 10f;
        float wisdomFactor   = splitClan.CurrentLeader.Wisdom / 15f;

        float attributesFactor = Mathf.Max(charismaFactor, wisdomFactor);

        attributesFactor = Mathf.Clamp(attributesFactor, 0.5f, 2f);

        int rngOffset = RngOffsets.TRIBE_SPLITTING_EVENT_TRIBE_LEADER_PREVENTS_MODIFY_ATTRIBUTE;

        // Influence

        float randomFactor           = dominantClan.GetNextLocalRandomFloat(rngOffset++);
        float influencePercentChange = (BaseMaxInfluencePercentChange - BaseMinInfluencePercentChange) * randomFactor + BaseMinInfluencePercentChange;

        influencePercentChange /= attributesFactor;

        Polity.TransferInfluence(dominantClan, splitClan, influencePercentChange);

        // Relationship

        randomFactor = dominantClan.GetNextLocalRandomFloat(rngOffset++);
        float relationshipPercentChange = (BaseMaxRelationshipPercentChange - BaseMinRelationshipPercentChange) * randomFactor + BaseMinRelationshipPercentChange;

        relationshipPercentChange *= attributesFactor;

        float newValue = MathUtility.IncreaseByPercent(dominantClan.GetRelationshipValue(splitClan), relationshipPercentChange);

        Faction.SetRelationship(dominantClan, splitClan, newValue);

        // Updates

        LeaderPreventsSplit_notifySplitClan(splitClan, dominantClan, tribe, eventId);
    }
    public virtual void Reset(long newTriggerDate)
    {
        OriginalPolity   = Faction.Polity;
        OriginalPolityId = OriginalPolity.Id;

        Reset(newTriggerDate, GenerateUniqueIdentifier(Faction, newTriggerDate, TypeId));
    }
    public virtual void FinalizeLoad()
    {
        Name.World = World;
        Name.FinalizeLoad();

        CoreGroup = World.GetGroup(CoreGroupId);

        Polity = World.GetPolity(PolityId);

        if (Polity == null)
        {
            throw new System.Exception("Missing Polity with Id " + PolityId);
        }

        Culture.World   = World;
        Culture.Faction = this;
        Culture.FinalizeLoad();

        foreach (FactionRelationship relationship in Relationships)
        {
            _relationships.Add(relationship.Id, relationship);
            relationship.Faction = World.GetFaction(relationship.Id);

            if (relationship.Faction == null)
            {
                throw new System.Exception("Faction is null, Id: " + relationship.Id);
            }
        }

        GenerateEventsFromData();
    }
    public FactionEvent(Faction faction, long triggerDate, long eventTypeId) : base(faction.World, triggerDate, GenerateUniqueIdentifier(faction, triggerDate, eventTypeId), eventTypeId)
    {
        Faction   = faction;
        FactionId = Faction.Id;

        OriginalPolity   = faction.Polity;
        OriginalPolityId = OriginalPolity.Id;

        //		#if DEBUG
        //		if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) {
        //			string factionId = "Id: " + faction.Id;
        //
        //			SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage("FactionEvent - Faction: " + factionId, "TriggerDate: " + TriggerDate);
        //
        //			Manager.RegisterDebugEvent ("DebugMessage", debugMessage);
        //		}
        //		#endif

//#if DEBUG
//        if ((Id == 160349336613603015L) || (Id == 160349354613603010L))
//        {
//            Debug.LogWarning("Generating Event Id: " + Id + ". Faction Id: " + faction.Id +
//                ", current date: " + World.CurrentDate + ", loaded world: " + Manager.Debug_IsLoadedWorld);
//        }
//#endif
    }
    public override bool IsStillValid()
    {
        if (!base.IsStillValid())
        {
            return(false);
        }

        if (Faction == null)
        {
            return(false);
        }

        if (!Faction.StillPresent)
        {
            return(false);
        }

        Polity polity = World.GetPolity(Faction.PolityId);

        if (polity == null)
        {
            Debug.LogError("FactionEvent: Polity with Id:" + Faction.PolityId + " not found");
        }

        return(true);
    }
    protected static void GenerateEffectsString_TransferInfluence(
        Faction sourceFaction, Faction targetFaction, Polity polity, float minPercentChange, float maxPercentChange, out string effectStringSourceFaction, out string effectStringTargetFaction)
    {
        float charismaFactor = sourceFaction.CurrentLeader.Charisma / 10f;
        float wisdomFactor   = sourceFaction.CurrentLeader.Wisdom / 15f;

        float attributesFactor = Mathf.Max(charismaFactor, wisdomFactor);

        attributesFactor = Mathf.Clamp(attributesFactor, 0.5f, 2f);

        float modMinPercentChange = minPercentChange / attributesFactor;
        float modMaxPercentChange = maxPercentChange / attributesFactor;

        float oldSourceInfluenceValue = sourceFaction.Influence;

        float minSourceValChange = oldSourceInfluenceValue * (1f - modMinPercentChange);
        float maxSourceValChange = oldSourceInfluenceValue * (1f - modMaxPercentChange);

        float oldTargetInfluenceValue = targetFaction.Influence;

        float minTargetValChange = oldTargetInfluenceValue + oldSourceInfluenceValue - minSourceValChange;
        float maxTargetValChange = oldTargetInfluenceValue + oldSourceInfluenceValue - maxSourceValChange;

        effectStringSourceFaction = sourceFaction.GetNameAndTypeStringBold().FirstLetterToUpper() + ": influence within the " + polity.GetNameAndTypeStringBold() +
                                    " (" + oldSourceInfluenceValue.ToString("P") + ") decreases to: " + minSourceValChange.ToString("P") + " - " + maxSourceValChange.ToString("P");

        effectStringTargetFaction = targetFaction.GetNameAndTypeStringBold().FirstLetterToUpper() + ": influence within the " + polity.GetNameAndTypeStringBold() +
                                    " (" + oldTargetInfluenceValue.ToString("P") + ") increases to: " + minTargetValChange.ToString("P") + " - " + maxTargetValChange.ToString("P");
    }
    public Faction(string type, Polity polity, CellGroup coreGroup, float influence, Faction parentFaction = null)
    {
        World = polity.World;

        LastUpdateDate = World.CurrentDate;

        long idOffset = 0;

        if (parentFaction != null)
        {
            idOffset = parentFaction.Id + 1;
        }

        PolityId = polity.Id;
        Polity   = polity;

        CoreGroup   = coreGroup;
        CoreGroupId = coreGroup.Id;

        long id = GenerateUniqueIdentifier(World.CurrentDate, 100L, idOffset);

        Info = new FactionInfo(type, id, this);

        Culture = new FactionCulture(this);

        CoreGroup.AddFactionCore(this);

        Influence = influence;

        GenerateName(parentFaction);

        IsInitialized = false;
    }
Exemple #9
0
        private void TryGenerateEventMessage()
        {
            DiscoveryEventMessage eventMessage = null;

            World       world = Group.World;
            TerrainCell cell  = Group.Cell;

            if (!world.HasEventMessage(_discovery.UId))
            {
                eventMessage = new DiscoveryEventMessage(_discovery, cell, _discovery.UId, TriggerDate);

                world.AddEventMessage(eventMessage);
            }

            if (cell.EncompassingTerritory != null)
            {
                Polity encompassingPolity = cell.EncompassingTerritory.Polity;

                if (!encompassingPolity.HasEventMessage(_discovery.UId))
                {
                    if (eventMessage == null)
                    {
                        eventMessage = new DiscoveryEventMessage(_discovery, cell, _discovery.UId, TriggerDate);
                    }

                    encompassingPolity.AddEventMessage(eventMessage);
                }
            }
        }
    public PolityContact(Polity polity, int initialGroupCount = 0)
    {
        Polity = polity;

        Id = polity.Id;

        GroupCount = initialGroupCount;
    }
    public FactionEvent(Faction faction, FactionEventData data) : base(faction.World, data, GenerateUniqueIdentifier(faction, data.TriggerDate, data.TypeId))
    {
        Faction   = faction;
        FactionId = Faction.Id;

        OriginalPolityId = data.OriginalPolityId;
        OriginalPolity   = World.GetPolity(OriginalPolityId);
    }
    public PolityEvent(Polity polity, PolityEventData data) : base(polity.World, data, GenerateUniqueIdentifier(polity, data.TriggerDate, data.TypeId))
    {
        Polity   = polity;
        PolityId = Polity.Id;

        OriginalDominantFactionId = data.OriginalDominantFactionId;
        OriginalDominantFaction   = World.GetFaction(OriginalDominantFactionId);
    }
    public PolityProminence(CellGroup group, Polity polity, float value, bool isMigratingGroup = false)
    {
        Group = group;

        //_isMigratingGroup = isMigratingGroup;

        Set(polity, value);
    }
    public override void FinalizeLoad()
    {
        base.FinalizeLoad();

        TargetGroup = World.GetGroup(TargetGroupId);
        Polity      = World.GetPolity(PolityId);

        Group.PolityExpansionEvent = this;
    }
    public static long GenerateUniqueIdentifier(Polity polity, long triggerDate, long eventTypeId)
    {
        if (triggerDate >= World.MaxSupportedDate)
        {
            Debug.LogWarning("PolityEvent.GenerateUniqueIdentifier - 'triggerDate' is greater than " + World.MaxSupportedDate + " (triggerDate = " + triggerDate + ")");
        }

        return((triggerDate * 1000000000L) + ((polity.Id % 1000000L) * 1000L) + eventTypeId);
    }
    public void Set(Polity polity, float value)
    {
        PolityId = polity.Id;
        Polity   = polity;
        Value    = MathUtility.RoundToSixDecimals(value);
        NewValue = Value;

        AdministrativeCost = 0;
    }
    public void Set(PolityProminence polityProminence)
    {
        PolityId = polityProminence.PolityId;
        Polity   = polityProminence.Polity;
        Value    = polityProminence.Value;
        NewValue = Value;

        AdministrativeCost = 0;
    }
    protected static string GenerateResultEffectsString_DecreasePreference(Polity polity, string preferenceId)
    {
        Faction dominantFaction = polity.DominantFaction;

        CulturalPreference preference = dominantFaction.Culture.GetPreference(preferenceId);

        return(polity.GetNameAndTypeStringBold().FirstLetterToUpper() + ": " + dominantFaction.GetNameAndTypeStringBold().AddPossApos() + " preference decreases to: " +
               preference.Value.ToString("0.00"));
    }
    public void Reset(Polity polity, CellGroup targetGroup, long triggerDate)
    {
        TargetGroup   = targetGroup;
        TargetGroupId = TargetGroup.Id;

        Polity   = polity;
        PolityId = Polity.Id;

        Reset(triggerDate);
    }
    public Tribe(Clan triggerClan, Polity parentPolity) : base(PolityTypeStr, triggerClan.CoreGroup, triggerClan.Id)
    {
        triggerClan.ChangePolity(this, triggerClan.Influence);

        SwitchCellProminences(parentPolity, triggerClan);

        GenerateName();

        //		Debug.Log ("New tribe '" + Name + "' from tribe '" + parentPolity.Name + "' with total transfered influence = " + transferedInfluence);
    }
    protected static string GenerateResultEffectsString_DecreaseRelationship(Polity polity, Polity targetPolity)
    {
        Faction dominantFaction       = polity.DominantFaction;
        Faction targetdominantFaction = targetPolity.DominantFaction;

        float value = dominantFaction.GetRelationshipValue(targetdominantFaction);

        return(polity.GetNameAndTypeStringBold().FirstLetterToUpper() + ": " + dominantFaction.GetNameAndTypeStringBold().AddPossApos() + " relationship with " +
               targetdominantFaction.GetNameAndTypeWithPolityStringBold() + " decreases to: " + value.ToString("0.00"));
    }
Exemple #22
0
    public PolityInfo(string type, long id, Polity polity)
    {
        Id = id;

        FormationDate = polity.World.CurrentDate;

        Polity = polity;

        SetType(type);
    }
    public PolityProminenceCluster(PolityProminence startProminence)
    {
        Id     = startProminence.Id;
        Polity = startProminence.Polity;

#if DEBUG
        CreationDate = Polity.World.CurrentDate;
#endif

        AddProminence(startProminence);
    }
    public override void FinalizeLoad()
    {
        base.FinalizeLoad();

        Polity = World.GetPolity(PolityId);
        OriginalDominantFaction = World.GetFaction(OriginalDominantFactionId);

        if (Polity == null)
        {
            Debug.LogError("PolityEvent: Polity with Id:" + PolityId + " not found");
        }
    }
    public override void FinalizeLoad()
    {
        base.FinalizeLoad();

        Faction        = World.GetFaction(FactionId);
        OriginalPolity = World.GetPolity(OriginalPolityId);

        if (Faction == null)
        {
            Debug.LogError("FactionEvent: Faction with Id:" + FactionId + " not found");
        }
    }
    public ExpandPolityProminenceEvent(CellGroup group, Polity polity, CellGroup targetGroup, long triggerDate) : base(group, triggerDate, ExpandPolityProminenceEventId)
    {
        Polity = polity;

        PolityId = polity.Id;

        TargetGroup = targetGroup;

        TargetGroupId = TargetGroup.Id;

        DoNotSerialize = true;
    }
    public void AddFocusedPolity(Polity polity)
    {
        FocusedPolityPanelScript focusedPolityPanel = GameObject.Instantiate(FocusedPolityPanelPrefab) as FocusedPolityPanelScript;

        focusedPolityPanel.Set(polity);
        focusedPolityPanel.transform.SetParent(transform);
        focusedPolityPanel.transform.localScale = Vector3.one;

        focusedPolityPanel.SetVisible(true);

        _activePanels.Add(focusedPolityPanel);
    }
    public void Set(Polity polity)
    {
        Polity = polity;

        PolityText.text = polity.Name.Text + " " + polity.Type;

        UnsetFocusButton.onClick.RemoveAllListeners();

        UnsetFocusButton.onClick.AddListener(() =>
        {
            Manager.UnsetFocusOnPolity(polity);
        });
    }
    public void ChangePolity(Polity targetPolity, float targetInfluence)
    {
        if ((targetPolity == null) || (!targetPolity.StillPresent))
        {
            throw new System.Exception("target Polity is null or not Present");
        }

        Polity.RemoveFaction(this);

        Polity    = targetPolity;
        PolityId  = Polity.Id;
        Influence = targetInfluence;

        targetPolity.AddFaction(this);
    }
    protected static void Effect_TransferInfluence(Faction sourceFaction, Faction targetFaction, float minPercentChange, float maxPercentChange, int rngOffset)
    {
        float charismaFactor = sourceFaction.CurrentLeader.Charisma / 10f;
        float wisdomFactor   = sourceFaction.CurrentLeader.Wisdom / 15f;

        float attributesFactor = Mathf.Max(charismaFactor, wisdomFactor);

        attributesFactor = Mathf.Clamp(attributesFactor, 0.5f, 2f);

        float randomFactor           = sourceFaction.GetNextLocalRandomFloat(rngOffset);
        float influencePercentChange = (maxPercentChange - minPercentChange) * randomFactor + minPercentChange;

        influencePercentChange /= attributesFactor;

        Polity.TransferInfluence(sourceFaction, targetFaction, influencePercentChange);
    }