示例#1
0
    //send as packed struct
    public void Send(FullDataFrame data)
    {
        byte[]        dataBytes = new byte[messageLen];             //declare byte array and initialize its size
        System.IntPtr ptr       = Marshal.AllocHGlobal(messageLen); //pointer to byte array

        Marshal.StructureToPtr(data, ptr, true);
        Marshal.Copy(ptr, dataBytes, 0, messageLen);
        Marshal.FreeHGlobal(ptr);

        Send(dataBytes);
    }
示例#2
0
    void Update()
    {
        float yaw  = (transform.localRotation.eulerAngles.y - lastYaw) / Time.deltaTime;
        float roll = (transform.localRotation.eulerAngles.z - lastRoll) / Time.deltaTime;

        lastRoll = transform.localRotation.eulerAngles.z;
        lastYaw  = transform.localRotation.eulerAngles.y;

        if (Time.time - lastSend < sendRate)
        {
            return;
        }

        float time = Time.time;

        //GearPosActual
        int gear = vehicleController.IsShifting ? -3 : vehicleController.Gear;

        //AcceleratorPedalPos
        int pedalPos = Mathf.RoundToInt(Mathf.Clamp01(vehicleController.accellInput) * 100);

        //DeceleratorPedalPos
        int brakePos = Mathf.RoundToInt(Mathf.Clamp(-1, 0, vehicleController.accellInput) * 100);

        //SteeringWheelAngle
        int wheelAngle = Mathf.RoundToInt(vehicleController.steerInput * 720);

        //VehicleSpeed
        float kmh = rb.velocity.magnitude * 3.6f;
        //TODO: calculate this from wheel rpm

        FullDataFrame frame = new FullDataFrame()
        {
            time                   = time,
            cruiseSpeed            = 0f,
            rpm                    = vehicleController.RPM,
            gearPosActual          = gear,
            gearPosTarget          = vehicleController.Gear,
            accelleratorPos        = pedalPos,
            deceleratorPos         = brakePos,
            rollRate               = roll,
            steeringWheelAngle     = wheelAngle,
            vehicleSpeed           = kmh,
            vehicleSpeedOverGround = kmh,
            wheelSpeedFL           = vehicleController.WheelFL.rpm * 60,
            wheelSpeedFR           = vehicleController.WheelFR.rpm * 60,
            wheelSpeedRL           = vehicleController.WheelRL.rpm * 60,
            wheelSpeedRR           = vehicleController.WheelRR.rpm * 60,
            yawRate                = yaw
        };

        dataStream.SendAsText(frame);
    }
示例#3
0
 public void SendAsText(FullDataFrame frame)
 {
     foreach (var connection in connections)
     {
         byte[] data;
         if (connection.IC)
         {
             data = Encoding.ASCII.GetBytes(frame.ToICCSV());
         }
         else
         {
             data = Encoding.ASCII.GetBytes(frame.ToCSV());
         }
         SendTCP(data, connection.client);
     }
 }
示例#4
0
 public void SendAsText(FullDataFrame frame)
 {
     foreach (var connection in connections)
     {
         if (connection != null)
         {
             byte[] data;
             if (connection.IC)
             {
                 data = Encoding.ASCII.GetBytes(frame.ToICCSV());
                 SendTCP(data, connection.client);
             }
             else if (connection.events)
             {
                 //do nothing here, event frames sent on their own
             }
             else
             {
                 data = Encoding.ASCII.GetBytes(frame.ToCSV());
                 SendTCP(data, connection.client);
             }
         }
     }
 }
示例#5
0
    void Update()
    {
        float yaw  = (transform.localRotation.eulerAngles.y - lastYaw) / Time.deltaTime;
        float roll = (transform.localRotation.eulerAngles.z - lastRoll) / Time.deltaTime;

        lastRoll = transform.localRotation.eulerAngles.z;
        lastYaw  = transform.localRotation.eulerAngles.y;

        if (Time.time - lastSend < sendRate)
        {
            return;
        }

        float time = Time.time;

        //GearPosActual
        int gear = vehicleController.IsShifting ? -3 : vehicleController.Gear;

        //AcceleratorPedalPos
        int pedalPos = Mathf.RoundToInt(Mathf.Clamp01(vehicleController.accellInput) * 100);

        //DeceleratorPedalPos
        int brakePos = Mathf.RoundToInt(Mathf.Clamp(-1, 0, vehicleController.accellInput) * 100);

        //SteeringWheelAngle
        int wheelAngle = Mathf.RoundToInt(vehicleController.steerInput * 720);

        //VehicleSpeed
        float kmh = rb.velocity.magnitude * 3.6f;
        //TODO: calculate this from wheel rpm

        //CarLoc
        float carXLoc = TrackController.Instance.car.transform.position.x;
        float carYLoc = TrackController.Instance.car.transform.position.y;
        float carZLoc = TrackController.Instance.car.transform.position.z;
        float xAngle  = TrackController.Instance.car.transform.rotation.eulerAngles.x;
        float yAngle  = TrackController.Instance.car.transform.rotation.eulerAngles.y;
        float zAngle  = TrackController.Instance.car.transform.rotation.eulerAngles.z;

        FullDataFrame frame = new FullDataFrame()
        {
            time                     = time,
            cruiseSpeed              = 0f,
            rpm                      = vehicleController.RPM,
            gearPosActual            = gear,
            gearPosTarget            = vehicleController.Gear,
            accelleratorPos          = pedalPos,
            deceleratorPos           = brakePos,
            rollRate                 = roll,
            steeringWheelAngle       = wheelAngle,
            vehicleSpeed             = kmh,
            vehicleSpeedOverGround   = kmh,
            wheelSpeedFL             = vehicleController.WheelFL.rpm * 60,
            wheelSpeedFR             = vehicleController.WheelFR.rpm * 60,
            wheelSpeedRL             = vehicleController.WheelRL.rpm * 60,
            wheelSpeedRR             = vehicleController.WheelRR.rpm * 60,
            yawRate                  = yaw,
            triggeredEvent1TimeStamp = 0f,
            carXLoc                  = carXLoc,
            carYLoc                  = carYLoc,
            carZLoc                  = carZLoc,
            xAngle                   = xAngle,
            yAngle                   = yAngle,
            zAngle                   = zAngle
        };

        if (triggerTimeStamp1 > 0f || triggerTimeStamp2 > 0f || triggerTimeStamp3 > 0f)
        {
            TriggeredEventFrame eventFrame = new TriggeredEventFrame()
            {
                triggeredEvent1TimeStamp = triggerTimeStamp1,
                triggeredEvent2TimeStamp = triggerTimeStamp2,
                triggeredEvent3TimeStamp = triggerTimeStamp3
            };

            dataStream.SendAsText(eventFrame);
        }

        //add triggered events if required
        if (triggerTimeStamp1 > 0f)
        {
            frame.triggeredEvent1TimeStamp = triggerTimeStamp1;
            triggerTimeStamp1 = 0f;
        }
        if (triggerTimeStamp2 > 0f)
        {
            frame.triggeredEvent2TimeStamp = triggerTimeStamp2;
            triggerTimeStamp2 = 0f;
        }
        if (triggerTimeStamp3 > 0f)
        {
            frame.triggeredEvent3TimeStamp = triggerTimeStamp3;
            triggerTimeStamp3 = 0f;
        }



        dataStream.SendAsText(frame);
    }