private void SetHangarStatus(HangarStatus status) { source.Echo(string.Format("Setting Hangar Status to: {0}", status.ToString())); this.status = status; string data_string = status.ToString(); string screenString = "Status:\n {0}\nShip Name:\n {1}\nShip ID:\n {2}"; string ship_name = ""; string ship_id = ""; string data = source.Me.CustomData; if (status == HangarStatus.docked) { string[] saved_info = source.Me.CustomData.Split(','); if (saved_info.Count() != 3) { IMySensorBlock sensor = (IMySensorBlock)blocks["landing_sensor"]; ship_name = sensor.LastDetectedEntity.Name; ship_id = sensor.LastDetectedEntity.EntityId.ToString("X"); } else { ship_name = saved_info[1].Trim(); ship_id = saved_info[2].Trim(); } ship_id = ship_id.Substring(Math.Max(0, ship_id.Length - 8)); data_string = string.Format("{0},\n{1},\n{2}", data_string, ship_name, ship_id); } source.Me.CustomData = data_string; screen.WriteText(string.Format(screenString, status.ToString(), ship_name, ship_id)); }
override public void Load(System.IO.Stream fs, Plane sblock) { var data = new byte[STRUCTURE_SERIALIZER_LENGTH + BUILDING_SERIALIZER_LENGTH + WORKBUILDING_SERIALIZER_LENGTH]; fs.Read(data, 0, data.Length); LoadStructureData(data, sblock); LoadBuildingData(data, STRUCTURE_SERIALIZER_LENGTH); SetModelRotation(modelRotation); var hdata = new byte[6]; fs.Read(hdata, 0, hdata.Length); correctLocation = hdata[0] == 1; status = (HangarStatus)hdata[1]; if (status == HangarStatus.ShuttleInside || status == HangarStatus.ShuttleOnMission) { shuttleID = System.BitConverter.ToInt32(hdata, 2); } else { shuttleID = NO_SHUTTLE_VALUE; } if (status == HangarStatus.ConstructingShuttle & !subscribedToUpdate) { GameMaster.realMaster.labourUpdateEvent += LabourUpdate; subscribedToUpdate = true; } LoadWorkBuildingData(data, STRUCTURE_SERIALIZER_LENGTH + BUILDING_SERIALIZER_LENGTH); if (shuttleID >= nextShuttleID) { nextShuttleID = shuttleID + 1; } }
public void Deserialize(string serialized) { var split = serialized.Split('|'); hangarStatus = (HangarStatus)int.Parse(split[0]); OwnerID = long.Parse(split[1]); }
public void TakeRequest(long requesterID, HangarRequest request, TimeSpan timestamp) { if (request == HangarRequest.RequestDock) { if (OwnerID != -1 && OwnerID != requesterID) { return; } Claim(requesterID, timestamp); MakeReadyToDock(); } else if (request == HangarRequest.Reserve) { if (OwnerID != -1 && OwnerID != requesterID) { return; } Claim(requesterID, timestamp); hangarStatus |= HangarStatus.Reserved; } else if (request == HangarRequest.Unclaim) { if (OwnerID != requesterID) { return; } Unclaim(); } else if (request == HangarRequest.RequestLaunch) { lastLaunchTime = timestamp; MakeReadyToLaunch(); } }
void MakeReadyToLaunch() { OpenGates(); if (HasClearance()) { hangarStatus |= HangarStatus.Launching; } }
void MakeReadyToDock() { OpenGates(); if (HasClearance()) { hangarStatus |= HangarStatus.Docking; } }
public void Clear() { Connector = null; DirectionIndicator = null; gates.Clear(); lights.Clear(); display = null; OwnerID = 0; hangarStatus = HangarStatus.None; }
public void StartConstruction() { if (status == HangarStatus.NoShuttle) { status = HangarStatus.ConstructingShuttle; if (!subscribedToUpdate) { GameMaster.realMaster.labourUpdateEvent += LabourUpdate; subscribedToUpdate = true; } } }
public void IGCUnpackInto(MyTuple <MyTuple <MatrixD, float, float, Vector3D, double, Vector3D>, MyTuple <long, int, int, string>, MyTuple <long, string> > unpacked) { WorldMatrix = unpacked.Item1.Item1; UndockFar = unpacked.Item1.Item2; UndockNear = unpacked.Item1.Item3; CurrentVelocity = unpacked.Item1.Item4; CurrentCanonicalTime = TimeSpan.FromMilliseconds(unpacked.Item1.Item5); IndicatorDir = unpacked.Item1.Item6; OwnerID = unpacked.Item2.Item1; Status = (HangarStatus)unpacked.Item2.Item2; Tags = (HangarTags)unpacked.Item2.Item3; HangarChannelTag = unpacked.Item2.Item4; ID = unpacked.Item3.Item1; DisplayName = unpacked.Item3.Item2; }
override protected void LabourResult() { shuttleID = nextShuttleID++; status = HangarStatus.ShuttleInside; if (workersCount > 0) { FreeWorkers(); } workflow = 0f; listChangesMarkerValue++; if (showOnGUI) { hangarObserver.PrepareHangarWindow(); } GameLogUI.MakeAnnouncement(Localization.GetPhrase(LocalizedPhrase.ShuttleConstructed)); }
public void Update(TimeSpan timestamp, Dictionary <MyTuple <IntelItemType, long>, IFleetIntelligence> intelItems) { if (Connector == null) { return; } if (!init) { init = true; if (Connector.Status == MyShipConnectorStatus.Connected) { hangarStatus |= HangarStatus.Reserved; OwnerID = Connector.OtherConnector.CubeGrid.EntityId; } } UpdateHangarStatus(timestamp, intelItems); }
override protected void LabourResult(int iterations) { if (iterations < 1) { return; } shuttleID = nextShuttleID++; status = HangarStatus.ShuttleInside; if (workersCount > 0) { FreeWorkers(); } workflow = 0f; listChangesMarkerValue++; if (showOnGUI) { hangarObserver.PrepareHangarWindow(); } AnnouncementCanvasController.MakeAnnouncement(Localization.GetPhrase(LocalizedPhrase.ShuttleConstructed)); }
public void StopConstruction() { if (status == HangarStatus.ConstructingShuttle) { status = HangarStatus.NoShuttle; var cost = ResourcesCost.GetCost(ResourcesCost.SHUTTLE_BUILD_COST_ID); float pc = workflow / workComplexityCoefficient; for (int i = 0; i < cost.Length; i++) { cost[i] = cost[i].ChangeVolumeToPercent(1f - pc); } colony.storage.AddResources(cost); workflow = 0f; if (subscribedToUpdate) { GameMaster.realMaster.labourUpdateEvent -= LabourUpdate; subscribedToUpdate = false; } } }
override public void SetBasement(Plane b, PixelPosByte pos) { if (b == null) { return; } if (!GameMaster.loading) { if (!hangarsList.Contains(this)) { status = HangarStatus.NoShuttle; shuttleID = NO_SHUTTLE_VALUE; hangarsList.Add(this); } } else { if (!hangarsList.Contains(this)) { hangarsList.Add(this); } } SetWorkbuildingData(b, pos); if (!GameMaster.loading) { CheckPositionCorrectness(); } else { if (!subscribedToRestoreBlockersEvent) { GameMaster.realMaster.blockersRestoreEvent += RestoreBlockers; subscribedToRestoreBlockersEvent = true; } } }
void UpdateHangarStatus(TimeSpan timestamp, Dictionary <MyTuple <IntelItemType, long>, IFleetIntelligence> intelItems) { bool ClaimElapsed = lastClaimTime + kClaimTimeout < timestamp; bool LaunchElapsed = lastLaunchTime + kLaunchTimeout < timestamp; if ((hangarStatus & HangarStatus.Reserved) == 0) { if (ClaimElapsed && Connector.Status != MyShipConnectorStatus.Connected) { OwnerID = -1; } } else { if (OwnerID == -1) { Unclaim(); } else if (ClaimElapsed && Connector.Status != MyShipConnectorStatus.Connected) { var intelKey = MyTuple.Create(IntelItemType.Friendly, OwnerID); if (!intelItems.ContainsKey(intelKey)) { Unclaim(); return; } if (((FriendlyShipIntel)intelItems[intelKey]).HomeID != Connector.EntityId) { Unclaim(); } } } if (ClaimElapsed) { if ((hangarStatus & HangarStatus.Docking) != 0) { CloseGates(); hangarStatus &= ~HangarStatus.Docking; } } if (LaunchElapsed) { if ((hangarStatus & HangarStatus.Launching) != 0) { CloseGates(); hangarStatus &= ~HangarStatus.Launching; } } if ((hangarStatus & (HangarStatus.Docking | HangarStatus.Launching)) != 0) { SetLights(Color.Yellow); } else if (!HasClearance()) { SetLights(Color.Red); } else { SetLights(Color.Green); } }
void Unclaim() { hangarStatus &= ~HangarStatus.Reserved; }