123 lines
3.4 KiB
C#
123 lines
3.4 KiB
C#
using System;
|
|
using System.Xml.Linq;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
partial class MiniMap : Powered
|
|
{
|
|
class HullData
|
|
{
|
|
public float? Oxygen;
|
|
public float? Water;
|
|
}
|
|
|
|
private DateTime resetDataTime;
|
|
|
|
bool hasPower;
|
|
|
|
[Editable, HasDefaultValue(false, true)]
|
|
public bool RequireWaterDetectors
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
[Editable, HasDefaultValue(true, true)]
|
|
public bool RequireOxygenDetectors
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
[Editable, HasDefaultValue(false, true)]
|
|
public bool ShowHullIntegrity
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
|
|
private Dictionary<Hull, HullData> hullDatas;
|
|
|
|
public MiniMap(Item item, XElement element)
|
|
: base(item, element)
|
|
{
|
|
IsActive = true;
|
|
|
|
hullDatas = new Dictionary<Hull, HullData>();
|
|
}
|
|
|
|
public override void Update(float deltaTime, Camera cam)
|
|
{
|
|
//periodically reset all hull data
|
|
//(so that outdated hull info won't be shown if detectors stop sending signals)
|
|
if (DateTime.Now > resetDataTime)
|
|
{
|
|
hullDatas.Clear();
|
|
resetDataTime = DateTime.Now + new TimeSpan(0, 0, 1);
|
|
}
|
|
|
|
currPowerConsumption = powerConsumption;
|
|
|
|
hasPower = voltage > minVoltage;
|
|
|
|
voltage = 0.0f;
|
|
}
|
|
|
|
public override bool Pick(Character picker)
|
|
{
|
|
if (picker == null) return false;
|
|
|
|
//picker.SelectedConstruction = item;
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0)
|
|
{
|
|
base.ReceiveSignal(stepsTaken, signal, connection, source, sender, power);
|
|
|
|
if (sender == null || sender.CurrentHull == null) return;
|
|
|
|
Hull senderHull = sender.CurrentHull;
|
|
|
|
HullData hullData;
|
|
if (!hullDatas.TryGetValue(senderHull, out hullData))
|
|
{
|
|
hullData = new HullData();
|
|
hullDatas.Add(senderHull, hullData);
|
|
}
|
|
|
|
switch (connection.Name)
|
|
{
|
|
case "water_data_in":
|
|
//cheating a bit because water detectors don't actually send the water level
|
|
if (source.GetComponent<WaterDetector>() == null)
|
|
{
|
|
hullData.Water = Rand.Range(0.0f, 1.0f);
|
|
}
|
|
else
|
|
{
|
|
hullData.Water = Math.Min(senderHull.Volume / senderHull.FullVolume, 1.0f);
|
|
}
|
|
break;
|
|
case "oxygen_data_in":
|
|
float oxy;
|
|
|
|
if (!float.TryParse(signal, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out oxy))
|
|
{
|
|
oxy = Rand.Range(0.0f, 100.0f);
|
|
}
|
|
|
|
hullData.Oxygen = oxy;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|