Overview
Pretendo desarrollar en forma de guía un sistema de información para cualquier tipo de nave, fácil de implementar y con comentarios acerca de la forma de desarrollar este sistema. [En construcción]
Preámbulo
El script que pretendo desarrollar y demostrar es un sistema sencillo y genérico para cualquier tipo de nave, para que el usuario pueda obtener información mediante los paneles LCD acerca del status general de los componentes y sistemas vitales, como oxígeno, energía, seguridad, integridad de los equipos funcionales, etc. La idea es que este sistema sea lo mas agnóstico al diseño de la nave o estación en donde se esté ejecutando, y además lo más fácil posible de instalar para los usuarios que no tienen conocimientos de programación.
El link del post original es el siguiente: [link]
Insisto en que esta guía está en construcción y va a ser editada con relativa frecuencia.
Edito: Esta es la primera actualización del script, cuando esté completo voy a crear la guía que explica cada sección del código y la información para aprender a escribir estos scripts.
Actualmente el sistema permite:
- Mostrar la información general de las baterías.
- Configurar a que porcentaje el sistema alertará sobre baterías bajas.
- Alertar con cambio de colores en las luces, y mensaje en panel designado por el usuario.
Las próximas mejoras serán:
- En cuanto a energía reducir la potencia máxima de los propulsores, y apagar algunos bloques
- En cuanto a otras funciones, me gustaria programar módulos de seguridad, información de presurización y oxígeno, inventario, y algunas utilidades y funciones para usuarios más avanzados y programadores.
En próximas actualizaciones detallaré las próximas mejoras.
Código
energiaActual += bateria.CurrentStoredPower;
maximaEnergia += bateria.MaxStoredPower;
funcionando = bateria.IsWorking;
var nombre = bateria.DisplayNameText;
//mensaje += string.Format(“n{0}: {1}”, nombre, funcionando ? “Ok” : “Apagado”);
//mensaje += string.Format(“nEnergía Almacenada actualmente: {0} MW”, bateria.CurrentStoredPower);
//mensaje += string.Format(“nCapacidad máxima: {0} MW”, bateria.MaxStoredPower);
//mensaje += string.Format(“nNivel de energía en las baterías: {0:F2}%”, 100d*(bateria.CurrentStoredPower/bateria.MaxStoredPower));
//mensaje += bateria.DetailedInfo;
}
mensaje += ” n================General Baterías================”;
double porcentaje = 100d*(energiaActual/maximaEnergia);
SeccionAdministracionBaterias(porcentaje);
mensaje += string.Format(“nNivel de energía en las baterías: {0:F2}%”, porcentaje);
}
Echo(“StatusBaterias -out”);
return mensaje;
}
public void SeccionAdministracionBaterias(double porcentaje)
{
if (porcentaje < BATERIA_BAJA)
{
var col = new Color(102, 0, 0);
var luces = SelectorLucesInteriores();
for (int i = 0; i < luces.Count; i++)
{
luces.SetValue(“Color”, col);
}
var msj = “Alerta!! La energía se está agotando! favor revisar status.nNivel de energía: ” +
porcentaje.ToString(“F”) + “%”;
EscribirEnPaneles(msj, NOMBRE_PANEL_EMERGENCIA, new Color(102, 0, 0));
//GridTerminalSystem.GetBlocksOfType<IMySoundBlock>(parlantes);
//for (int i = 0; parlantes.Count > i; i++)
//{
// if (parlantes.Name == NOMBRE_SOUND_BLOCK)
// {
// parlantes.GetActionWithName(“PlaySound”).Apply(parlantes);
// }
//}
}
else
{
Echo(“Porcentaje correcto”);
var luces = SelectorLucesInteriores();
for (int i = 0; i < luces.Count; i++)
{
if (luces.GetValue<Color>(“Color”) == new Color(102, 0, 0))
{
luces.SetValue(“Color”, new Color(255, 255, 255));
}
}
}
}
public string InformacionGeneral()
{
string mensaje;
mensaje = string.Format(“nn{0}”, DateTime.Now);
return mensaje;
}
public IList<IMyInteriorLight> SelectorLucesInteriores()
{
List<IMyTerminalBlock> lista = new List<IMyTerminalBlock>();
GridTerminalSystem.GetBlocksOfType<IMyInteriorLight>(lista);
List<IMyInteriorLight> luces = new List<IMyInteriorLight>();
for (int i = 0; i < lista.Count; i++)
{
var luz = lista as IMyInteriorLight;
luces.Add(luz);
}
return luces;
}
private void EscribirEnPaneles(string nombrePaneles, string mensaje)
{
GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(paneles);
if (paneles.Count > 0)
{
for (int i = 0; i < paneles.Count; i++)
if (paneles.DisplayNameText == nombrePaneles)
{
var panel = paneles as IMyTextPanel;
if (panel == null)
{
throw new Exception(“ha ocurrido un problema al intentar obtener el panel ” + nombrePaneles);
}
else
{
panel.ShowPublicTextOnScreen();
panel.WritePublicText(mensaje);
}
}
}
else
{
throw new Exception(“No hay paneles con el nombre ” + nombrePaneles + ” para escribir el mensaje.”);
}
}
private void EscribirEnPaneles(string nombrePaneles, string mensaje, Color color)
{
GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(paneles);
if (paneles.Count > 0)
{
for (int i = 0; i < paneles.Count; i++)
if (paneles.DisplayNameText == nombrePaneles)
{
var panel = paneles as IMyTextPanel;
if (panel == null)
{
throw new Exception(“Ha ocurrido un problema al intentar obtener el panel ” + nombrePaneles);
}
else
{
panel.SetValue(“FontColor”, color);
panel.WritePublicText(mensaje);
panel.ShowPublicTextOnScreen();
}
}
}
else
{
throw new Exception(“No hay paneles con el nombre ” + nombrePaneles + ” para escribir el mensaje.”);
}
}