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