a75a560...814f6c9

commit 814f6c9dd4d48b3931e1d3bcb1918ff79324c1d4
Author: Joonas Rikkonen <poe.regalis@gmail.com>
Date:   Wed Mar 20 19:33:18 2019 +0200

    Fixed multiplayer campaign setup UI showing the client's subs instead of the server's (see #1311)

commit 4a3e485dea85aa21037b13fd1b86af4a4ec1a5fd
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 19:16:17 2019 +0200

    Move new texts in the end of the localization file.

commit 5a8af99afe5aad0b2f5343ca6f923d8c7eb19e68
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 19:05:43 2019 +0200

    Recreate the editing gui window when resetting the entities with the "resetall" command.

commit 0048e6dcb9699e5b1e434ace867bc8f426cdae28
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 19:04:42 2019 +0200

    Fix resetting to prefab.

commit 88be0923761f5ac2c895364c8ad0e11fe9a66576
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 18:40:13 2019 +0200

    Fix item components not being loaded properly.

commit 6f970d54ed800eff25ae3643b03c0020336c8621
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 18:21:25 2019 +0200

    Add a console command for resetting all items and structures to the prefabs.

commit bd561ef43391a2e4251bef18a8738b233f540961
Merge: e8843c30c a75a56088
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 17:47:14 2019 +0200

    Merge branch 'dev' of https://github.com/Regalis11/Barotrauma-development into dev

commit e8843c30cdb966832236ec361494e4c886130590
Author: itchyOwl <lauri.harkanen@gmail.com>
Date:   Wed Mar 20 17:46:38 2019 +0200

    Implement item and structure instance resetting to prefab. Add buttons in the subeditor. Allow to save the msg text in the editor.
This commit is contained in:
Joonas Rikkonen
2019-03-20 19:34:53 +02:00
parent 579e7f9abc
commit c78546b5f4
14 changed files with 187 additions and 170 deletions
@@ -51,6 +51,8 @@ namespace Barotrauma.Items.Components
public ItemComponent Parent;
public readonly XElement originalElement;
protected const float CorrectionDelay = 1.0f;
protected CoroutineHandle delayedCorrectionCoroutine;
protected float correctionTimer;
@@ -64,11 +66,7 @@ namespace Barotrauma.Items.Components
set;
}
public readonly Dictionary<string, SerializableProperty> properties;
public Dictionary<string, SerializableProperty> SerializableProperties
{
get { return properties; }
}
public Dictionary<string, SerializableProperty> SerializableProperties { get; protected set; }
public virtual bool IsActive
{
@@ -194,7 +192,7 @@ namespace Barotrauma.Items.Components
get { return name; }
}
[Editable, Serialize("", false)]
[Editable, Serialize("", true)]
public string Msg
{
get { return msg; }
@@ -210,8 +208,9 @@ namespace Barotrauma.Items.Components
public ItemComponent(Item item, XElement element)
{
this.item = item;
originalElement = element;
name = element.Name.ToString();
properties = SerializableProperty.GetProperties(this);
SerializableProperties = SerializableProperty.GetProperties(this);
requiredItems = new Dictionary<RelatedItem.RelationType, List<RelatedItem>>();
requiredSkills = new List<Skill>();
@@ -245,18 +244,9 @@ namespace Barotrauma.Items.Components
DebugConsole.ThrowError("Invalid pick key in " + element + "!", e);
}
properties = SerializableProperty.DeserializeProperties(this, element);
#if CLIENT
string msg = TextManager.Get(Msg, true);
if (msg != null)
{
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
{
msg = msg.Replace("[" + inputType.ToString().ToLowerInvariant() + "]", GameMain.Config.KeyBind(inputType).ToString());
}
Msg = msg;
}
#endif
SerializableProperties = SerializableProperty.DeserializeProperties(this, element);
ParseMsg();
foreach (XElement subElement in element.Elements())
{
switch (subElement.Name.ToString().ToLowerInvariant())
@@ -318,7 +308,6 @@ namespace Barotrauma.Items.Components
item.AddComponent(ic);
break;
}
}
}
@@ -623,87 +612,13 @@ namespace Barotrauma.Items.Components
public virtual void Load(XElement componentElement)
{
if (componentElement == null) return;
foreach (XAttribute attribute in componentElement.Attributes())
{
if (!properties.TryGetValue(attribute.Name.ToString().ToLowerInvariant(), out SerializableProperty property)) continue;
if (!SerializableProperties.TryGetValue(attribute.Name.ToString().ToLowerInvariant(), out SerializableProperty property)) continue;
property.TrySetValue(this, attribute.Value);
}
#if CLIENT
string msg = TextManager.Get(Msg, true);
if (msg != null)
{
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
{
msg = msg.Replace("[" + inputType.ToString().ToLowerInvariant() + "]", GameMain.Config.KeyBind(inputType).ToString());
}
Msg = msg;
}
#endif
var prevRequiredItems = new Dictionary<RelatedItem.RelationType, List<RelatedItem>>(requiredItems);
bool overrideRequiredItems = false;
foreach (XElement subElement in componentElement.Elements())
{
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
{
case "requireditem":
if (!overrideRequiredItems) requiredItems.Clear();
overrideRequiredItems = true;
RelatedItem newRequiredItem = RelatedItem.Load(subElement, item.Name);
if (newRequiredItem == null) continue;
var prevRequiredItem = prevRequiredItems.ContainsKey(newRequiredItem.Type) ?
prevRequiredItems[newRequiredItem.Type].Find(ri => ri.JoinedIdentifiers == newRequiredItem.JoinedIdentifiers) : null;
if (prevRequiredItem != null)
{
newRequiredItem.statusEffects = prevRequiredItem.statusEffects;
newRequiredItem.Msg = prevRequiredItem.Msg;
}
if (!requiredItems.ContainsKey(newRequiredItem.Type))
{
requiredItems[newRequiredItem.Type] = new List<RelatedItem>();
}
requiredItems[newRequiredItem.Type].Add(newRequiredItem);
break;
}
Msg = msg;
}
#endif
// Only door override required items
//var prevRequiredItems = new Dictionary<RelatedItem.RelationType, List<RelatedItem>>(requiredItems);
//bool overrideRequiredItems = false;
//foreach (XElement subElement in componentElement.Elements())
//{
// switch (subElement.Name.ToString().ToLowerInvariant())
// {
// case "requireditem":
// if (!overrideRequiredItems) requiredItems.Clear();
// overrideRequiredItems = true;
// RelatedItem newRequiredItem = RelatedItem.Load(subElement, item.Name);
// if (newRequiredItem == null) continue;
// var prevRequiredItem = prevRequiredItems.ContainsKey(newRequiredItem.Type) ?
// prevRequiredItems[newRequiredItem.Type].Find(ri => ri.JoinedIdentifiers == newRequiredItem.JoinedIdentifiers) : null;
// if (prevRequiredItem != null)
// {
// newRequiredItem.statusEffects = prevRequiredItem.statusEffects;
// newRequiredItem.Msg = prevRequiredItem.Msg;
// }
// if (!requiredItems.ContainsKey(newRequiredItem.Type))
// {
// requiredItems[newRequiredItem.Type] = new List<RelatedItem>();
// }
// requiredItems[newRequiredItem.Type].Add(newRequiredItem);
// break;
// }
//}
ParseMsg();
OverrideRequiredItems(componentElement);
}
/// <summary>
@@ -794,5 +709,47 @@ namespace Barotrauma.Items.Components
parentElement.Add(componentElement);
return componentElement;
}
public virtual void Reset()
{
SerializableProperties = SerializableProperty.DeserializeProperties(this, originalElement);
ParseMsg();
OverrideRequiredItems(originalElement);
}
private void OverrideRequiredItems(XElement element)
{
var prevRequiredItems = new Dictionary<RelatedItem.RelationType, List<RelatedItem>>(requiredItems);
bool overrideRequiredItems = false;
foreach (XElement subElement in element.Elements())
{
switch (subElement.Name.ToString().ToLowerInvariant())
{
case "requireditem":
if (!overrideRequiredItems) requiredItems.Clear();
overrideRequiredItems = true;
RelatedItem newRequiredItem = RelatedItem.Load(subElement, item.Name);
if (newRequiredItem == null) continue;
var prevRequiredItem = prevRequiredItems.ContainsKey(newRequiredItem.Type) ?
prevRequiredItems[newRequiredItem.Type].Find(ri => ri.JoinedIdentifiers == newRequiredItem.JoinedIdentifiers) : null;
if (prevRequiredItem != null)
{
newRequiredItem.statusEffects = prevRequiredItem.statusEffects;
newRequiredItem.Msg = prevRequiredItem.Msg;
}
if (!requiredItems.ContainsKey(newRequiredItem.Type))
{
requiredItems[newRequiredItem.Type] = new List<RelatedItem>();
}
requiredItems[newRequiredItem.Type].Add(newRequiredItem);
break;
}
}
}
partial void ParseMsg();
}
}