terraria-source-code/GameContent/Creative/CreativePowers.cs
2021-10-26 12:45:26 -04:00

1210 lines
48 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Creative.CreativePowers
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using ReLogic.Content;
using System;
using System.Collections.Generic;
using System.IO;
using Terraria.GameContent.NetModules;
using Terraria.GameContent.UI.Elements;
using Terraria.GameInput;
using Terraria.Initializers;
using Terraria.Localization;
using Terraria.Net;
using Terraria.UI;
namespace Terraria.GameContent.Creative
{
public class CreativePowers
{
public abstract class APerPlayerTogglePower : ICreativePower, IOnPlayerJoining
{
internal string _powerNameKey;
internal Point _iconLocation;
internal bool _defaultToggleState;
private bool[] _perPlayerIsEnabled = new bool[(int) byte.MaxValue];
public ushort PowerId { get; set; }
public string ServerConfigName { get; set; }
public PowerPermissionLevel CurrentPermissionLevel { get; set; }
public PowerPermissionLevel DefaultPermissionLevel { get; set; }
public bool IsEnabledForPlayer(int playerIndex) => this._perPlayerIsEnabled.IndexInRange<bool>(playerIndex) && this._perPlayerIsEnabled[playerIndex];
public void DeserializeNetMessage(BinaryReader reader, int userId)
{
switch ((CreativePowers.APerPlayerTogglePower.SubMessageType) reader.ReadByte())
{
case CreativePowers.APerPlayerTogglePower.SubMessageType.SyncEveryone:
this.Deserialize_SyncEveryone(reader, userId);
break;
case CreativePowers.APerPlayerTogglePower.SubMessageType.SyncOnePlayer:
int playerIndex = (int) reader.ReadByte();
bool state = reader.ReadBoolean();
if (Main.netMode == 2)
{
playerIndex = userId;
if (!CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, playerIndex))
break;
}
this.SetEnabledState(playerIndex, state);
break;
}
}
private void Deserialize_SyncEveryone(BinaryReader reader, int userId)
{
int count = (int) Math.Ceiling((double) this._perPlayerIsEnabled.Length / 8.0);
if (Main.netMode == 2 && !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, userId))
{
reader.ReadBytes(count);
}
else
{
for (int index = 0; index < count; ++index)
{
BitsByte bitsByte = (BitsByte) reader.ReadByte();
for (int key = 0; key < 8; ++key)
{
int playerIndex = index * 8 + key;
if (playerIndex != Main.myPlayer)
{
if (playerIndex < this._perPlayerIsEnabled.Length)
this.SetEnabledState(playerIndex, bitsByte[key]);
else
break;
}
}
}
}
}
public void SetEnabledState(int playerIndex, bool state)
{
this._perPlayerIsEnabled[playerIndex] = state;
if (Main.netMode != 2)
return;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 3);
packet.Writer.Write((byte) 1);
packet.Writer.Write((byte) playerIndex);
packet.Writer.Write(state);
NetManager.Instance.Broadcast(packet);
}
public void DebugCall() => this.RequestUse();
internal void RequestUse()
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 1);
packet.Writer.Write((byte) 1);
packet.Writer.Write((byte) Main.myPlayer);
packet.Writer.Write(!this._perPlayerIsEnabled[Main.myPlayer]);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public void Reset()
{
for (int index = 0; index < this._perPlayerIsEnabled.Length; ++index)
this._perPlayerIsEnabled[index] = this._defaultToggleState;
}
public void OnPlayerJoining(int playerIndex)
{
int num = (int) Math.Ceiling((double) this._perPlayerIsEnabled.Length / 8.0);
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, num + 1);
packet.Writer.Write((byte) 0);
for (int index1 = 0; index1 < num; ++index1)
{
BitsByte bitsByte = (BitsByte) (byte) 0;
for (int key = 0; key < 8; ++key)
{
int index2 = index1 * 8 + key;
if (index2 < this._perPlayerIsEnabled.Length)
bitsByte[key] = this._perPlayerIsEnabled[index2];
else
break;
}
packet.Writer.Write((byte) bitsByte);
}
NetManager.Instance.SendToClient(packet, playerIndex);
}
public void ProvidePowerButtons(
CreativePowerUIElementRequestInfo info,
List<UIElement> elements)
{
GroupOptionButton<bool> toggleButton = CreativePowersHelper.CreateToggleButton(info);
CreativePowersHelper.UpdateUnlockStateByPower((ICreativePower) this, (UIElement) toggleButton, Main.OurFavoriteColor);
toggleButton.Append((UIElement) CreativePowersHelper.GetIconImage(this._iconLocation));
toggleButton.OnClick += new UIElement.MouseEvent(this.button_OnClick);
toggleButton.OnUpdate += new UIElement.ElementEvent(this.button_OnUpdate);
elements.Add((UIElement) toggleButton);
}
private void button_OnUpdate(UIElement affectedElement)
{
bool option = this._perPlayerIsEnabled[Main.myPlayer];
GroupOptionButton<bool> groupOptionButton = affectedElement as GroupOptionButton<bool>;
groupOptionButton.SetCurrentOption(option);
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue(groupOptionButton.IsSelected ? this._powerNameKey + "_Enabled" : this._powerNameKey + "_Disabled");
CreativePowersHelper.AddDescriptionIfNeeded(ref textValue, this._powerNameKey + "_Description");
CreativePowersHelper.AddUnlockTextIfNeeded(ref textValue, this.GetIsUnlocked(), this._powerNameKey + "_Unlock");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref textValue);
Main.instance.MouseTextNoOverride(textValue);
}
private void button_OnClick(UIMouseEvent evt, UIElement listeningElement)
{
if (!this.GetIsUnlocked() || !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
this.RequestUse();
}
public abstract bool GetIsUnlocked();
private enum SubMessageType : byte
{
SyncEveryone,
SyncOnePlayer,
}
}
public abstract class APerPlayerSliderPower :
ICreativePower,
IOnPlayerJoining,
IProvideSliderElement,
IPowerSubcategoryElement
{
internal Point _iconLocation;
internal float _sliderCurrentValueCache;
internal string _powerNameKey;
internal float[] _cachePerPlayer = new float[256];
internal float _sliderDefaultValue;
private float _currentTargetValue;
private bool _needsToCommitChange;
private DateTime _nextTimeWeCanPush = DateTime.UtcNow;
public ushort PowerId { get; set; }
public string ServerConfigName { get; set; }
public PowerPermissionLevel CurrentPermissionLevel { get; set; }
public PowerPermissionLevel DefaultPermissionLevel { get; set; }
public bool GetRemappedSliderValueFor(int playerIndex, out float value)
{
value = 0.0f;
if (!this._cachePerPlayer.IndexInRange<float>(playerIndex))
return false;
value = this.RemapSliderValueToPowerValue(this._cachePerPlayer[playerIndex]);
return true;
}
public abstract float RemapSliderValueToPowerValue(float sliderValue);
public void DeserializeNetMessage(BinaryReader reader, int userId)
{
int playerIndex = (int) reader.ReadByte();
float num = reader.ReadSingle();
if (Main.netMode == 2)
{
playerIndex = userId;
if (!CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, playerIndex))
return;
}
this._cachePerPlayer[playerIndex] = num;
if (playerIndex != Main.myPlayer)
return;
this._sliderCurrentValueCache = num;
this.UpdateInfoFromSliderValueCache();
}
internal abstract void UpdateInfoFromSliderValueCache();
public void ProvidePowerButtons(
CreativePowerUIElementRequestInfo info,
List<UIElement> elements)
{
throw new NotImplementedException();
}
public void DebugCall()
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 5);
packet.Writer.Write((byte) Main.myPlayer);
packet.Writer.Write(0.0f);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public abstract UIElement ProvideSlider();
internal float GetSliderValue() => Main.netMode == 1 && this._needsToCommitChange ? this._currentTargetValue : this._sliderCurrentValueCache;
internal void SetValueKeyboard(float value)
{
if ((double) value == (double) this._currentTargetValue || !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
this._currentTargetValue = value;
this._needsToCommitChange = true;
}
internal void SetValueGamepad()
{
float sliderValue = this.GetSliderValue();
float num = UILinksInitializer.HandleSliderVerticalInput(sliderValue, 0.0f, 1f, PlayerInput.CurrentProfile.InterfaceDeadzoneX, 0.35f);
if ((double) num == (double) sliderValue)
return;
this.SetValueKeyboard(num);
}
public void PushChangeAndSetSlider(float value)
{
if (!CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
value = MathHelper.Clamp(value, 0.0f, 1f);
this._sliderCurrentValueCache = value;
this._currentTargetValue = value;
this.PushChange(value);
}
public GroupOptionButton<int> GetOptionButton(
CreativePowerUIElementRequestInfo info,
int optionIndex,
int currentOptionIndex)
{
GroupOptionButton<int> categoryButton = CreativePowersHelper.CreateCategoryButton<int>(info, optionIndex, currentOptionIndex);
CreativePowersHelper.UpdateUnlockStateByPower((ICreativePower) this, (UIElement) categoryButton, CreativePowersHelper.CommonSelectedColor);
categoryButton.Append((UIElement) CreativePowersHelper.GetIconImage(this._iconLocation));
categoryButton.OnUpdate += new UIElement.ElementEvent(this.categoryButton_OnUpdate);
return categoryButton;
}
private void categoryButton_OnUpdate(UIElement affectedElement)
{
if (affectedElement.IsMouseHovering)
{
string textValue = Language.GetTextValue(this._powerNameKey + ((affectedElement as GroupOptionButton<int>).IsSelected ? "_Opened" : "_Closed"));
CreativePowersHelper.AddDescriptionIfNeeded(ref textValue, this._powerNameKey + "_Description");
CreativePowersHelper.AddUnlockTextIfNeeded(ref textValue, this.GetIsUnlocked(), this._powerNameKey + "_Unlock");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref textValue);
Main.instance.MouseTextNoOverride(textValue);
}
this.AttemptPushingChange();
}
private void AttemptPushingChange()
{
if (!this._needsToCommitChange || DateTime.UtcNow.CompareTo(this._nextTimeWeCanPush) == -1)
return;
this.PushChange(this._currentTargetValue);
}
internal void PushChange(float newSliderValue)
{
this._needsToCommitChange = false;
this._sliderCurrentValueCache = newSliderValue;
this._nextTimeWeCanPush = DateTime.UtcNow;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 5);
packet.Writer.Write((byte) Main.myPlayer);
packet.Writer.Write(newSliderValue);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public virtual void Reset()
{
for (int playerIndex = 0; playerIndex < this._cachePerPlayer.Length; ++playerIndex)
this.ResetForPlayer(playerIndex);
}
public virtual void ResetForPlayer(int playerIndex)
{
this._cachePerPlayer[playerIndex] = this._sliderDefaultValue;
if (playerIndex != Main.myPlayer)
return;
this._sliderCurrentValueCache = this._sliderDefaultValue;
this._currentTargetValue = this._sliderDefaultValue;
}
public void OnPlayerJoining(int playerIndex) => this.ResetForPlayer(playerIndex);
public abstract bool GetIsUnlocked();
}
public abstract class ASharedButtonPower : ICreativePower
{
internal Point _iconLocation;
internal string _powerNameKey;
internal string _descriptionKey;
public ushort PowerId { get; set; }
public string ServerConfigName { get; set; }
public PowerPermissionLevel CurrentPermissionLevel { get; set; }
public PowerPermissionLevel DefaultPermissionLevel { get; set; }
public ASharedButtonPower() => this.OnCreation();
public void RequestUse()
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 0);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public void DeserializeNetMessage(BinaryReader reader, int userId)
{
if (Main.netMode == 2 && !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, userId))
return;
this.UsePower();
}
internal abstract void UsePower();
internal abstract void OnCreation();
public void ProvidePowerButtons(
CreativePowerUIElementRequestInfo info,
List<UIElement> elements)
{
GroupOptionButton<bool> simpleButton = CreativePowersHelper.CreateSimpleButton(info);
CreativePowersHelper.UpdateUnlockStateByPower((ICreativePower) this, (UIElement) simpleButton, CreativePowersHelper.CommonSelectedColor);
simpleButton.Append((UIElement) CreativePowersHelper.GetIconImage(this._iconLocation));
simpleButton.OnClick += new UIElement.MouseEvent(this.button_OnClick);
simpleButton.OnUpdate += new UIElement.ElementEvent(this.button_OnUpdate);
elements.Add((UIElement) simpleButton);
}
private void button_OnUpdate(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue(this._powerNameKey);
CreativePowersHelper.AddDescriptionIfNeeded(ref textValue, this._descriptionKey);
CreativePowersHelper.AddUnlockTextIfNeeded(ref textValue, this.GetIsUnlocked(), this._powerNameKey + "_Unlock");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref textValue);
Main.instance.MouseTextNoOverride(textValue);
}
private void button_OnClick(UIMouseEvent evt, UIElement listeningElement)
{
if (!CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
this.RequestUse();
}
public abstract bool GetIsUnlocked();
}
public abstract class ASharedTogglePower : ICreativePower, IOnPlayerJoining
{
public ushort PowerId { get; set; }
public string ServerConfigName { get; set; }
public PowerPermissionLevel CurrentPermissionLevel { get; set; }
public PowerPermissionLevel DefaultPermissionLevel { get; set; }
public bool Enabled { get; private set; }
public void SetPowerInfo(bool enabled) => this.Enabled = enabled;
public void Reset() => this.Enabled = false;
public void OnPlayerJoining(int playerIndex)
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 1);
packet.Writer.Write(this.Enabled);
NetManager.Instance.SendToClient(packet, playerIndex);
}
public void DeserializeNetMessage(BinaryReader reader, int userId)
{
bool enabled = reader.ReadBoolean();
if (Main.netMode == 2 && !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, userId))
return;
this.SetPowerInfo(enabled);
if (Main.netMode != 2)
return;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 1);
packet.Writer.Write(this.Enabled);
NetManager.Instance.Broadcast(packet);
}
private void RequestUse()
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 1);
packet.Writer.Write(!this.Enabled);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public void ProvidePowerButtons(
CreativePowerUIElementRequestInfo info,
List<UIElement> elements)
{
GroupOptionButton<bool> toggleButton = CreativePowersHelper.CreateToggleButton(info);
CreativePowersHelper.UpdateUnlockStateByPower((ICreativePower) this, (UIElement) toggleButton, Main.OurFavoriteColor);
this.CustomizeButton((UIElement) toggleButton);
toggleButton.OnClick += new UIElement.MouseEvent(this.button_OnClick);
toggleButton.OnUpdate += new UIElement.ElementEvent(this.button_OnUpdate);
elements.Add((UIElement) toggleButton);
}
private void button_OnUpdate(UIElement affectedElement)
{
bool enabled = this.Enabled;
GroupOptionButton<bool> groupOptionButton = affectedElement as GroupOptionButton<bool>;
groupOptionButton.SetCurrentOption(enabled);
if (!affectedElement.IsMouseHovering)
return;
string buttonTextKey = this.GetButtonTextKey();
string textValue = Language.GetTextValue(buttonTextKey + (groupOptionButton.IsSelected ? "_Enabled" : "_Disabled"));
CreativePowersHelper.AddDescriptionIfNeeded(ref textValue, buttonTextKey + "_Description");
CreativePowersHelper.AddUnlockTextIfNeeded(ref textValue, this.GetIsUnlocked(), buttonTextKey + "_Unlock");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref textValue);
Main.instance.MouseTextNoOverride(textValue);
}
private void button_OnClick(UIMouseEvent evt, UIElement listeningElement)
{
if (!CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
this.RequestUse();
}
internal abstract void CustomizeButton(UIElement button);
internal abstract string GetButtonTextKey();
public abstract bool GetIsUnlocked();
}
public abstract class ASharedSliderPower :
ICreativePower,
IOnPlayerJoining,
IProvideSliderElement,
IPowerSubcategoryElement
{
internal Point _iconLocation;
internal float _sliderCurrentValueCache;
internal string _powerNameKey;
internal bool _syncToJoiningPlayers = true;
internal float _currentTargetValue;
private bool _needsToCommitChange;
private DateTime _nextTimeWeCanPush = DateTime.UtcNow;
public ushort PowerId { get; set; }
public string ServerConfigName { get; set; }
public PowerPermissionLevel CurrentPermissionLevel { get; set; }
public PowerPermissionLevel DefaultPermissionLevel { get; set; }
public void DeserializeNetMessage(BinaryReader reader, int userId)
{
float num = reader.ReadSingle();
if (Main.netMode == 2 && !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, userId))
return;
this._sliderCurrentValueCache = num;
this.UpdateInfoFromSliderValueCache();
if (Main.netMode != 2)
return;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 4);
packet.Writer.Write(num);
NetManager.Instance.Broadcast(packet);
}
internal abstract void UpdateInfoFromSliderValueCache();
public void ProvidePowerButtons(
CreativePowerUIElementRequestInfo info,
List<UIElement> elements)
{
throw new NotImplementedException();
}
public void DebugCall()
{
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 4);
packet.Writer.Write(0.0f);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public abstract UIElement ProvideSlider();
internal float GetSliderValue() => Main.netMode == 1 && this._needsToCommitChange ? this._currentTargetValue : this.GetSliderValueInner();
internal virtual float GetSliderValueInner() => this._sliderCurrentValueCache;
internal void SetValueKeyboard(float value)
{
if ((double) value == (double) this._currentTargetValue || !CreativePowersHelper.IsAvailableForPlayer((ICreativePower) this, Main.myPlayer))
return;
this._currentTargetValue = value;
this._needsToCommitChange = true;
}
internal void SetValueGamepad()
{
float sliderValue = this.GetSliderValue();
float num = UILinksInitializer.HandleSliderVerticalInput(sliderValue, 0.0f, 1f, PlayerInput.CurrentProfile.InterfaceDeadzoneX, 0.35f);
if ((double) num == (double) sliderValue)
return;
this.SetValueKeyboard(num);
}
public GroupOptionButton<int> GetOptionButton(
CreativePowerUIElementRequestInfo info,
int optionIndex,
int currentOptionIndex)
{
GroupOptionButton<int> categoryButton = CreativePowersHelper.CreateCategoryButton<int>(info, optionIndex, currentOptionIndex);
CreativePowersHelper.UpdateUnlockStateByPower((ICreativePower) this, (UIElement) categoryButton, CreativePowersHelper.CommonSelectedColor);
categoryButton.Append((UIElement) CreativePowersHelper.GetIconImage(this._iconLocation));
categoryButton.OnUpdate += new UIElement.ElementEvent(this.categoryButton_OnUpdate);
return categoryButton;
}
private void categoryButton_OnUpdate(UIElement affectedElement)
{
if (affectedElement.IsMouseHovering)
{
string textValue = Language.GetTextValue(this._powerNameKey + ((affectedElement as GroupOptionButton<int>).IsSelected ? "_Opened" : "_Closed"));
CreativePowersHelper.AddDescriptionIfNeeded(ref textValue, this._powerNameKey + "_Description");
CreativePowersHelper.AddUnlockTextIfNeeded(ref textValue, this.GetIsUnlocked(), this._powerNameKey + "_Unlock");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref textValue);
Main.instance.MouseTextNoOverride(textValue);
}
this.AttemptPushingChange();
}
private void AttemptPushingChange()
{
if (!this._needsToCommitChange || DateTime.UtcNow.CompareTo(this._nextTimeWeCanPush) == -1)
return;
this._needsToCommitChange = false;
this._sliderCurrentValueCache = this._currentTargetValue;
this._nextTimeWeCanPush = DateTime.UtcNow;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 4);
packet.Writer.Write(this._currentTargetValue);
NetManager.Instance.SendToServerOrLoopback(packet);
}
public virtual void Reset() => this._sliderCurrentValueCache = 0.0f;
public void OnPlayerJoining(int playerIndex)
{
if (!this._syncToJoiningPlayers)
return;
NetPacket packet = NetCreativePowersModule.PreparePacket(this.PowerId, 4);
packet.Writer.Write(this._sliderCurrentValueCache);
NetManager.Instance.SendToClient(packet, playerIndex);
}
public abstract bool GetIsUnlocked();
}
public class GodmodePower : CreativePowers.APerPlayerTogglePower, IPersistentPerPlayerContent
{
public GodmodePower()
{
this._powerNameKey = "CreativePowers.Godmode";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.Godmode;
}
public override bool GetIsUnlocked() => true;
public void Save(Player player, BinaryWriter writer)
{
bool flag = this.IsEnabledForPlayer(Main.myPlayer);
writer.Write(flag);
}
public void ResetDataForNewPlayer(Player player) => player.savedPerPlayerFieldsThatArentInThePlayerClass.godmodePowerEnabled = this._defaultToggleState;
public void Load(Player player, BinaryReader reader, int gameVersionSaveWasMadeOn)
{
bool flag = reader.ReadBoolean();
player.savedPerPlayerFieldsThatArentInThePlayerClass.godmodePowerEnabled = flag;
}
public void ApplyLoadedDataToOutOfPlayerFields(Player player)
{
if (player.savedPerPlayerFieldsThatArentInThePlayerClass.godmodePowerEnabled == this.IsEnabledForPlayer(player.whoAmI))
return;
this.RequestUse();
}
}
public class FarPlacementRangePower :
CreativePowers.APerPlayerTogglePower,
IPersistentPerPlayerContent
{
public FarPlacementRangePower()
{
this._powerNameKey = "CreativePowers.InfinitePlacementRange";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.BlockPlacementRange;
this._defaultToggleState = true;
}
public override bool GetIsUnlocked() => true;
public void Save(Player player, BinaryWriter writer)
{
bool flag = this.IsEnabledForPlayer(Main.myPlayer);
writer.Write(flag);
}
public void ResetDataForNewPlayer(Player player) => player.savedPerPlayerFieldsThatArentInThePlayerClass.farPlacementRangePowerEnabled = this._defaultToggleState;
public void Load(Player player, BinaryReader reader, int gameVersionSaveWasMadeOn)
{
bool flag = reader.ReadBoolean();
player.savedPerPlayerFieldsThatArentInThePlayerClass.farPlacementRangePowerEnabled = flag;
}
public void ApplyLoadedDataToOutOfPlayerFields(Player player)
{
if (player.savedPerPlayerFieldsThatArentInThePlayerClass.farPlacementRangePowerEnabled == this.IsEnabledForPlayer(player.whoAmI))
return;
this.RequestUse();
}
}
public class StartDayImmediately : CreativePowers.ASharedButtonPower
{
internal override void UsePower()
{
if (Main.netMode == 1)
return;
Main.SkipToTime(0, true);
}
internal override void OnCreation()
{
this._powerNameKey = "CreativePowers.StartDayImmediately";
this._descriptionKey = this._powerNameKey + "_Description";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.TimeDawn;
}
public override bool GetIsUnlocked() => true;
}
public class StartNightImmediately : CreativePowers.ASharedButtonPower
{
internal override void UsePower()
{
if (Main.netMode == 1)
return;
Main.SkipToTime(0, false);
}
internal override void OnCreation()
{
this._powerNameKey = "CreativePowers.StartNightImmediately";
this._descriptionKey = this._powerNameKey + "_Description";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.TimeDusk;
}
public override bool GetIsUnlocked() => true;
}
public class StartNoonImmediately : CreativePowers.ASharedButtonPower
{
internal override void UsePower()
{
if (Main.netMode == 1)
return;
Main.SkipToTime(27000, true);
}
internal override void OnCreation()
{
this._powerNameKey = "CreativePowers.StartNoonImmediately";
this._descriptionKey = this._powerNameKey + "_Description";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.TimeNoon;
}
public override bool GetIsUnlocked() => true;
}
public class StartMidnightImmediately : CreativePowers.ASharedButtonPower
{
internal override void UsePower()
{
if (Main.netMode == 1)
return;
Main.SkipToTime(16200, false);
}
internal override void OnCreation()
{
this._powerNameKey = "CreativePowers.StartMidnightImmediately";
this._descriptionKey = this._powerNameKey + "_Description";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.TimeMidnight;
}
public override bool GetIsUnlocked() => true;
}
public class ModifyTimeRate : CreativePowers.ASharedSliderPower, IPersistentPerWorldContent
{
public int TargetTimeRate { get; private set; }
public ModifyTimeRate()
{
this._powerNameKey = "CreativePowers.ModifyTimeRate";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.ModifyTime;
}
public override void Reset()
{
this._sliderCurrentValueCache = 0.0f;
this.TargetTimeRate = 1;
}
internal override void UpdateInfoFromSliderValueCache() => this.TargetTimeRate = (int) Math.Round((double) Utils.Remap(this._sliderCurrentValueCache, 0.0f, 1f, 1f, 24f));
public override UIElement ProvideSlider()
{
UIVerticalSlider slider = CreativePowersHelper.CreateSlider(new Func<float>(((CreativePowers.ASharedSliderPower) this).GetSliderValue), new Action<float>(((CreativePowers.ASharedSliderPower) this).SetValueKeyboard), new Action(((CreativePowers.ASharedSliderPower) this).SetValueGamepad));
slider.OnUpdate += new UIElement.ElementEvent(this.UpdateSliderAndShowMultiplierMouseOver);
UIPanel uiPanel = new UIPanel();
uiPanel.Width = new StyleDimension(87f, 0.0f);
uiPanel.Height = new StyleDimension(180f, 0.0f);
uiPanel.HAlign = 0.0f;
uiPanel.VAlign = 0.5f;
uiPanel.Append((UIElement) slider);
uiPanel.OnUpdate += new UIElement.ElementEvent(CreativePowersHelper.UpdateUseMouseInterface);
UIText uiText1 = new UIText("x24");
uiText1.HAlign = 1f;
uiText1.VAlign = 0.0f;
uiPanel.Append((UIElement) uiText1);
UIText uiText2 = new UIText("x12");
uiText2.HAlign = 1f;
uiText2.VAlign = 0.5f;
uiPanel.Append((UIElement) uiText2);
UIText uiText3 = new UIText("x1");
uiText3.HAlign = 1f;
uiText3.VAlign = 1f;
uiPanel.Append((UIElement) uiText3);
return (UIElement) uiPanel;
}
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this._sliderCurrentValueCache);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn)
{
this._sliderCurrentValueCache = reader.ReadSingle();
this.UpdateInfoFromSliderValueCache();
}
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn)
{
double num = (double) reader.ReadSingle();
}
private void UpdateSliderAndShowMultiplierMouseOver(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string originalText = "x" + this.TargetTimeRate.ToString();
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref originalText);
Main.instance.MouseTextNoOverride(originalText);
}
}
public class DifficultySliderPower :
CreativePowers.ASharedSliderPower,
IPersistentPerWorldContent
{
public float StrengthMultiplierToGiveNPCs { get; private set; }
public DifficultySliderPower()
{
this._powerNameKey = "CreativePowers.DifficultySlider";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.EnemyStrengthSlider;
}
public override void Reset()
{
this._sliderCurrentValueCache = 0.0f;
this.UpdateInfoFromSliderValueCache();
}
internal override void UpdateInfoFromSliderValueCache()
{
this.StrengthMultiplierToGiveNPCs = (double) this._sliderCurrentValueCache > 0.330000013113022 ? Utils.Remap(this._sliderCurrentValueCache, 0.33f, 1f, 1f, 3f) : Utils.Remap(this._sliderCurrentValueCache, 0.0f, 0.33f, 0.5f, 1f);
this.StrengthMultiplierToGiveNPCs = (float) Math.Round((double) this.StrengthMultiplierToGiveNPCs * 20.0) / 20f;
}
public override UIElement ProvideSlider()
{
UIVerticalSlider slider = CreativePowersHelper.CreateSlider(new Func<float>(((CreativePowers.ASharedSliderPower) this).GetSliderValue), new Action<float>(((CreativePowers.ASharedSliderPower) this).SetValueKeyboard), new Action(((CreativePowers.ASharedSliderPower) this).SetValueGamepad));
UIPanel panel = new UIPanel();
panel.Width = new StyleDimension(82f, 0.0f);
panel.Height = new StyleDimension(180f, 0.0f);
panel.HAlign = 0.0f;
panel.VAlign = 0.5f;
panel.Append((UIElement) slider);
panel.OnUpdate += new UIElement.ElementEvent(CreativePowersHelper.UpdateUseMouseInterface);
slider.OnUpdate += new UIElement.ElementEvent(this.UpdateSliderColorAndShowMultiplierMouseOver);
CreativePowers.DifficultySliderPower.AddIndication(panel, 0.0f, "x3", "Images/UI/WorldCreation/IconDifficultyMaster", new UIElement.ElementEvent(this.MouseOver_Master));
CreativePowers.DifficultySliderPower.AddIndication(panel, 0.3333333f, "x2", "Images/UI/WorldCreation/IconDifficultyExpert", new UIElement.ElementEvent(this.MouseOver_Expert));
CreativePowers.DifficultySliderPower.AddIndication(panel, 0.6666667f, "x1", "Images/UI/WorldCreation/IconDifficultyNormal", new UIElement.ElementEvent(this.MouseOver_Normal));
CreativePowers.DifficultySliderPower.AddIndication(panel, 1f, "x0.5", "Images/UI/WorldCreation/IconDifficultyCreative", new UIElement.ElementEvent(this.MouseOver_Journey));
return (UIElement) panel;
}
private static void AddIndication(
UIPanel panel,
float yAnchor,
string indicationText,
string iconImagePath,
UIElement.ElementEvent updateEvent)
{
UIImage uiImage1 = new UIImage(Main.Assets.Request<Texture2D>(iconImagePath, (AssetRequestMode) 1));
uiImage1.HAlign = 1f;
uiImage1.VAlign = yAnchor;
uiImage1.Left = new StyleDimension(4f, 0.0f);
uiImage1.Top = new StyleDimension(2f, 0.0f);
uiImage1.RemoveFloatingPointsFromDrawPosition = true;
UIImage uiImage2 = uiImage1;
if (updateEvent != null)
uiImage2.OnUpdate += updateEvent;
panel.Append((UIElement) uiImage2);
}
private void MouseOver_Journey(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue("UI.Creative");
Main.instance.MouseTextNoOverride(textValue);
}
private void MouseOver_Normal(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue("UI.Normal");
Main.instance.MouseTextNoOverride(textValue);
}
private void MouseOver_Expert(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue("UI.Expert");
Main.instance.MouseTextNoOverride(textValue);
}
private void MouseOver_Master(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string textValue = Language.GetTextValue("UI.Master");
Main.instance.MouseTextNoOverride(textValue);
}
private void UpdateSliderColorAndShowMultiplierMouseOver(UIElement affectedElement)
{
if (affectedElement.IsMouseHovering)
{
string originalText = "x" + this.StrengthMultiplierToGiveNPCs.ToString("F2");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref originalText);
Main.instance.MouseTextNoOverride(originalText);
}
if (!(affectedElement is UIVerticalSlider uiVerticalSlider))
return;
uiVerticalSlider.EmptyColor = Color.Black;
Color color = !Main.masterMode ? (!Main.expertMode ? ((double) this.StrengthMultiplierToGiveNPCs >= 1.0 ? Color.White : Main.creativeModeColor) : Main.mcColor) : Main.hcColor;
uiVerticalSlider.FilledColor = color;
}
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this._sliderCurrentValueCache);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn)
{
this._sliderCurrentValueCache = reader.ReadSingle();
this.UpdateInfoFromSliderValueCache();
}
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn)
{
double num = (double) reader.ReadSingle();
}
}
public class ModifyWindDirectionAndStrength : CreativePowers.ASharedSliderPower
{
public ModifyWindDirectionAndStrength()
{
this._powerNameKey = "CreativePowers.ModifyWindDirectionAndStrength";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.WindDirection;
this._syncToJoiningPlayers = false;
}
internal override void UpdateInfoFromSliderValueCache() => Main.windSpeedCurrent = Main.windSpeedTarget = MathHelper.Lerp(-0.8f, 0.8f, this._sliderCurrentValueCache);
internal override float GetSliderValueInner() => Utils.GetLerpValue(-0.8f, 0.8f, Main.windSpeedTarget, false);
public override bool GetIsUnlocked() => true;
public override UIElement ProvideSlider()
{
UIVerticalSlider slider = CreativePowersHelper.CreateSlider(new Func<float>(((CreativePowers.ASharedSliderPower) this).GetSliderValue), new Action<float>(((CreativePowers.ASharedSliderPower) this).SetValueKeyboard), new Action(((CreativePowers.ASharedSliderPower) this).SetValueGamepad));
slider.OnUpdate += new UIElement.ElementEvent(this.UpdateSliderAndShowMultiplierMouseOver);
UIPanel uiPanel = new UIPanel();
uiPanel.Width = new StyleDimension(132f, 0.0f);
uiPanel.Height = new StyleDimension(180f, 0.0f);
uiPanel.HAlign = 0.0f;
uiPanel.VAlign = 0.5f;
uiPanel.Append((UIElement) slider);
uiPanel.OnUpdate += new UIElement.ElementEvent(CreativePowersHelper.UpdateUseMouseInterface);
UIText uiText1 = new UIText(Language.GetText("CreativePowers.WindWest"));
uiText1.HAlign = 1f;
uiText1.VAlign = 0.0f;
uiPanel.Append((UIElement) uiText1);
UIText uiText2 = new UIText(Language.GetText("CreativePowers.WindEast"));
uiText2.HAlign = 1f;
uiText2.VAlign = 1f;
uiPanel.Append((UIElement) uiText2);
UIText uiText3 = new UIText(Language.GetText("CreativePowers.WindNone"));
uiText3.HAlign = 1f;
uiText3.VAlign = 0.5f;
uiPanel.Append((UIElement) uiText3);
return (UIElement) uiPanel;
}
private void UpdateSliderAndShowMultiplierMouseOver(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
int num = (int) ((double) Main.windSpeedCurrent * 50.0);
string originalText = "";
if (num < 0)
originalText += Language.GetTextValue("GameUI.EastWind", (object) Math.Abs(num));
else if (num > 0)
originalText += Language.GetTextValue("GameUI.WestWind", (object) num);
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref originalText);
Main.instance.MouseTextNoOverride(originalText);
}
}
public class ModifyRainPower : CreativePowers.ASharedSliderPower
{
public ModifyRainPower()
{
this._powerNameKey = "CreativePowers.ModifyRainPower";
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.RainStrength;
this._syncToJoiningPlayers = false;
}
internal override void UpdateInfoFromSliderValueCache()
{
if ((double) this._sliderCurrentValueCache == 0.0)
Main.StopRain();
else
Main.StartRain();
Main.cloudAlpha = this._sliderCurrentValueCache;
Main.maxRaining = this._sliderCurrentValueCache;
}
internal override float GetSliderValueInner() => Main.cloudAlpha;
public override bool GetIsUnlocked() => true;
public override UIElement ProvideSlider()
{
UIVerticalSlider slider = CreativePowersHelper.CreateSlider(new Func<float>(((CreativePowers.ASharedSliderPower) this).GetSliderValue), new Action<float>(((CreativePowers.ASharedSliderPower) this).SetValueKeyboard), new Action(((CreativePowers.ASharedSliderPower) this).SetValueGamepad));
slider.OnUpdate += new UIElement.ElementEvent(this.UpdateSliderAndShowMultiplierMouseOver);
UIPanel uiPanel = new UIPanel();
uiPanel.Width = new StyleDimension(132f, 0.0f);
uiPanel.Height = new StyleDimension(180f, 0.0f);
uiPanel.HAlign = 0.0f;
uiPanel.VAlign = 0.5f;
uiPanel.Append((UIElement) slider);
uiPanel.OnUpdate += new UIElement.ElementEvent(CreativePowersHelper.UpdateUseMouseInterface);
UIText uiText1 = new UIText(Language.GetText("CreativePowers.WeatherMonsoon"));
uiText1.HAlign = 1f;
uiText1.VAlign = 0.0f;
uiPanel.Append((UIElement) uiText1);
UIText uiText2 = new UIText(Language.GetText("CreativePowers.WeatherClearSky"));
uiText2.HAlign = 1f;
uiText2.VAlign = 1f;
uiPanel.Append((UIElement) uiText2);
UIText uiText3 = new UIText(Language.GetText("CreativePowers.WeatherDrizzle"));
uiText3.HAlign = 1f;
uiText3.VAlign = 0.5f;
uiPanel.Append((UIElement) uiText3);
return (UIElement) uiPanel;
}
private void UpdateSliderAndShowMultiplierMouseOver(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string originalText = Main.maxRaining.ToString("P0");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref originalText);
Main.instance.MouseTextNoOverride(originalText);
}
}
public class FreezeTime : CreativePowers.ASharedTogglePower, IPersistentPerWorldContent
{
internal override void CustomizeButton(UIElement button) => button.Append((UIElement) CreativePowersHelper.GetIconImage(CreativePowersHelper.CreativePowerIconLocations.FreezeTime));
internal override string GetButtonTextKey() => "CreativePowers.FreezeTime";
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this.Enabled);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn) => this.SetPowerInfo(reader.ReadBoolean());
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn) => reader.ReadBoolean();
}
public class FreezeWindDirectionAndStrength :
CreativePowers.ASharedTogglePower,
IPersistentPerWorldContent
{
internal override void CustomizeButton(UIElement button) => button.Append((UIElement) CreativePowersHelper.GetIconImage(CreativePowersHelper.CreativePowerIconLocations.WindFreeze));
internal override string GetButtonTextKey() => "CreativePowers.FreezeWindDirectionAndStrength";
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this.Enabled);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn) => this.SetPowerInfo(reader.ReadBoolean());
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn) => reader.ReadBoolean();
}
public class FreezeRainPower : CreativePowers.ASharedTogglePower, IPersistentPerWorldContent
{
internal override void CustomizeButton(UIElement button) => button.Append((UIElement) CreativePowersHelper.GetIconImage(CreativePowersHelper.CreativePowerIconLocations.RainFreeze));
internal override string GetButtonTextKey() => "CreativePowers.FreezeRainPower";
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this.Enabled);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn) => this.SetPowerInfo(reader.ReadBoolean());
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn) => reader.ReadBoolean();
}
public class StopBiomeSpreadPower : CreativePowers.ASharedTogglePower, IPersistentPerWorldContent
{
internal override void CustomizeButton(UIElement button) => button.Append((UIElement) CreativePowersHelper.GetIconImage(CreativePowersHelper.CreativePowerIconLocations.StopBiomeSpread));
internal override string GetButtonTextKey() => "CreativePowers.StopBiomeSpread";
public override bool GetIsUnlocked() => true;
public void Save(BinaryWriter writer) => writer.Write(this.Enabled);
public void Load(BinaryReader reader, int gameVersionSaveWasMadeOn) => this.SetPowerInfo(reader.ReadBoolean());
public void ValidateWorld(BinaryReader reader, int gameVersionSaveWasMadeOn) => reader.ReadBoolean();
}
public class SpawnRateSliderPerPlayerPower :
CreativePowers.APerPlayerSliderPower,
IPersistentPerPlayerContent
{
public float StrengthMultiplierToGiveNPCs { get; private set; }
public SpawnRateSliderPerPlayerPower()
{
this._powerNameKey = "CreativePowers.NPCSpawnRateSlider";
this._sliderDefaultValue = 0.5f;
this._iconLocation = CreativePowersHelper.CreativePowerIconLocations.EnemySpawnRate;
}
public bool GetShouldDisableSpawnsFor(int playerIndex) => this._cachePerPlayer.IndexInRange<float>(playerIndex) && (double) this._cachePerPlayer[playerIndex] == 0.0;
internal override void UpdateInfoFromSliderValueCache()
{
}
public override float RemapSliderValueToPowerValue(float sliderValue) => (double) sliderValue < 0.5 ? Utils.Remap(sliderValue, 0.0f, 0.5f, 0.1f, 1f) : Utils.Remap(sliderValue, 0.5f, 1f, 1f, 10f);
public override UIElement ProvideSlider()
{
UIVerticalSlider slider = CreativePowersHelper.CreateSlider(new Func<float>(((CreativePowers.APerPlayerSliderPower) this).GetSliderValue), new Action<float>(((CreativePowers.APerPlayerSliderPower) this).SetValueKeyboard), new Action(((CreativePowers.APerPlayerSliderPower) this).SetValueGamepad));
slider.OnUpdate += new UIElement.ElementEvent(this.UpdateSliderAndShowMultiplierMouseOver);
UIPanel uiPanel = new UIPanel();
uiPanel.Width = new StyleDimension(77f, 0.0f);
uiPanel.Height = new StyleDimension(180f, 0.0f);
uiPanel.HAlign = 0.0f;
uiPanel.VAlign = 0.5f;
uiPanel.Append((UIElement) slider);
uiPanel.OnUpdate += new UIElement.ElementEvent(CreativePowersHelper.UpdateUseMouseInterface);
UIText uiText1 = new UIText("x10");
uiText1.HAlign = 1f;
uiText1.VAlign = 0.0f;
uiPanel.Append((UIElement) uiText1);
UIText uiText2 = new UIText("x1");
uiText2.HAlign = 1f;
uiText2.VAlign = 0.5f;
uiPanel.Append((UIElement) uiText2);
UIText uiText3 = new UIText("x0");
uiText3.HAlign = 1f;
uiText3.VAlign = 1f;
uiPanel.Append((UIElement) uiText3);
return (UIElement) uiPanel;
}
private void UpdateSliderAndShowMultiplierMouseOver(UIElement affectedElement)
{
if (!affectedElement.IsMouseHovering)
return;
string originalText = "x" + this.RemapSliderValueToPowerValue(this.GetSliderValue()).ToString("F2");
if (this.GetShouldDisableSpawnsFor(Main.myPlayer))
originalText = Language.GetTextValue(this._powerNameKey + "EnemySpawnsDisabled");
CreativePowersHelper.AddPermissionTextIfNeeded((ICreativePower) this, ref originalText);
Main.instance.MouseTextNoOverride(originalText);
}
public override bool GetIsUnlocked() => true;
public void Save(Player player, BinaryWriter writer)
{
float num = this._cachePerPlayer[player.whoAmI];
writer.Write(num);
}
public void ResetDataForNewPlayer(Player player) => player.savedPerPlayerFieldsThatArentInThePlayerClass.spawnRatePowerSliderValue = this._sliderDefaultValue;
public void Load(Player player, BinaryReader reader, int gameVersionSaveWasMadeOn)
{
float num = reader.ReadSingle();
player.savedPerPlayerFieldsThatArentInThePlayerClass.spawnRatePowerSliderValue = num;
}
public void ApplyLoadedDataToOutOfPlayerFields(Player player) => this.PushChangeAndSetSlider(player.savedPerPlayerFieldsThatArentInThePlayerClass.spawnRatePowerSliderValue);
}
}
}