Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag.xml
===================================================================
--- binaries/data/mods/public/art/actors/props/special/common/waypoint_flag.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
-
-
-
-
- props/waypoint_flag.dae
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- basic_trans.xml
-
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_athen.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_athen.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_brit.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_brit.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_cart.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_cart.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_gaul.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_gaul.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_iber.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_iber.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_kush.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_kush.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_mace.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_mace.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_maur.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_maur.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_pers.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_pers.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_ptol.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_ptol.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_rome.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_rome.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_sele.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_sele.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_spart.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/art/actors/props/special/common/waypoint_flag_spart.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ props/waypoint_flag.dae
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoint.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/special/rallypoint.xml
+++ binaries/data/mods/public/simulation/templates/special/rallypoint.xml
@@ -1,9 +1,13 @@
+
+ Rally point flag
+ true
+
true
- props/special/common/waypoint_flag.xml
+ props/special/common/waypoint_flag_{civ}.xml
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/athen.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/athen.xml
@@ -0,0 +1,6 @@
+
+
+
+ athen
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/brit.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/brit.xml
@@ -0,0 +1,6 @@
+
+
+
+ brit
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/cart.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/cart.xml
@@ -0,0 +1,6 @@
+
+
+
+ cart
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/gaul.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/gaul.xml
@@ -0,0 +1,6 @@
+
+
+
+ gaul
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/iber.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/iber.xml
@@ -0,0 +1,6 @@
+
+
+
+ iber
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/kush.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/kush.xml
@@ -0,0 +1,6 @@
+
+
+
+ kush
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/mace.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/mace.xml
@@ -0,0 +1,6 @@
+
+
+
+ mace
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/maur.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/maur.xml
@@ -0,0 +1,6 @@
+
+
+
+ maur
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/pers.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/pers.xml
@@ -0,0 +1,6 @@
+
+
+
+ pers
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/ptol.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/ptol.xml
@@ -0,0 +1,6 @@
+
+
+
+ ptol
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/rome.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/rome.xml
@@ -0,0 +1,6 @@
+
+
+
+ rome
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/sele.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/sele.xml
@@ -0,0 +1,6 @@
+
+
+
+ sele
+
+
Index: binaries/data/mods/public/simulation/templates/special/rallypoints/spart.xml
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/templates/special/rallypoints/spart.xml
@@ -0,0 +1,6 @@
+
+
+
+ spart
+
+
Index: binaries/data/mods/public/simulation/templates/template_structure.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure.xml
+++ binaries/data/mods/public/simulation/templates/template_structure.xml
@@ -103,7 +103,7 @@
- special/rallypoint
+ special/rallypoints/{civ}
art/textures/misc/rallypoint_line.png
art/textures/misc/rallypoint_line_mask.png
0.25
Index: binaries/data/mods/public/simulation/templates/template_territory_pull.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_territory_pull.xml
+++ binaries/data/mods/public/simulation/templates/template_territory_pull.xml
@@ -34,7 +34,7 @@
false
true
- props/special/common/waypoint_flag.xml
+ props/special/common/waypoint_flag_factions.xml
true
Index: source/simulation2/components/CCmpRallyPointRenderer.cpp
===================================================================
--- source/simulation2/components/CCmpRallyPointRenderer.cpp
+++ source/simulation2/components/CCmpRallyPointRenderer.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Wildfire Games.
+/* Copyright (C) 2020 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -17,6 +17,9 @@
#include "precompiled.h"
#include "CCmpRallyPointRenderer.h"
+#include "ICmpIdentity.h"
+
+#include
std::string CCmpRallyPointRenderer::GetSchema()
{
@@ -221,11 +224,28 @@
if (m_MarkerEntityIds[i] == INVALID_ENTITY)
{
// No marker exists yet, create one first
- CComponentManager& componentMgr = GetSimContext().GetComponentManager();
-
// Allocate a new entity for the marker
if (!m_MarkerTemplate.empty())
{
+ // We should not rely on the Identity, as the building may be captured, and the rally point
+ // needs to reflect the current player.
+ CmpPtr cmpOwnership(GetEntityHandle());
+ if (cmpOwnership)
+ {
+ player_id_t ownerId = cmpOwnership->GetOwner();
+ if (ownerId != INVALID_PLAYER)
+ {
+ CmpPtr cmpPlayerManager(GetSystemEntity());
+ if (cmpPlayerManager)
+ {
+ CmpPtr cmpPlayer(GetSimContext(), cmpPlayerManager->GetPlayerByID(ownerId));
+ if (cmpPlayer)
+ boost::replace_all(base, L"{civ}", cmpPlayer->GetCiv());
+ }
+ }
+ }
+
+ CComponentManager& componentMgr = GetSimContext().GetComponentManager();
m_MarkerEntityIds[i] = componentMgr.AllocateNewLocalEntity();
if (m_MarkerEntityIds[i] != INVALID_ENTITY)
m_MarkerEntityIds[i] = componentMgr.AddEntity(m_MarkerTemplate, m_MarkerEntityIds[i]);
@@ -259,19 +279,6 @@
continue;
m_LastOwner = ownerId;
- CmpPtr cmpPlayerManager(GetSystemEntity());
- // cmpPlayerManager should not be null as long as this method is called on-demand instead of at Init() time
- // (we can't rely on component initialization order in Init())
- if (!cmpPlayerManager)
- continue;
-
- CmpPtr cmpPlayer(GetSimContext(), cmpPlayerManager->GetPlayerByID(ownerId));
- if (!cmpPlayer)
- continue;
-
- CmpPtr cmpVisualActor(GetSimContext(), m_MarkerEntityIds[i]);
- if (cmpVisualActor)
- cmpVisualActor->SetVariant("civ", CStrW(cmpPlayer->GetCiv()).ToUTF8());
}
m_LastMarkerCount = m_RallyPoints.size() - 1;
}
Index: source/simulation2/components/CCmpVisualActor.cpp
===================================================================
--- source/simulation2/components/CCmpVisualActor.cpp
+++ source/simulation2/components/CCmpVisualActor.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Wildfire Games.
+/* Copyright (C) 2020 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -26,6 +26,8 @@
#include "ICmpIdentity.h"
#include "ICmpUnitRenderer.h"
#include "ICmpOwnership.h"
+#include "ICmpPlayer.h"
+#include "ICmpPlayerManager.h"
#include "ICmpPosition.h"
#include "ICmpTemplateManager.h"
#include "ICmpTerrain.h"
@@ -51,6 +53,8 @@
#include "ps/GameSetup/Config.h"
#include "renderer/Scene.h"
+#include
+
class CCmpVisualActor : public ICmpVisual
{
public:
@@ -467,7 +471,7 @@
if (!m_Unit || !m_Unit->GetAnimation() || !m_Unit->GetID())
return;
- m_Unit->GetAnimation()->SetAnimationState(m_AnimName, m_AnimOnce, m_AnimSpeed.ToFloat(), m_AnimDesync.ToFloat(), m_SoundGroup.c_str());
+ m_Unit->GetAnimation()->SetAnimationState(m_AnimName, m_AnimOnce, m_AnimSpeed.ToFloat(), m_AnimDesync.ToFloat(), m_SoundGroup.c_str());
}
virtual void SelectMovementAnimation(const std::string& name, fixed speed)
@@ -545,7 +549,7 @@
}
private:
- // Replace {phenotype} with the correct value in m_ActorName
+ // Replace {phenotype} and {civ} with the correct value in m_ActorName
void ParseActorName(std::wstring base);
/// Helper function shared by component init and actor reloading
@@ -568,14 +572,28 @@
void CCmpVisualActor::ParseActorName(std::wstring base)
{
CmpPtr cmpIdentity(GetEntityHandle());
- const std::wstring pattern = L"{phenotype}";
if (cmpIdentity)
{
- size_t pos = base.find(pattern);
- while (pos != std::string::npos)
+ boost::replace_all(base, L"{phenotype}", cmpIdentity->GetPhenotype());
+ boost::replace_all(base, L"{civ}", cmpIdentity->GetCiv());
+ }
+ else
+ {
+ // Template might have no civ but might be owned by something that does.
+ CmpPtr cmpOwnership(GetEntityHandle());
+ if (cmpOwnership)
{
- base.replace(pos, pattern.size(), cmpIdentity->GetPhenotype());
- pos = base.find(pattern, pos + pattern.size());
+ player_id_t ownerId = cmpOwnership->GetOwner();
+ if (ownerId != INVALID_PLAYER)
+ {
+ CmpPtr cmpPlayerManager(GetSystemEntity());
+ if (cmpPlayerManager)
+ {
+ CmpPtr cmpPlayer(GetSimContext(), cmpPlayerManager->GetPlayerByID(ownerId));
+ if (cmpPlayer)
+ boost::replace_all(base, L"{civ}", cmpPlayer->GetCiv());
+ }
+ }
}
}
Index: source/simulation2/components/ICmpIdentity.h
===================================================================
--- source/simulation2/components/ICmpIdentity.h
+++ source/simulation2/components/ICmpIdentity.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Wildfire Games.
+/* Copyright (C) 2020 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -31,6 +31,8 @@
virtual std::wstring GetPhenotype() = 0;
+ virtual std::wstring GetCiv() = 0;
+
DECLARE_INTERFACE_TYPE(Identity)
};
Index: source/simulation2/components/ICmpIdentity.cpp
===================================================================
--- source/simulation2/components/ICmpIdentity.cpp
+++ source/simulation2/components/ICmpIdentity.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Wildfire Games.
+/* Copyright (C) 2020 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -40,6 +40,11 @@
{
return m_Script.Call("GetPhenotype");
}
+
+ virtual std::wstring GetCiv()
+ {
+ return m_Script.Call("GetCiv");
+ }
};
REGISTER_COMPONENT_SCRIPT_WRAPPER(IdentityScripted)
Index: source/tools/entity/checkrefs.pl
===================================================================
--- source/tools/entity/checkrefs.pl
+++ source/tools/entity/checkrefs.pl
@@ -138,6 +138,7 @@
if ($ent->{Entity}{VisualActor} and $ent->{Entity}{VisualActor}{Actor})
{
my $phenotypes = $ent->{Entity}{Identity}{Phenotype}{' content'} || "default";
+ my $civ = $ent->{Entity}{Identity}{Civ}{' content'} || "athen";
my @phenotypes = split /\s/,$phenotypes;
for my $phenotype (@phenotypes)
@@ -145,6 +146,7 @@
# See simulation2/components/CCmpVisualActor.cpp and Identity.js for explanation.
my $actorPath = $ent->{Entity}{VisualActor}{Actor}{' content'};
$actorPath =~ s/{phenotype}/$phenotype/g;
+ $actorPath =~ s/{civ}/$civ/g;
push @deps, [ $path, "art/actors/" . $actorPath ];
}