示例#1
0
        public void SendVesselResources(Vessel vessel)
        {
            var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <VesselResourceMsgData>();

            msgData.VesselId = vessel.id;

            var resourcesCount = GetResourcesCount(vessel);

            if (resourcesCount == 0)
            {
                return;                      //No need to send msg if there's no resources in the vessel
            }
            msgData.ResourcesCount = resourcesCount;

            if (_resources.Length < resourcesCount)
            {
                _resources = new VesselResourceInfo[resourcesCount];
            }

            var resourceIndex = 0;

            for (var i = 0; i < vessel.Parts.Count; i++)
            {
                for (var j = 0; j < vessel.Parts[i].Resources.Count; j++)
                {
                    if (_resources[resourceIndex] == null)
                    {
                        _resources[resourceIndex] = new VesselResourceInfo();
                    }

                    _resources[resourceIndex].ResourceName = vessel.Parts[i].Resources[j].resourceName;
                    _resources[resourceIndex].PartFlightId = vessel.Parts[i].flightID;
                    _resources[resourceIndex].Amount       = vessel.Parts[i].Resources[j].amount;

                    resourceIndex++;
                }
            }

            if (msgData.Resources.Length < resourcesCount)
            {
                msgData.Resources = new VesselResourceInfo[resourcesCount];
            }

            Array.Copy(_resources, msgData.Resources, resourcesCount);

            //Update our own values in the store aswell as otherwise if we leave the vessel it can still be in the safety bubble
            VesselsProtoStore.UpdateVesselProtoResources(msgData);

            SendMessage(msgData);
        }
示例#2
0
        public void HandleMessage(IServerMessageBase msg)
        {
            if (!(msg.Data is VesselResourceMsgData msgData))
            {
                return;
            }

            //Vessel might exist in the store but not in game (if the vessel is in safety bubble for example)
            VesselsProtoStore.UpdateVesselProtoResources(msgData);

            var vessel = FlightGlobals.FindVessel(msgData.VesselId);

            if (vessel == null)
            {
                return;
            }

            UpdateProtoVesselResources(vessel.protoVessel, msgData);
        }