Skip to content

Use your iOS gyroscope and accelerometer data in Garry's Mod

Notifications You must be signed in to change notification settings

GitSparTV/gmsv_rempos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gmsv_rempos

Garry's Mod C++ module that connects to iOS app Senzor by Stanislav Révay via websockets and provides acceleration, user acceleration, gyroscope, gps and pressure data from the device.

Built with websocketpp library.

Demo

doc_2021-11-28_00-37-12.mp4

Using

Check releases page for pre-built binaries.

Put .dll into garrysmod/lua/bin/ folder.

Building

Requirements: CMake, C++17, Websocketpp, Standalone ASIO or Boost.ASIO, nlohmann's JSON, gmod-module-base.

mkdir build
cd build
cmake ../ -DGMOD_MODULE_BASE="<path_to_gmod_module_base_root>" -DWEBSOCKETPP="<path_to_websockepp_root>" -DASIO="<path_to_asio>" -DNLOHMANN_JSON="<path_to_nlohmann_json_root>" -DCMAKE_BUILD_TYPE=Release -A Win32
cmake --build . --config=Release --verbose

To build with Boost.ASIO add -DASIO_STANDALONE=OFF.

-A Win32 is requires only for x86 (x32) builds.

Quick note: gmod-module-base requires small patch in the SourceCompat.h:

        Vector(float x, float y, float z)
            : x(x)
            , y(y)
            , z(z)
        {}

Documentation

First of all call require("rempos"), this will populate RemPos global table.

boolean = RemPos.Initialize()

Initializes websocket server on 0.0.0.0 with default port defined in gmsv_rempos.cpp (8080).

Must be called before using other functions.

Returns true on success, otherwise raises error.

boolean = RemPos.Initialize(number port)

Initializes websocket server on 0.0.0.0 with specified port.

Must be called before using other functions.

Returns true on success, otherwise raises error.

boolean = RemPos.Initialize(string ip, string port)

Initializes websocket server on ip with specified port.

Must be called before using other functions.

Returns true on success, otherwise raises error.

SenzorResult = RemPos.GetData()

Returns all measures. See SenzorResult struct for fields.

Vector = RemPos.GetAcceleration()

Returns acceleration sensor value as Vector. (Sensor unit: m/s^2)

number, number = RemPos.GetGPS()

Returns acceleration sensor value as 2 numbers: latitude and longitude (Sensor unit: degrees)

Angle = RemPos.GetGyroscope()

Returns gyroscope sensor value as Angle. (Sensor unit: degrees)

number = RemPos.GetPressure()

Returns pressure sensor value as number. (Sensor unit: kPa)

number = RemPos.GetTimecode()

Returns timecode of the current packer of measures as number.

Can be used to track time difference.

Vector = RemPos.GetUserAcceleration()

Returns user acceleration sensor value as Vector. (Sensor unit: m/s^2)

SenzorResult

Struct for all measures.

{
    acceleration = Vector,
    gps_lat = number,
    gps_lng = number,
    gyroscope = Angle,
    pressure = number,
    timecode = number,
    user_acceleration = Vector 
}

Example:

require("rempos")

RemPos.Initialize()

local ent
local lastdata = RemPos.GetData()

hook.Add("PlayerSay", "RemPos", function(ply, text)
    ent = Entity(1):GetEyeTrace().Entity
end)

hook.Add("Think", "RemPos", function()
    local newdata = RemPos.GetData()
    if newdata.timecode == lastdata.timecode then return end

    if newdata.gyroscope ~= lastdata.gyroscope then
        ent:SetAngles(newdata.gyroscope)
    end

    lastdata = newdata
end)

About

Use your iOS gyroscope and accelerometer data in Garry's Mod

Resources

Stars

Watchers

Forks

Packages

No packages published