events, relations

This commit is contained in:
Robert Janetzko 2022-04-23 11:31:23 +00:00
parent bd201605f6
commit fe5cca0c5c
4 changed files with 144 additions and 61 deletions

View File

@ -362,7 +362,7 @@ func (x *HistoricalEventBuildingProfileAcquired) Html() string {
return util.If(x.AcquirerEnid != -1, entity(x.AcquirerEnid), hf(x.AcquirerHfid)) + return util.If(x.AcquirerEnid != -1, entity(x.AcquirerEnid), hf(x.AcquirerHfid)) +
util.If(x.PurchasedUnowned, " purchased ", " inherited ") + util.If(x.PurchasedUnowned, " purchased ", " inherited ") +
property(x.SiteId, x.BuildingProfileId) + site(x.SiteId, " in") + property(x.SiteId, x.BuildingProfileId) + site(x.SiteId, " in") +
util.If(x.LastOwnerHfid != -1, " formerly owned by "+hf(x.LastOwnerHfid), "") util.If(x.LastOwnerHfid != -1, " formerly owned by "+hfRelated(x.LastOwnerHfid, x.AcquirerHfid), "")
} }
func (x *HistoricalEventCeremony) Html() string { func (x *HistoricalEventCeremony) Html() string {
@ -482,7 +482,7 @@ func (x *HistoricalEventChangeHfState) Html() string {
} }
func (x *HistoricalEventChangedCreatureType) Html() string { func (x *HistoricalEventChangedCreatureType) Html() string {
return hf(x.ChangerHfid) + " changed " + hf(x.ChangeeHfid) + " from " + articled(x.OldRace) + " to " + articled(x.NewRace) return hf(x.ChangerHfid) + " changed " + hfRelated(x.ChangeeHfid, x.ChangerHfid) + " from " + articled(x.OldRace) + " to " + articled(x.NewRace)
} }
func (x *HistoricalEventCompetition) Html() string { func (x *HistoricalEventCompetition) Html() string {
@ -543,7 +543,7 @@ func (x *HistoricalEventCreatedWorldConstruction) Html() string {
} }
func (x *HistoricalEventCreatureDevoured) Html() string { func (x *HistoricalEventCreatureDevoured) Html() string {
return hf(x.Eater) + " devoured " + util.If(x.Victim != -1, hf(x.Victim), articled(x.Race)) + return hf(x.Eater) + " devoured " + util.If(x.Victim != -1, hfRelated(x.Victim, x.Eater), articled(x.Race)) +
util.If(x.Entity != -1, " of "+entity(x.Entity), "") + util.If(x.Entity != -1, " of "+entity(x.Entity), "") +
location(x.SiteId, " in", x.SubregionId, " in") location(x.SiteId, " in", x.SubregionId, " in")
} }
@ -552,18 +552,18 @@ func (x *HistoricalEventDanceFormCreated) Html() string {
reason := "" reason := ""
switch x.Reason { switch x.Reason {
case HistoricalEventDanceFormCreatedReason_GlorifyHf: case HistoricalEventDanceFormCreatedReason_GlorifyHf:
reason = " in order to glorify " + hf(x.ReasonId) reason = " in order to glorify " + hfRelated(x.ReasonId, x.HistFigureId)
} }
circumstance := "" circumstance := ""
switch x.Circumstance { switch x.Circumstance {
case HistoricalEventDanceFormCreatedCircumstance_Dream: case HistoricalEventDanceFormCreatedCircumstance_Dream:
circumstance = " after a dream" circumstance = " after a dream"
case HistoricalEventDanceFormCreatedCircumstance_DreamAboutHf: case HistoricalEventDanceFormCreatedCircumstance_DreamAboutHf:
circumstance = " after a dreaming about " + hf(x.CircumstanceId) circumstance = " after a dreaming about " + util.If(x.ReasonId == x.CircumstanceId, hfShort(x.CircumstanceId), hfRelated(x.CircumstanceId, x.HistFigureId))
case HistoricalEventDanceFormCreatedCircumstance_Nightmare: case HistoricalEventDanceFormCreatedCircumstance_Nightmare:
circumstance = " after a nightmare" circumstance = " after a nightmare"
case HistoricalEventDanceFormCreatedCircumstance_PrayToHf: case HistoricalEventDanceFormCreatedCircumstance_PrayToHf:
circumstance = " after praying to " + hf(x.CircumstanceId) circumstance = " after praying to " + util.If(x.ReasonId == x.CircumstanceId, hfShort(x.CircumstanceId), hfRelated(x.CircumstanceId, x.HistFigureId))
} }
return danceForm(x.FormId) + " was created by " + hf(x.HistFigureId) + location(x.SiteId, " in", x.SubregionId, " in") + reason + circumstance return danceForm(x.FormId) + " was created by " + hf(x.HistFigureId) + location(x.SiteId, " in", x.SubregionId, " in") + reason + circumstance
} }
@ -626,15 +626,15 @@ func (x *HistoricalEventEntityLaw) Html() string {
} }
func (x *HistoricalEventEntityOverthrown) Html() string { func (x *HistoricalEventEntityOverthrown) Html() string {
return hf(x.InstigatorHfid) + " toppled the government of " + util.If(x.OverthrownHfid != -1, hf(x.OverthrownHfid)+" of ", "") + entity(x.EntityId) + " and " + return hf(x.InstigatorHfid) + " toppled the government of " + util.If(x.OverthrownHfid != -1, hfRelated(x.OverthrownHfid, x.InstigatorHfid)+" of ", "") + entity(x.EntityId) + " and " +
util.If(x.PosTakerHfid == x.InstigatorHfid, "assumed control", "placed "+hf(x.PosTakerHfid)+" in power") + site(x.SiteId, " in") + util.If(x.PosTakerHfid == x.InstigatorHfid, "assumed control", "placed "+hfRelated(x.PosTakerHfid, x.InstigatorHfid)+" in power") + site(x.SiteId, " in") +
util.If(len(x.ConspiratorHfid) > 0, ". The support of "+hfList(x.ConspiratorHfid)+" was crucial to the coup", "") util.If(len(x.ConspiratorHfid) > 0, ". The support of "+hfListRelated(x.ConspiratorHfid, x.InstigatorHfid)+" was crucial to the coup", "")
} }
func (x *HistoricalEventEntityPersecuted) Html() string { func (x *HistoricalEventEntityPersecuted) Html() string {
var l []string var l []string
if len(x.ExpelledHfid) > 0 { if len(x.ExpelledHfid) > 0 {
l = append(l, hfList(x.ExpelledHfid)+util.If(len(x.ExpelledHfid) > 1, " were", " was")+" expelled") l = append(l, hfListRelated(x.ExpelledHfid, x.PersecutorHfid)+util.If(len(x.ExpelledHfid) > 1, " were", " was")+" expelled")
} }
if len(x.PropertyConfiscatedFromHfid) > 0 { if len(x.PropertyConfiscatedFromHfid) > 0 {
l = append(l, "most property was confiscated") l = append(l, "most property was confiscated")
@ -673,9 +673,9 @@ func (x *HistoricalEventEntitySearchedSite) Html() string { // TODO
} }
func (x *HistoricalEventFailedFrameAttempt) Html() string { func (x *HistoricalEventFailedFrameAttempt) Html() string {
return hf(x.FramerHfid) + " attempted to frame " + hf(x.TargetHfid) + " for " + x.Crime.String() + return hf(x.FramerHfid) + " attempted to frame " + hfRelated(x.TargetHfid, x.FramerHfid) + " for " + x.Crime.String() +
util.If(x.PlotterHfid != -1, " at the behest of "+hf(x.PlotterHfid), "") + util.If(x.PlotterHfid != -1, " at the behest of "+hfRelated(x.PlotterHfid, x.FramerHfid), "") +
" by fooling " + hf(x.FooledHfid) + " and " + entity(x.ConvicterEnid) + " by fooling " + hfRelated(x.FooledHfid, x.FramerHfid) + " and " + entity(x.ConvicterEnid) +
" with fabricated evidence, but nothing came of it" " with fabricated evidence, but nothing came of it"
} }
@ -706,9 +706,9 @@ func (x *HistoricalEventFailedIntrigueCorruption) Html() string {
case HistoricalEventFailedIntrigueCorruptionMethod_Precedence: case HistoricalEventFailedIntrigueCorruptionMethod_Precedence:
method = "pulled rank as " + position(x.RelevantEntityId, x.RelevantPositionProfileId, x.CorruptorHfid) + " of " + entity(x.RelevantEntityId) method = "pulled rank as " + position(x.RelevantEntityId, x.RelevantPositionProfileId, x.CorruptorHfid) + " of " + entity(x.RelevantEntityId)
case HistoricalEventFailedIntrigueCorruptionMethod_ReligiousSympathy: case HistoricalEventFailedIntrigueCorruptionMethod_ReligiousSympathy:
method = "played for sympathy" + util.If(x.RelevantIdForMethod != -1, " by appealing to shared worship of "+hf(x.RelevantIdForMethod), "") method = "played for sympathy" + util.If(x.RelevantIdForMethod != -1, " by appealing to shared worship of "+hfRelated(x.RelevantIdForMethod, x.CorruptorHfid), "")
case HistoricalEventFailedIntrigueCorruptionMethod_RevengeOnGrudge: case HistoricalEventFailedIntrigueCorruptionMethod_RevengeOnGrudge:
method = "offered revenge upon the persecutor " + hf(x.RelevantIdForMethod) method = "offered revenge upon the persecutor " + hfRelated(x.RelevantIdForMethod, x.CorruptorHfid)
} }
fail := "The plan failed" fail := "The plan failed"
switch x.TopValue { switch x.TopValue {
@ -732,10 +732,10 @@ func (x *HistoricalEventFailedIntrigueCorruption) Html() string {
case HistoricalEventFailedIntrigueCorruptionTopFacet_Vanity: case HistoricalEventFailedIntrigueCorruptionTopFacet_Vanity:
case HistoricalEventFailedIntrigueCorruptionTopFacet_Vengeful: case HistoricalEventFailedIntrigueCorruptionTopFacet_Vengeful:
} }
return hf(x.CorruptorHfid) + " attempted to corrupt " + hf(x.TargetHfid) + return hf(x.CorruptorHfid) + " attempted to corrupt " + hfRelated(x.TargetHfid, x.CorruptorHfid) +
" in order to " + action + location(x.SiteId, " in", x.SubregionId, " in") + ". " + " in order to " + action + location(x.SiteId, " in", x.SubregionId, " in") + ". " +
util.Capitalize(util.If(x.LureHfid != -1, util.Capitalize(util.If(x.LureHfid != -1,
hf(x.LureHfid)+" lured "+hfShort(x.TargetHfid)+" to a meeting with "+hfShort(x.CorruptorHfid)+", where the latter", hfRelated(x.LureHfid, x.CorruptorHfid)+" lured "+hfShort(x.TargetHfid)+" to a meeting with "+hfShort(x.CorruptorHfid)+", where the latter",
hfShort(x.CorruptorHfid)+" met with "+hfShort(x.TargetHfid))) + hfShort(x.CorruptorHfid)+" met with "+hfShort(x.TargetHfid))) +
util.If(x.FailedJudgmentTest, ", while completely misreading the situation,", "") + " " + method + ". " + fail util.If(x.FailedJudgmentTest, ", while completely misreading the situation,", "") + " " + method + ". " + fail
} }
@ -787,7 +787,7 @@ func (x *HistoricalEventGamble) Html() string {
} }
func (x *HistoricalEventHfAbducted) Html() string { func (x *HistoricalEventHfAbducted) Html() string {
return hf(x.TargetHfid) + " was abducted " + location(x.SiteId, "from", x.SubregionId, "from") + " by " + hf(x.SnatcherHfid) return hf(x.TargetHfid) + " was abducted " + location(x.SiteId, "from", x.SubregionId, "from") + " by " + hfRelated(x.SnatcherHfid, x.TargetHfid)
} }
func (x *HistoricalEventHfAttackedSite) Html() string { func (x *HistoricalEventHfAttackedSite) Html() string {
@ -810,22 +810,22 @@ func (x *HistoricalEventHfConvicted) Html() string { // TODO no_prison_available
r := util.If(x.ConfessedAfterApbArrestEnid != -1, "after being recognized and arrested, ", "") r := util.If(x.ConfessedAfterApbArrestEnid != -1, "after being recognized and arrested, ", "")
switch { switch {
case x.SurveiledCoconspirator: case x.SurveiledCoconspirator:
r += "due to ongoing surveillance on a coconspiratior, " + hf(x.CoconspiratorHfid) + ", as the plot unfolded, " r += "due to ongoing surveillance on a coconspiratior, " + hfRelated(x.CoconspiratorHfid, x.ConvictedHfid) + ", as the plot unfolded, "
case x.SurveiledContact: case x.SurveiledContact:
r += "due to ongoing surveillance on the contact " + hf(x.ContactHfid) + " as the plot unfolded, " r += "due to ongoing surveillance on the contact " + hfRelated(x.ContactHfid, x.ConvictedHfid) + " as the plot unfolded, "
case x.SurveiledConvicted: case x.SurveiledConvicted:
r += "due to ongoing surveillance as the plot unfolded, " r += "due to ongoing surveillance as the plot unfolded, "
case x.SurveiledTarget: case x.SurveiledTarget:
r += "due to ongoing surveillance on the target " + hf(x.TargetHfid) + " as the plot unfolded, " r += "due to ongoing surveillance on the target " + hfRelated(x.TargetHfid, x.ConvictedHfid) + " as the plot unfolded, "
} }
r += hf(x.ConvictedHfid) + util.If(x.ConfessedAfterApbArrestEnid != -1, " confessed and", "") + " was " + util.If(x.WrongfulConviction, "wrongfully ", "") + "convicted " + r += hf(x.ConvictedHfid) + util.If(x.ConfessedAfterApbArrestEnid != -1, " confessed and", "") + " was " + util.If(x.WrongfulConviction, "wrongfully ", "") + "convicted " +
util.If(x.ConvictIsContact, "as a go-between in a conspiracy to commit ", "of ") + x.Crime.String() + " by " + entity(x.ConvicterEnid) util.If(x.ConvictIsContact, "as a go-between in a conspiracy to commit ", "of ") + x.Crime.String() + " by " + entity(x.ConvicterEnid)
if x.FooledHfid != -1 { if x.FooledHfid != -1 {
r += " after " + hf(x.FramerHfid) + " fooled " + hf(x.FooledHfid) + " with fabricated evidence" + r += " after " + hfRelated(x.FramerHfid, x.ConvictedHfid) + " fooled " + hfRelated(x.FooledHfid, x.ConvictedHfid) + " with fabricated evidence" +
util.If(x.PlotterHfid != -1, " at the behest of "+hf(x.PlotterHfid), "") util.If(x.PlotterHfid != -1, " at the behest of "+hfRelated(x.PlotterHfid, x.ConvictedHfid), "")
} }
if x.CorruptConvicterHfid != -1 { if x.CorruptConvicterHfid != -1 {
r += " and the corrupt " + hf(x.CorruptConvicterHfid) + " through the machinations of " + hf(x.PlotterHfid) r += " and the corrupt " + hfRelated(x.CorruptConvicterHfid, x.ConvictedHfid) + " through the machinations of " + hfRelated(x.PlotterHfid, x.ConvictedHfid)
} }
switch { switch {
case x.DeathPenalty: case x.DeathPenalty:
@ -859,14 +859,14 @@ func (x *HistoricalEventHfDisturbedStructure) Html() string {
func (x *HistoricalEventHfDoesInteraction) Html() string { func (x *HistoricalEventHfDoesInteraction) Html() string {
i := strings.Index(x.InteractionAction, " ") i := strings.Index(x.InteractionAction, " ")
if i > 0 { if i > 0 {
return hf(x.DoerHfid) + " " + x.InteractionAction[:i+1] + hf(x.TargetHfid) + x.InteractionAction[i:] + util.If(x.Site != -1, site(x.Site, " in"), "") return hf(x.DoerHfid) + " " + x.InteractionAction[:i+1] + hfRelated(x.TargetHfid, x.DoerHfid) + x.InteractionAction[i:] + util.If(x.Site != -1, site(x.Site, " in"), "")
} else { } else {
return hf(x.DoerHfid) + " UNKNOWN INTERACTION " + hf(x.TargetHfid) + util.If(x.Site != -1, site(x.Site, " in"), "") return hf(x.DoerHfid) + " UNKNOWN INTERACTION " + hfRelated(x.TargetHfid, x.DoerHfid) + util.If(x.Site != -1, site(x.Site, " in"), "")
} }
} }
func (x *HistoricalEventHfEnslaved) Html() string { func (x *HistoricalEventHfEnslaved) Html() string {
return hf(x.SellerHfid) + " sold " + hf(x.EnslavedHfid) + " to " + entity(x.PayerEntityId) + site(x.MovedToSiteId, " in") return hf(x.SellerHfid) + " sold " + hfRelated(x.EnslavedHfid, x.SellerHfid) + " to " + entity(x.PayerEntityId) + site(x.MovedToSiteId, " in")
} }
func (x *HistoricalEventHfEquipmentPurchase) Html() string { // TODO site, structure, region func (x *HistoricalEventHfEquipmentPurchase) Html() string { // TODO site, structure, region
@ -885,31 +885,79 @@ func (x *HistoricalEventHfGainsSecretGoal) Html() string {
return hf(x.Hfid) + " UNKNOWN SECRET GOAL" return hf(x.Hfid) + " UNKNOWN SECRET GOAL"
} }
func (x *HistoricalEventHfInterrogated) Html() string { // TODO func (x *HistoricalEventHfInterrogated) Html() string { // TODO wanted_and_recognized, held_firm_in_interrogation, implicated_hfid
return "UNKNWON HistoricalEventHfInterrogated" return hf(x.TargetHfid) + " was recognized and arrested by " + entity(x.ArrestingEnid) +
". Despite the interrogation by " + hfRelated(x.InterrogatorHfid, x.TargetHfid) + ", " + hfShort(x.TargetHfid) + " refused to reveal anything and was released"
} }
func (x *HistoricalEventHfLearnsSecret) Html() string { return "UNKNWON HistoricalEventHfLearnsSecret" } func (x *HistoricalEventHfLearnsSecret) Html() string {
func (x *HistoricalEventHfNewPet) Html() string { return "UNKNWON HistoricalEventHfNewPet" } if x.ArtifactId != -1 {
return hf(x.StudentHfid) + " learned " + x.SecretText.String() + " from " + artifact(x.ArtifactId)
} else {
return hf(x.TeacherHfid) + " taught " + hfRelated(x.StudentHfid, x.TeacherHfid) + " " + x.SecretText.String()
}
}
func (x *HistoricalEventHfNewPet) Html() string {
return hf(x.GroupHfid) + " tamed " + articled(x.Pets) + location(x.SiteId, " of", x.SubregionId, " of")
}
func (x *HistoricalEventHfPerformedHorribleExperiments) Html() string { func (x *HistoricalEventHfPerformedHorribleExperiments) Html() string {
return "UNKNWON HistoricalEventHfPerformedHorribleExperiments" return hf(x.GroupHfid) + " performed horrible experiments " + place(x.StructureId, x.SiteId, " in", x.SubregionId, " in")
} }
func (x *HistoricalEventHfPrayedInsideStructure) Html() string { func (x *HistoricalEventHfPrayedInsideStructure) Html() string {
return "UNKNWON HistoricalEventHfPrayedInsideStructure" return hf(x.HistFigId) + " prayed " + siteStructure(x.SiteId, x.StructureId, "inside")
} }
func (x *HistoricalEventHfPreach) Html() string { return "UNKNWON HistoricalEventHfPreach" }
func (x *HistoricalEventHfPreach) Html() string { // relevant site
topic := ""
switch x.Topic {
case HistoricalEventHfPreachTopic_Entity1ShouldLoveEntityTwo:
topic = ", urging love to be shown to "
case HistoricalEventHfPreachTopic_SetEntity1AgainstEntityTwo:
topic = ", inveighing against "
}
return hf(x.SpeakerHfid) + " preaced to " + entity(x.Entity1) + topic + entity(x.Entity2) + site(x.SiteHfid, " in")
}
func (x *HistoricalEventHfProfanedStructure) Html() string { func (x *HistoricalEventHfProfanedStructure) Html() string {
return "UNKNWON HistoricalEventHfProfanedStructure" return hf(x.HistFigId) + " profaned " + siteStructure(x.SiteId, x.StructureId, "")
} }
func (x *HistoricalEventHfRansomed) Html() string { return "UNKNWON HistoricalEventHfRansomed" }
func (x *HistoricalEventHfReachSummit) Html() string { return "UNKNWON HistoricalEventHfReachSummit" } func (x *HistoricalEventHfRansomed) Html() string {
return hf(x.RansomerHfid) + " ransomed " + hfRelated(x.RansomedHfid, x.RansomerHfid) + " to " + util.If(x.PayerHfid != -1, hfRelated(x.PayerHfid, x.RansomerHfid), entity(x.PayerEntityId)) +
". " + hfShort(x.RansomedHfid) + " was sent " + site(x.MovedToSiteId, "to")
}
func (x *HistoricalEventHfReachSummit) Html() string { // TODO
return "UNKNWON HistoricalEventHfReachSummit"
}
func (x *HistoricalEventHfRecruitedUnitTypeForEntity) Html() string { func (x *HistoricalEventHfRecruitedUnitTypeForEntity) Html() string {
return "UNKNWON HistoricalEventHfRecruitedUnitTypeForEntity" return hf(x.Hfid) + " recruited " + x.UnitType.String() + "s into " + entity(x.EntityId) + location(x.SiteId, " in", x.SubregionId, " in")
} }
func (x *HistoricalEventHfRelationshipDenied) Html() string { func (x *HistoricalEventHfRelationshipDenied) Html() string {
return "UNKNWON HistoricalEventHfRelationshipDenied" r := hf(x.SeekerHfid)
switch x.Relationship {
case HistoricalEventHfRelationshipDeniedRelationship_Apprentice:
r += " was denied an apprenticeship under "
default:
r += " was denied an UNKNOWN RELATIONSHIP with "
}
r += hf(x.TargetHfid)
switch x.Reason {
case HistoricalEventHfRelationshipDeniedReason_Jealousy:
r += " due to " + util.If(x.ReasonId != x.TargetHfid, hfRelated(x.ReasonId, x.SeekerHfid), "the latter") + "'s jealousy"
case HistoricalEventHfRelationshipDeniedReason_PrefersWorkingAlone:
r += " as " + util.If(x.ReasonId != x.TargetHfid, hfRelated(x.ReasonId, x.SeekerHfid), "the latter") + " prefers to work alone"
}
return r
} }
func (x *HistoricalEventHfReunion) Html() string { return "UNKNWON HistoricalEventHfReunion" }
func (x *HistoricalEventHfReunion) Html() string {
return hf(x.Group1Hfid) + " was reunited with " + hfListRelated(x.Group2Hfid, x.Group1Hfid) + location(x.SiteId, " in", x.SubregionId, " in")
}
func (x *HistoricalEventHfRevived) Html() string { return "UNKNWON HistoricalEventHfRevived" } func (x *HistoricalEventHfRevived) Html() string { return "UNKNWON HistoricalEventHfRevived" }
func (x *HistoricalEventHfSimpleBattleEvent) Html() string { func (x *HistoricalEventHfSimpleBattleEvent) Html() string {
return "UNKNWON HistoricalEventHfSimpleBattleEvent" return "UNKNWON HistoricalEventHfSimpleBattleEvent"

View File

@ -37,6 +37,20 @@ func (hf *HistoricalFigure) Male() bool {
return hf.Sex == 1 || hf.Caste == "MALE" return hf.Sex == 1 || hf.Caste == "MALE"
} }
func (hf *HistoricalFigure) Pronoun() string {
if hf.Female() {
return "she"
}
return "he"
}
func (hf *HistoricalFigure) PossesivePronoun() string {
if hf.Female() {
return "her"
}
return "his"
}
func (hf *HistoricalFigure) FirstName() string { func (hf *HistoricalFigure) FirstName() string {
return strings.Split(hf.Name_, " ")[0] return strings.Split(hf.Name_, " ")[0]
} }
@ -134,24 +148,36 @@ func hfShort(id int) string {
return "UNKNOWN HISTORICAL FIGURE" return "UNKNOWN HISTORICAL FIGURE"
} }
func hfRelated(id, to int) string {
if x, ok := world.HistoricalFigures[id]; ok {
if t, ok := world.HistoricalFigures[to]; ok {
if y, ok := util.Find(t.HfLink, func(l *HfLink) bool { return l.Hfid == id }); ok {
return fmt.Sprintf(`%s %s <a class="hf" href="/hf/%d">%s</a>`, t.PossesivePronoun(), y.LinkType, x.Id(), util.Title(x.Name()))
}
}
return fmt.Sprintf(`the %s <a class="hf" href="/hf/%d">%s</a>`, x.Race+util.If(x.Deity, " deity", "")+util.If(x.Force, " force", ""), x.Id(), util.Title(x.Name()))
}
return "UNKNOWN HISTORICAL FIGURE"
}
func hfList(ids []int) string { func hfList(ids []int) string {
return andList(util.Map(ids, hf)) return andList(util.Map(ids, hf))
} }
func hfListRelated(ids []int, to int) string {
return andList(util.Map(ids, func(id int) string { return hfRelated(id, to) }))
}
func pronoun(id int) string { func pronoun(id int) string {
if x, ok := world.HistoricalFigures[id]; ok { if x, ok := world.HistoricalFigures[id]; ok {
if x.Female() { return x.Pronoun()
return "she"
}
} }
return "he" return "he"
} }
func posessivePronoun(id int) string { func posessivePronoun(id int) string {
if x, ok := world.HistoricalFigures[id]; ok { if x, ok := world.HistoricalFigures[id]; ok {
if x.Female() { return x.PossesivePronoun()
return "her"
}
} }
return "his" return "his"
} }
@ -201,6 +227,16 @@ func location(siteId int, sitePrefix string, regionId int, regionPrefix string)
return "" return ""
} }
func place(structureId, siteId int, sitePrefix string, regionId int, regionPrefix string) string {
if siteId != -1 {
return siteStructure(siteId, structureId, sitePrefix)
}
if regionId != -1 {
return regionPrefix + " " + region(regionId)
}
return ""
}
func identity(id int) string { func identity(id int) string {
if x, ok := world.Identities[id]; ok { if x, ok := world.Identities[id]; ok {
return fmt.Sprintf(`<a class="identity" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name())) return fmt.Sprintf(`<a class="identity" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name()))

View File

@ -5,25 +5,11 @@
"HistoricalEventAddHfSiteLink": { "HistoricalEventAddHfSiteLink": {
"Site": "SiteId" "Site": "SiteId"
}, },
"HistoricalEventAgreementMade": {
"Destination": "SiteId",
"Site": "SiteId",
"Source": "SiteId"
},
"HistoricalEventAgreementRejected": {
"Destination": "SiteId",
"Site": "SiteId",
"Source": "SiteId"
},
"HistoricalEventDiplomatLost": { "HistoricalEventDiplomatLost": {
"Entity": "SiteId",
"Involved": "SiteId",
"Site": "SiteId" "Site": "SiteId"
}, },
"HistoricalEventHfDied": { "HistoricalEventHfDied": {
"ItemSubtype": "Cause", "ShooterArtifactId": "FeatureLayerId"
"Mat": "Cause",
"ShooterMat": "Cause"
}, },
"HistoricalEventPeaceAccepted": { "HistoricalEventPeaceAccepted": {
"Site": "SiteId" "Site": "SiteId"

View File

@ -77,3 +77,16 @@ func Map[U, V any](list []U, mapper func(U) V) []V {
} }
return newList return newList
} }
type Identifiable interface {
Id() int
}
func Find[U any](list []*U, predicate func(*U) bool) (*U, bool) {
for _, x := range list {
if predicate(x) {
return x, true
}
}
return nil, false
}