{"id":13780384,"url":"https://github.com/deadpixelsociety/gspot","last_synced_at":"2025-05-11T13:32:08.421Z","repository":{"id":169776974,"uuid":"616986993","full_name":"deadpixelsociety/gspot","owner":"deadpixelsociety","description":"Godot 4 Plugin for buttplug.io","archived":false,"fork":false,"pushed_at":"2024-06-01T14:24:57.000Z","size":354,"stargazers_count":15,"open_issues_count":2,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-08-03T18:15:03.510Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"GDScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deadpixelsociety.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-21T13:34:16.000Z","updated_at":"2024-06-01T14:25:00.000Z","dependencies_parsed_at":"2024-06-01T06:48:15.244Z","dependency_job_id":null,"html_url":"https://github.com/deadpixelsociety/gspot","commit_stats":null,"previous_names":["deadpixelsociety/gspot"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadpixelsociety%2Fgspot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadpixelsociety%2Fgspot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadpixelsociety%2Fgspot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadpixelsociety%2Fgspot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deadpixelsociety","download_url":"https://codeload.github.com/deadpixelsociety/gspot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225056808,"owners_count":17414214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T18:01:15.170Z","updated_at":"2025-05-11T13:32:08.406Z","avatar_url":"https://github.com/deadpixelsociety.png","language":"GDScript","funding_links":[],"categories":["Development and Libraries"],"sub_categories":["Game Development"],"readme":"# gspot\n\n![gspot logo](logo.png) \n\nA Godot 4 Plugin for interacting with intimate haptic devices via the [buttplug.io](https://buttplug.io/) interface.\n\n**This plugin provides a buttplug.io standard compatibile client implementation. To interact with devices a server is also required. See [Intiface Central](https://intiface.com/central/).**\n\nReview the [protocol specification](https://buttplug-spec.docs.buttplug.io/docs/spec) for an idea of how to interact with this plugin and proper device flow.\n\nA [client control panel](addons/gspot/ui/gscontrol_panel.tscn) is provided for testing devices and getting familiar with the client.\n\n## Quick Example\n```gdscript\n# Connect to the device server.\n# Prefer using an IP address when available. Websocket DNS resolution through Godot seems to be very slow.\nGSClient.start(\"127.0.0.1\", 12345)\n# Wait for connection.\nawait GSClient.client_connection_changed\n# Request the device list from the server.\nGSClient.request_device_list()\n# Wait for devices to arrive.\nawait GSClient.client_device_list_received\n# Grab the first device.\nvar device = GSClient.get_device(0)\n# Send a vibration command to the device.\ndevice.vibrate()\n```\n## Log Levels\nLog levels let you control the verbosity of messages sent through the ```client_message``` signal. There are four different levels from most verbose to least: \n* ```VERBOSE``` - All messages are emitted.\n* ```DEBUG``` - Debug level messages include things like connection state and message contents, but exclude client state messages.\n* ```WARN``` - Warning level messages include unexpected issues that can be recovered from or ignored.\n* ```ERROR``` - Error level messages include unexpected issues that cannot be recovered from. These are also emitted through ```client_error```.\n\n### Usage\n```gdscript\nGSClient.set_log_level(GSClient.LogLevel.DEBUG)\nGSClient.logv(\"Verbose log message.\")\nGSClient.logd(\"Debug log message.\")\nGSClient.logw(\"Warn log message.\")\nGSClient.loge(\"Error log message.\")\n```\n\n## Project Settings\nProject settings are now available to configure how the GSClient identifies itself to buttplug.io servers, and if raw device commands are available.\n* ```gspot/client/client_name``` - The client name. Defaults to GSClient.\n* ```gspot/client/client_version``` - The client version. Currently defaults to 2.1.\n* ```gspot/client/message_rate``` - The default device command rate which dictates how fast commands should be sent to a device. Currently defaults to 0.2 seconds.\n* ```gspot/client/enable_raw_commands``` - Determines if the raw command methods on GSClient are available or not. Defaults to false. Hidden by advanced settings.\n\nYou can set these values in the Project Settings UI under the Gspot category. If you do not see them, try disabling and re-enabling the plugin.\n\nThese values are also accessible via the GSClient.\n```gdscript\nGSClient.get_client_name() # GSClient\nGSClient.get_client_version() # 2.0\nGSClient.get_client_string() # GSClient v2.0\nGSDevice.get_message_rate()\nGSClient.is_raw_command_enabled() # false\n```\n\n## Extensions\nExtensions to GSClient can now be created and placed in the extensions subdirectory to be loaded. The first official extension is for Patterns.\n\n### Patterns\nThe patterns extension lets you define a pattern via a sequence of float values or by using a Godot Curve. You can then play this pattern against any available device feature including looping, intensity control, pausing, resuming and stopping an active pattern.\n\nA [simple pattern editor](https://github.com/deadpixelsociety/gspot/blob/main/ui/pattern_editor/pattern_editor.tscn) is included in the developer control panel to create sequences. \n\nExample pattern usage:\n```gdscript\nvar device: GSDevice = GSClient.get_device_by_name(\"Lovense Calor\")\nvar feature: GSFeature = device.get_feature_by_actuator_type(GSActuatorTypes.VIBRATE)\n\nvar patterns: GSPatterns = GSClient.ext(GSPatterns.NAME)\n\nvar sequence: PackedFloat32Array = [ 0.0, 0.1, 0.2, 0.3, 1.0, 0.5, 0.7, 0.3, 0.0 ]\n# Creates a sequence pattern that plays over 10 seconds.\npatterns.create_sequence_pattern(\"My Pattern\", 10.0, sequence)\n\n# Plays the previously added pattern with looping enabled and at half intensity.\nvar active_pattern: GSActivePattern = patterns.play(\"My Pattern\", feature, true, 0.5)\n...\n# Stops the looping pattern.\nactive_pattern.stop()\n```\n\n# Games Made Using gspot!\n* [Mousegun](https://shinlalala.itch.io/mousegun) by [Shinlalala](https://shinlalala.itch.io/) - Mousegun is a retro FPS in which you take control of the titular character in an action filled adventure.\n\n# Attribution\nThe gspot icon was created by [Kokota](https://thenounproject.com/kokota.icon/) and distributed under the [Creative Commons Attribution License (CC BY 3.0)](https://creativecommons.org/licenses/by/3.0/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeadpixelsociety%2Fgspot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeadpixelsociety%2Fgspot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeadpixelsociety%2Fgspot/lists"}