コード例 #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 SendVesselResources(Vessel vessel)
        {
            _resources.Clear();

            var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <VesselResourceMsgData>();

            msgData.GameTime = TimeSyncerSystem.UniversalTime;
            msgData.VesselId = vessel.id;

            for (var i = 0; i < vessel.protoVessel.protoPartSnapshots.Count; i++)
            {
                for (var j = 0; j < vessel.protoVessel.protoPartSnapshots[i].resources.Count; j++)
                {
                    var protoResource = vessel.protoVessel.protoPartSnapshots[i].resources[j];
                    var resource      = vessel.protoVessel.protoPartSnapshots[i].resources[j].resourceRef;

                    if (resource == null)
                    {
                        continue;
                    }

                    var resourceInfo = new VesselResourceInfo
                    {
                        ResourceName = resource.resourceName,
                        PartFlightId = vessel.protoVessel.protoPartSnapshots[i].flightID,
                        Amount       = resource.amount,
                        FlowState    = resource.flowState
                    };

                    //Now update the proto values our vessel...
                    protoResource.amount    = resource.amount;
                    protoResource.flowState = resource.flowState;

                    _resources.Add(resourceInfo);
                }
            }

            msgData.Resources = _resources.ToArray();

            //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);
        }