using System; using System.Collections.Generic; using System.IO; using System.Linq; public class Condition { public static readonly Dictionary conditionsType = new Dictionary { {0, "Dock to"}, {1, "Land at"}, {2, "Rescew kerbal"}, {3, "Orbit"} }; public int id; public byte type; public Object[] param; //OnAir public bool completed = false; public Condition(byte type) { this.type = type; switch (type) { case 0: param = new object[] { 0 }; break; case 1: param = new object[] { "" }; break; case 2: param = new object[] { 0 }; break; case 3: param = new object[] { "", 0f, 0f, 0f, 0f }; break; } } public string GetDisplayString(MissionData data) { switch (type) { case 0: MissionTarget target = data.missionTarget.ElementAtOrDefault((int)param[0]); if (target == null || target.isKerbal) return "Dock to"; return "Dock to " + target.targetName + " around " + target.celestialBody; case 1: return "Land at " + param[0]; case 2: target = data.missionTarget.ElementAtOrDefault((int)param[0]); if (target == null || !target.isKerbal) return "Dock to"; return "Rescew " + target.targetName + " around " + target.celestialBody; case 3: return "Orbit around " + param[0]; } return conditionsType[type]; } public int GetDependencies() { switch (type) { case 2: case 0: return (int)param[0]; default: return -1; } } public static void ConditionDataToBinary(Condition condition, BinaryWriter dataoutput) { Packet.writeByte(condition.type, dataoutput); Packet.writeInt(condition.id,dataoutput); if (condition.type == 0) { Packet.writeInt((int)condition.param[0], dataoutput); } else if (condition.type == 1) { Packet.writeString((string)condition.param[0], dataoutput); } else if (condition.type == 2) { Packet.writeInt((int)condition.param[0], dataoutput); } else if (condition.type == 3) { Packet.writeString((string)condition.param[0], dataoutput); Packet.writeFloat((float)condition.param[1], dataoutput); Packet.writeFloat((float)condition.param[2], dataoutput); Packet.writeFloat((float)condition.param[3], dataoutput); Packet.writeFloat((float)condition.param[4], dataoutput); Packet.writeFloat((float)condition.param[5], dataoutput); Packet.writeFloat((float)condition.param[6], dataoutput); Packet.writeFloat((float)condition.param[7], dataoutput); Packet.writeFloat((float)condition.param[8], dataoutput); } } public static Condition BinaryToConditionData(BinaryReader datainput){ Condition condition = new Condition(Packet.readByte(datainput)); condition.id = Packet.readInt(datainput); if(condition.type==0){ condition.param[0] = Packet.readInt(datainput); }else if(condition.type==1){ condition.param[0] = Packet.readString(datainput); }else if(condition.type==2){ condition.param[0] = Packet.readInt(datainput); } else if (condition.type == 3) { condition.param[0] = Packet.readString(datainput); condition.param[1] = Packet.readFloat(datainput); condition.param[2] = Packet.readFloat(datainput); condition.param[3] = Packet.readFloat(datainput); condition.param[4] = Packet.readFloat(datainput); condition.param[5] = Packet.readFloat(datainput); condition.param[6] = Packet.readFloat(datainput); condition.param[7] = Packet.readFloat(datainput); condition.param[8] = Packet.readFloat(datainput); } return condition; } }