public void SendPacket(DataController.PacketType packetType, string contents)
 {
     client.Connection.SendPacket((int)packetType, contents);
 }
 public void PacketRecieved(DataController.PacketType packetType, string contents)
 {
 }
        public void PacketRecieved(DataController.PacketType packetType, string contents)
        {
            switch (packetType)
            {
            case DataController.PacketType.StartRayTracer:
                Debug.Log("Raytrace start");
                DataController.Instance.rayTracing = true;
                RayTraceController.Instance.StartRayTracing();
                break;

            case DataController.PacketType.StopRayTracer:
                Debug.Log("Raytrace stop");
                DataController.Instance.rayTracing = false;
                RayTraceController.Instance.StopRayTracing();
                break;

            case DataController.PacketType.UpdateHitPositionsSendRate:
                float parseHitPositionsSendRate;
                if (float.TryParse(contents, out parseHitPositionsSendRate))
                {
                    Debug.Log("Hit positions send rate set to " + parseHitPositionsSendRate);
                    DataController.Instance.hitPositionsSendRate = parseHitPositionsSendRate;
                }
                break;

            case DataController.PacketType.UpdateRayTracerGap:
                float parseRayTracerGap;
                if (float.TryParse(contents, out parseRayTracerGap))
                {
                    Debug.Log("Ray tracer gap set to " + parseRayTracerGap);
                    DataController.Instance.rayTracerGap = parseRayTracerGap;
                }
                break;

            case DataController.PacketType.UpdateNetworkedObjectSendRate:
                float parseNetworkObjectSendRate;
                if (float.TryParse(contents, out parseNetworkObjectSendRate))
                {
                    Debug.Log("Networked Object send rate set to " + parseNetworkObjectSendRate);
                    DataController.Instance.networkedObjectSendRate = parseNetworkObjectSendRate;
                }
                break;

            case DataController.PacketType.UpdatePointCloudPointSize:
                float parsePointCloudPointSize;
                if (float.TryParse(contents, out parsePointCloudPointSize))
                {
                    Debug.Log("Point cloud point size send rate set to " + parsePointCloudPointSize);
                    DataController.Instance.pointCloudPointSize = parsePointCloudPointSize;
                }
                break;

            case DataController.PacketType.FinishedSyncing:
                Debug.Log(DataController.Instance.networkedObjectDictionary.Count + " objects synced");
                Timing.RunCoroutine(SendPerformanceData(), "SendPerformanceData");
                DataController.Instance.applicationState = DataController.ApplicationState.Server;
                break;

            case DataController.PacketType.UpdateCentralCar:
                int parseObjID;
                if (int.TryParse(contents, out parseObjID))
                {
                    Debug.Log("Central car set to network object with ID of " + parseObjID);
                    DataController.Instance.centralCar = DataController.Instance.networkedObjectDictionary[parseObjID].GetComponent <CarController>();
                    DataController.Instance.centralCar.gameObject.SetActive(true);
                    SensorManager.Instance.transform.parent           = DataController.Instance.centralCar.transform;
                    SensorManager.Instance.transform.localPosition    = Vector3.zero;
                    SensorManager.Instance.transform.localEulerAngles = Vector3.zero;
                }

                break;

            case DataController.PacketType.UpdateGroundUndetectable:
                if (bool.Parse(contents))
                {
                    foreach (Transform go in DataController.Instance.groundTrack.GetComponentInChildren <Transform>())
                    {
                        go.gameObject.layer = 0;
                    }
                }
                else
                {
                    foreach (Transform go in DataController.Instance.groundTrack.GetComponentInChildren <Transform>())
                    {
                        go.gameObject.layer = 8;
                    }
                }

                Debug.Log("Ground undetectable set to " + contents);
                break;

            case DataController.PacketType.SetSensorDisabled:
                int parseSensorID;
                if (int.TryParse(contents, out parseSensorID))
                {
                    Debug.Log("Sensor " + parseSensorID + " set to disabled");
                    DataController.Instance.activeSensors[(DataController.SensorType)parseSensorID] = false;
                    SensorManager.Instance.ToggleSensor((DataController.SensorType)parseSensorID, false);
                }
                break;

            case DataController.PacketType.SetSensorEnabled:
                int parseSensorID2;
                if (int.TryParse(contents, out parseSensorID2))
                {
                    Debug.Log("Sensor " + parseSensorID2 + " set to enabled");
                    DataController.Instance.activeSensors[(DataController.SensorType)parseSensorID2] = true;
                    SensorManager.Instance.ToggleSensor((DataController.SensorType)parseSensorID2, true);
                }
                break;
            }
        }