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));
            }
Example #2
0
    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;
 }
Example #8
0
 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;
 }
Example #10
0
 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);
        }
Example #12
0
 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));
 }
Example #13
0
 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;
         }
     }
 }
Example #14
0
 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;
 }