using System;
//Berechnet die Flugdauer, die Lagerkapzität sowie den Verbaucht
namespace Frohgame
{
public class MathFleet
{
public class ObjectOffset
{
public int Antrieb;
public int Mutli;
public int Speed1;
public int Speed2;
public int Verbrauch;
public int Platz;
public int Count;
}
/// <summary>
/// Diese Daten müssen alle vorher Gesetzt werden!
/// </summary>
private SetDatas read = new SetDatas ();
public class SetDatas
{
public int Verbrennungstriebwerk = 6;
public int Impuls = 0;
public int Hyper = 0;
public bool isSpeedFactor = false;
public int Speed = 100;
//Galaxywerte
public int StartGalaxy = 7;
public int StartSystem = 22;
public int StartPlanet = 12;
public int TargetGalaxy = 8;
public int TargetSystem = 22;
public int TargetPlanet = 12;
//Schiff Counter da wird bisschen Komplizierter als ich dachte
public int LightFighterCount = 4;
}
public class FleetData
{
Dictionary<int, ObjectOffset> Offsets = new Dictionary<int, ObjectOffset> ();
public FleetData ()
{
//Todo weitere Daten hinzufügen
Offsets.Add (
(int)FROHGAME.Core.Military.LightFighter,
new ObjectOffset () {
Antrieb = 115,
Multi = 10,
Speed1 = 12500,
Speed2 = 0,
Verbrauch = 20,
Platz = 50,
Count = read.LightFighterCount,
}
);
return 0;
}
}
public int Distance (int StartGalaxy, int StartSystem,
int StartPlanet, int TargetGalaxy,
int TargetSystem, int TargetPlanet)
{
int dist = 0;
if ((TargetGalaxy - StartGalaxy) != 0) {
dist = Math.Abs (TargetGalaxy - StartGalaxy) * 20000;
} else if ((TargetSystem - StartSystem) != 0) {
dist = Math.Abs (TargetSystem - StartSystem) * 5 * 19 + 2700;
} else if ((TargetPlanet - StartPlanet) != 0) {
dist = Math.Abs (TargetPlanet - StartPlanet) * 5 + 1000;
} else {
dist = 5;
}
return dist;
}
public int Duration ()
{
int SpeedFactor = 1;
if (read.isSpeedFactor) {
SpeedFactor = 2;
}
int msp = MaxSpeed ();
int dis = Distance ();
int ret = Math.Round (((35000 / read.Speed * Math.sqrt (dist * 10 / msp) + 10) / speedfactor));
return ret;
}
public int Consumption ()
{
int Consumption = 0;
int BasicConsumption = 0;
int Values;
int i;
int msp = MaxSpeed ();
int sp = Speed;
int dist = Distance ();
int dur = Duration ();
int SpeedFactor = 1;
if (read.isSpeedFactor) {
SpeedFactor = 2;
}
ObjectOffset offset;
for (ID = 202; ID <= 215; ID++) {
offset = Offsets [ID];
if (ID != 212) {
if (offset.Count > 0) {
int shipspeed = GetSpeed (ID);
spd = 35000 / (dur * SpeedFactor - 10) * Math.Sqrt (dist * 10 / shipspeed);
BasicConsumption = offset.Verbrauch * offset.Count;
Consumption += BasicConsumption * dist / 35000 * ((spd / 10) + 1) * ((spd / 10) + 1);
}
}
}
Consumption = Math.Round (Consumption) + 1;
return Consumption;
}
//int dis = Distance();
//Hier muss die ID der Flotte angeben Like: FROHGAME.Core.Military.LightFighter
public int GetSpeed (int element)
{
ObjectOffset offset = Offsets [element];
int Antrieb = offset.Antrieb;
int Multi = offset.Mutli;
int Speed1 = offset.Speed1;
int Speed2 = offset.Speed2;
if ((element == 202) && (offset.Antrieb >= 4)) {
Multi = 20;
stufe = read.Verbrennungstriebwerk;
Speed1 = Speed2;
}
if ((element == 211) && (offset.Antrieb >= 7)) {
Mutli = 30;
stufe = read.Impuls;
Speed1 = Speed2;
Speed1 = Speed1 + Speed1 * stufe * mutli / 100;
return Speed1;
}
}
public int MaxSpeed ()
{
ObjectOffset offset = Offsets;
int msp = 1000000000;
for (ID = 202; id <= 215; ID++) {
offset = Offsets [ID];
if (ID != 212) {
if (offset.Count > 0) {
speed = GetSpeed (ID);
msp = Math.Min (msp, speed);
}
}
}
return msp;
}
}
}