Skip to content

Commit 6cef428

Browse files
committed
Re-added PlayerDefinition config UI
1 parent 39f72b9 commit 6cef428

4 files changed

Lines changed: 193 additions & 0 deletions

File tree

Common/Configs/Config.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.ComponentModel;
44
using ModReloader.Common.Configs.ConfigElements.ModsConfigElements;
55
using ModReloader.Common.Configs.ConfigElements.PlayerAndWorld;
6+
using ModReloader.Common.Configs.ConfigElements.PlayerAndWorldNew;
67
using ModReloader.Core.Features.MainMenuFeatures;
78
using ModReloader.Core.Features.Reload;
89
using Terraria.ModLoader.Config;
@@ -24,6 +25,9 @@ public class Config : ModConfig
2425
[DefaultValue("")]
2526
public string Player; // player index in Main.PlayerList
2627

28+
[CustomModConfigItem(typeof(PlayerDefinitionElement))]
29+
public PlayerDefinition PlayerTest;
30+
2731
[CustomModConfigItem(typeof(WorldIndexSliderElement))]
2832
public string World; // world index in Main.WorldList
2933

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using ModReloader.Core.Features.Reload;
2+
using Terraria.ModLoader.Config;
3+
4+
5+
namespace ModReloader.Common.Configs.ConfigElements.PlayerAndWorldNew;
6+
7+
public class PlayerDefinition : EntityDefinition
8+
{
9+
public override int Type => Utilities.FindPlayerId(Name);
10+
11+
public override bool IsUnloaded
12+
=> Type <= -1 || Name == null;
13+
14+
15+
public PlayerDefinition() : base()
16+
{
17+
18+
}
19+
20+
public PlayerDefinition(int type) : base(Utilities.FindPlayer(type).Path)
21+
{
22+
23+
}
24+
25+
public PlayerDefinition(string path) : base()
26+
{
27+
Name = path;
28+
}
29+
public override string ToString()
30+
{
31+
return $"{(Utilities.FindPlayer(Name) != null ? Utilities.FindPlayer(Name).Name : "null")}";
32+
}
33+
}
34+
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using ModReloader.Core.Features.Reload;
2+
using System;
3+
using System.Collections.Generic;
4+
using Terraria.ModLoader.Config.UI;
5+
6+
namespace ModReloader.Common.Configs.ConfigElements.PlayerAndWorldNew;
7+
8+
public class PlayerDefinitionElement : DefinitionElement<PlayerDefinition>
9+
{
10+
protected override DefinitionOptionElement<PlayerDefinition> CreateDefinitionOptionElement() => new PlayerDefinitionOptionElement(Value);
11+
12+
protected override List<DefinitionOptionElement<PlayerDefinition>> CreateDefinitionOptionElementList()
13+
{
14+
var options = new List<DefinitionOptionElement<PlayerDefinition>>();
15+
16+
Main.LoadPlayers();
17+
18+
for (int i = 0; i < Main.PlayerList.Count; i++)
19+
{
20+
Log.Info("Creating PlayerDefinition for index: " + i);
21+
// The first Player from PlayerID is null, so it's better to create an empty PlayerDefinition.
22+
var PlayerDefinition = i == -1 ? new PlayerDefinition() : new PlayerDefinition(i);
23+
var optionElement = new PlayerDefinitionOptionElement(PlayerDefinition, OptionScale);
24+
optionElement.OnLeftClick += (a, b) =>
25+
{
26+
Value = optionElement.Definition;
27+
UpdateNeeded = true;
28+
SelectionExpanded = false;
29+
};
30+
options.Add(optionElement);
31+
}
32+
33+
return options;
34+
}
35+
36+
protected override List<DefinitionOptionElement<PlayerDefinition>> GetPassedOptionElements()
37+
{
38+
var passed = new List<DefinitionOptionElement<PlayerDefinition>>();
39+
40+
foreach (var option in Options)
41+
{
42+
// Should this be the localized Player name?
43+
if (!Utilities.FindPlayer(option.Type).Name.Contains(ChooserFilter.CurrentString, StringComparison.OrdinalIgnoreCase))
44+
continue;
45+
46+
string modname = "Terraria";
47+
48+
if (modname.IndexOf(ChooserFilterMod.CurrentString, StringComparison.OrdinalIgnoreCase) == -1)
49+
continue;
50+
51+
passed.Add(option);
52+
}
53+
return passed;
54+
}
55+
56+
public override void OnBind()
57+
{
58+
base.OnBind();
59+
ChooserFilterMod.Parent.Remove();
60+
ChooserFilterMod.Parent.Deactivate();
61+
}}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
using Microsoft.Xna.Framework.Graphics;
2+
using ModReloader.Core.Features.Reload;
3+
using Terraria.ModLoader.Config.UI;
4+
using Terraria.UI;
5+
6+
namespace ModReloader.Common.Configs.ConfigElements.PlayerAndWorldNew;
7+
8+
public class PlayerDefinitionOptionElement : DefinitionOptionElement<PlayerDefinition>
9+
{
10+
public PlayerDefinitionOptionElement(PlayerDefinition definition, float scale = 0.5f) : base(definition, scale)
11+
{
12+
OverflowHidden = true;
13+
}
14+
15+
public override void SetItem(PlayerDefinition definition)
16+
{
17+
base.SetItem(definition);
18+
Tooltip = definition?.ToString();
19+
}
20+
21+
private bool _animated;
22+
private int _animationCounter;
23+
24+
public override void Update(GameTime gameTime)
25+
{
26+
OverflowHidden = true;
27+
base.Update(gameTime);
28+
29+
if (Definition?.Name is string name && Utilities.FindPlayer(name)?.Player is Player player)
30+
{
31+
using (new Main.CurrentPlayerOverride(player))
32+
{
33+
_animated = IsMouseHovering;
34+
35+
if (_animated)
36+
{
37+
_animationCounter++;
38+
int frame = (int)(Main.GlobalTimeWrappedHourly / 0.07f) % 14 + 6;
39+
int y = frame * 56;
40+
player.bodyFrame.Y = player.legFrame.Y = player.headFrame.Y = y;
41+
player.WingFrame(wingFlap: false);
42+
}
43+
else
44+
{
45+
player.bodyFrame.Y = player.legFrame.Y = player.headFrame.Y = 0;
46+
}
47+
48+
player.PlayerFrame();
49+
}
50+
}
51+
}
52+
53+
protected override void DrawSelf(SpriteBatch spriteBatch)
54+
{
55+
// Positions
56+
CalculatedStyle dimensions = GetInnerDimensions();
57+
Vector2 position = dimensions.Position();
58+
Vector2 size = BackgroundTexture.Size() * Scale;
59+
Rectangle destination = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y);
60+
61+
// Draw background
62+
spriteBatch.End();
63+
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp,
64+
DepthStencilState.Default, RasterizerState.CullNone, null, Main.UIScaleMatrix);
65+
spriteBatch.Draw(BackgroundTexture.Value, destination, Color.White);
66+
spriteBatch.End();
67+
68+
// Restart spritebatch
69+
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp,
70+
DepthStencilState.Default, RasterizerState.CullNone, null, Main.UIScaleMatrix);
71+
72+
// Draw player
73+
if (Definition?.Name is string name && Utilities.FindPlayer(name)?.Player is Player player)
74+
{
75+
player.direction = 1; // facing right
76+
//player.mount.SetMount(0, player);
77+
//player.heldProj = -1;
78+
79+
using (new Main.CurrentPlayerOverride(player))
80+
{
81+
Vector2 drawPos = position + size / 2f + Main.screenPosition;
82+
Main.PlayerRenderer.DrawPlayer(Main.Camera, player, drawPos, 0f, Vector2.Zero);
83+
}
84+
}
85+
86+
// Restart spritebatch
87+
spriteBatch.End();
88+
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp,
89+
DepthStencilState.Default, RasterizerState.CullNone, null, Main.UIScaleMatrix);
90+
91+
if (IsMouseHovering)
92+
UIModConfig.Tooltip = Tooltip;
93+
}
94+
}

0 commit comments

Comments
 (0)