Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using System.Collections.Generic;
using Sandbox.ModAPI;
using VRage.Game.ModAPI;
using VRage.Utils;

namespace SC.SUGMA.API
{
internal class FactionIconApi
{
private static FactionIconApi I;

private List<MyStringId> _icons = new List<MyStringId>();
private List<MyStringId> _iconsSmall = new List<MyStringId>();

private FactionIconApi()
{
foreach (var mod in MyAPIGateway.Session.Mods)
{
if (MyAPIGateway.Utilities.FileExistsInModLocation("Data\\SC_FactionIcons.txt", mod))
{
string result;
using (var icoReader = MyAPIGateway.Utilities.ReadFileInModLocation("Data\\SC_FactionIcons.txt", mod))
{
result = icoReader.ReadToEnd();
}

string[] split = result.Split('\n');
_icons.EnsureCapacity(split.Length);
foreach (var icon in split)
{
if (string.IsNullOrWhiteSpace(icon))
continue;

string trim = icon.Trim();

if (trim.EndsWith("_small"))
_iconsSmall.Add(MyStringId.GetOrCompute(trim));
else
_icons.Add(MyStringId.GetOrCompute(trim));
}

}
}

Log.Info("Found faction icons:");
foreach (var icon in _icons)
{
Log.Info($"- {icon}");
}
foreach (var icon in _iconsSmall)
{
Log.Info($"- {icon}");
}
}

public static void Init()
{
I = new FactionIconApi();
}

public static void Unload()
{
I = null;
}

public static bool TryGetIcon(IMyFaction faction, bool small, out MyStringId hash)
{
string facIdLower = faction.Tag.ToLower();
foreach (var icon in (small ? I._iconsSmall : I._icons))
{
string lower = icon.String.ToLower();
Log.Info($"{facIdLower} {lower} {lower.StartsWith(facIdLower)}");

if (lower.StartsWith(facIdLower))
{
hash = icon;
return true;
}
}

hash = faction.FactionIcon ?? MyStringId.NullOrEmpty;
return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,13 @@ public void MatchEnded(IMyFaction winner)
Color = HudConstants.HudBackgroundColor
};

var discard = new FactionIcon(winner, _winnerLabel, false)
{
ParentAlignment = ParentAlignments.Bottom,
Size = new Vector2(64, 64),
Padding = new Vector2(4, 0)
};

_winnerLabel.TextBoard.SetFormatting(GlyphFormat.White.WithColor(Color.Red).WithSize(3)
.WithAlignment(TextAlignment.Center));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using RichHudFramework.UI;
using SC.SUGMA.GameState;
using SC.SUGMA.Utilities;
using VRage.Game.ModAPI;
using VRageMath;
Expand All @@ -13,6 +14,7 @@ internal class EliminationHud_TeamBanner : HudElementBase
private readonly LabelBox _factionLabel;
private readonly TexturedBox[] _ticketDividers;
private LabelBox _ticketsLabel;
private readonly FactionIcon _factionIcon;

public IMyFaction Faction;
public int StartShipCount;
Expand Down Expand Up @@ -58,6 +60,13 @@ public EliminationHud_TeamBanner(HudParentBase parent, IMyFaction faction, int s
FitToTextElement = false,
Format = new GlyphFormat(Color.White, TextAlignment.Center)
};
_factionIcon = new FactionIcon(faction, this, true)
{
DimAlignment = DimAlignments.Height,
ParentAlignment = (isLeftAligned ? ParentAlignments.Left : ParentAlignments.Right),
Size = new Vector2(BaseHeight, BaseHeight),
Padding = new Vector2(4, 0)
};
//_ticketsLabel = new LabelBox(this)
//{
// Color = Color.DarkGray,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ internal class KOTHHud_Window : WindowBase

private readonly KOTHGamemode _gamemode;
private readonly ElmHud_Window _windowBase;
private readonly FactionIcon[] _icons;

private TexturedBox _captureIndicator;

Expand Down Expand Up @@ -88,6 +89,23 @@ public KOTHHud_Window(HudParentBase parent, KOTHGamemode gamemode) : base(parent
{
banner.Visible = false;
}

_icons = new FactionIcon[gamemode.TrackedFactions.Count];
int idx = 0;
foreach (var fac in gamemode.TrackedFactions.Keys)
{
var newBanner = new FactionIcon(fac, _windowBase, true)
{
ParentAlignment =
ParentAlignments.Inner |
(idx % 2 == 0 ? ParentAlignments.Left : ParentAlignments.Right) |
ParentAlignments.Top,

Offset = new Vector2(0, (int)-Math.Floor(idx / 2f) * (EliminationHud_TeamBanner.BaseHeight + 5))
};
_icons[idx] = newBanner;
idx++;
}
}

public void Update()
Expand Down Expand Up @@ -133,6 +151,9 @@ public void MatchEnded(IMyFaction winner)
_captureIndicator.Visible = false;
_captureLabel.Visible = false;

foreach (var icon in _icons)
icon.Unregister();

_windowBase._winnerLabel.Visible = false;
_windowBase._winnerLabel = new LabelBox(_windowBase._timerLabel)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using RichHudFramework.UI;
using RichHudFramework.UI.Rendering;
using SC.SUGMA.API;
using SC.SUGMA.Utilities;
using VRage.Game.ModAPI;
using VRage.Utils;
using VRageMath;

namespace SC.SUGMA.GameState
{
internal class FactionIcon : TexturedBox
{
public FactionIcon(IMyFaction faction, HudParentBase parent, bool small) : base(parent)
{
if (faction == null)
return;

if (!faction.FactionIcon.HasValue)
throw new Exception("Invalid faction icon!");

MyStringId iconId;
if (!FactionIconApi.TryGetIcon(faction, small, out iconId))
{
Color = faction.CustomColor.ColorMaskToRgb();
}

this.Material = new Material(iconId, small ? new Vector2(64, 64) : new Vector2(512, 512));
Log.Info($"{faction.Tag} faction icon is: {iconId.String}");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ public override void LoadData()
ShareTrackApi.Init(ModContext, FinishInit);
RichHudClient.Init(DebugName, () => { Log.Info("RichHudClient registered."); }, null);
ShieldApi.Load();
FactionIconApi.Init();
}
catch (Exception ex)
{
Expand Down Expand Up @@ -226,6 +227,7 @@ protected override void UnloadData()
CommandHandler.Close();
ShareTrackApi.UnloadData();
ShieldApi.Unload();
FactionIconApi.Unload();
}
catch (Exception ex)
{
Expand Down
13 changes: 13 additions & 0 deletions Gamemode Mods/StarCore SUGMA Gamemodes/Data/Textures_SUGMA.sbc
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,19 @@
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\circle.dds</Texture>
</TransparentMaterial>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>REDIcon</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\Chevron.dds</Texture>
</TransparentMaterial>

</TransparentMaterials>
</Definitions>
32 changes: 32 additions & 0 deletions Visual Mods/SC_FactionIcons/Data/MACIcon.sbc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransparentMaterials>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>MACIcon</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\MACIcon.dds</Texture>
</TransparentMaterial>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>MACIcon_small</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\MACIcon_small.dds</Texture>
</TransparentMaterial>

</TransparentMaterials>
</Definitions>
32 changes: 32 additions & 0 deletions Visual Mods/SC_FactionIcons/Data/MCEIcon.sbc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransparentMaterials>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>MCEIcon</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\MCEIcon.dds</Texture>
</TransparentMaterial>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>MCEIcon_small</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\MCEIcon_small.dds</Texture>
</TransparentMaterial>

</TransparentMaterials>
</Definitions>
13 changes: 13 additions & 0 deletions Visual Mods/SC_FactionIcons/Data/SC_FactionIcons.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
TstIcon
TstIcon_small

TE0Icon
TE0Icon_small
MCEIcon
MCEIcon_small
SIIIcon
SIIIcon_small
TECIcon
TECIcon_small
MACIcon
MACIcon_small
32 changes: 32 additions & 0 deletions Visual Mods/SC_FactionIcons/Data/SIIIcon.sbc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransparentMaterials>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>SIIIcon</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\SIIIcon.dds</Texture>
</TransparentMaterial>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>SIIIcon_small</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\SIIIcon_small.dds</Texture>
</TransparentMaterial>

</TransparentMaterials>
</Definitions>
32 changes: 32 additions & 0 deletions Visual Mods/SC_FactionIcons/Data/TE0Icon.sbc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransparentMaterials>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>TE0Icon</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\TE0Icon.dds</Texture>
</TransparentMaterial>

<TransparentMaterial>
<Id>
<TypeId>TransparentMaterialDefinition</TypeId>
<SubtypeId>TE0Icon_small</SubtypeId>
</Id>
<AlphaMistingEnable>false</AlphaMistingEnable>
<AlphaSaturation>1</AlphaSaturation>
<CanBeAffectedByOtherLights>false</CanBeAffectedByOtherLights>
<IgnoreDepth>false</IgnoreDepth>
<SoftParticleDistanceScale>0.1</SoftParticleDistanceScale>
<Texture>Textures\TE0Icon_small.dds</Texture>
</TransparentMaterial>

</TransparentMaterials>
</Definitions>
Loading
Loading