Update to use an external haptics service

completely decoupled from this project, so can be implemented entirely separately
This commit is contained in:
Simon 2021-03-31 19:32:44 +01:00
parent 674b30bc6f
commit d1f570f09a
80 changed files with 189 additions and 942 deletions

View file

@ -23,7 +23,7 @@ android {
abiFilters 'arm64-v8a'
}
}
minSdkVersion 24
minSdkVersion 26
targetSdkVersion 26
}
@ -40,13 +40,19 @@ android {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
compileSdkVersion = 24
compileSdkVersion = 26
buildToolsVersion = '29.0.1'
/* buildTypes {
release {
debuggable true
}
}*/
}
dependencies {
implementation "com.android.support:support-compat:24.2.0"
implementation "com.android.support:support-core-utils:24.2.0"
implementation "com.android.support:support-compat:26.1.0"
implementation "com.android.support:support-core-utils:26.1.0"
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
repositories {

View file

@ -0,0 +1,14 @@
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Wed Mar 24 19:45:02 GMT 2021
org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M"

View file

@ -958,7 +958,6 @@ void Doom3Quest_Vibrate(int channel, float low, float high)
void jni_haptic_event(const char* event, int position, int flags, int intensity, float angle, float yHeight);
void jni_haptic_updateevent(const char* event, int intensity, float angle);
void jni_haptic_stopevent(const char* event);
void jni_haptic_beginframe();
void jni_haptic_endframe();
void jni_haptic_enable();
void jni_haptic_disable();
@ -973,11 +972,6 @@ void Doom3Quest_HapticUpdateEvent(const char* event, int intensity, float angle
jni_haptic_updateevent(event, intensity, angle);
}
void Doom3Quest_HapticBeginFrame()
{
jni_haptic_beginframe();
}
void Doom3Quest_HapticEndFrame()
{
jni_haptic_endframe();
@ -1742,8 +1736,6 @@ void Doom3Quest_processHaptics() {//Handle haptics
else
vrapi_SetHapticVibrationSimple(gAppState.Ovr, controllerIDs[1 - h], 0.0f);
}
Doom3Quest_HapticBeginFrame();
}
void showLoadingIcon()
@ -1967,7 +1959,6 @@ jmethodID android_shutdown;
jmethodID android_haptic_event;
jmethodID android_haptic_updateevent;
jmethodID android_haptic_stopevent;
jmethodID android_haptic_beginframe;
jmethodID android_haptic_endframe;
jmethodID android_haptic_enable;
jmethodID android_haptic_disable;
@ -2029,18 +2020,6 @@ void jni_haptic_stopevent(const char* event)
return (*env)->CallVoidMethod(env, jniCallbackObj, android_haptic_stopevent, StringArg1);
}
void jni_haptic_beginframe()
{
JNIEnv *env;
jobject tmp;
if (((*jVM)->GetEnv(jVM, (void**) &env, JNI_VERSION_1_4))<0)
{
(*jVM)->AttachCurrentThread(jVM,&env, NULL);
}
return (*env)->CallVoidMethod(env, jniCallbackObj, android_haptic_beginframe);
}
void jni_haptic_endframe()
{
JNIEnv *env;
@ -2155,7 +2134,6 @@ JNIEXPORT void JNICALL Java_com_drbeef_doom3quest_GLES3JNILib_onStart( JNIEnv *
android_haptic_event = (*env)->GetMethodID(env, callbackClass, "haptic_event", "(Ljava/lang/String;IIIFF)V");
android_haptic_updateevent = (*env)->GetMethodID(env, callbackClass, "haptic_updateevent", "(Ljava/lang/String;IF)V");
android_haptic_stopevent = (*env)->GetMethodID(env, callbackClass, "haptic_stopevent", "(Ljava/lang/String;)V");
android_haptic_beginframe = (*env)->GetMethodID(env, callbackClass, "haptic_beginframe", "()V");
android_haptic_endframe = (*env)->GetMethodID(env, callbackClass, "haptic_endframe", "()V");
android_haptic_enable = (*env)->GetMethodID(env, callbackClass, "haptic_enable", "()V");
android_haptic_disable = (*env)->GetMethodID(env, callbackClass, "haptic_disable", "()V");

View file

@ -481,8 +481,9 @@ void HandleInput_Default( int controlscheme, int switchsticks, ovrInputStateGame
if (((offhandButtonsNew & ovrButton_Joystick) !=
(offhandButtonsOld & ovrButton_Joystick)) &&
(offhandButtonsNew & ovrButton_Joystick)) {
Android_SetCommand("give all");
#ifdef DEBUG
//Android_SetCommand("give all");
if(give_weapon_count == 1){
Android_SetCommand("give weapon_pistol");
give_weapon_count = give_weapon_count + 1;

View file

@ -171,8 +171,13 @@ public:
virtual int GetFrameNumber();
virtual void Vibrate(int channel, float low, float high );
virtual void HapticEvent(const char* event, int position, int flags, int intensity, float angle, float yHeight );
virtual void HapticStopEvent(const char* event);
virtual void HapticEnable();
virtual void HapticDisable();
// DG: hack to allow adding callbacks and exporting additional functions without breaking the game ABI
// DG: hack to allow adding callbacks and exporting additional functions without breaking the game ABI
// see Common.h for longer explanation...
// returns true if setting the callback was successful, else false
@ -2270,12 +2275,37 @@ void idCommonLocal::InitSIMD( void ) {
extern "C" void Doom3Quest_FrameSetup(int controlscheme, int switch_sticks, int refresh);
extern "C" void Doom3Quest_Vibrate(int channel, float low, float high );
extern "C" void Doom3Quest_HapticEvent(const char* event, int position, int flags, int intensity, float angle, float yHeight );
extern "C" void Doom3Quest_HapticStopEvent(const char* event);
extern "C" void Doom3Quest_HapticEnable();
extern "C" void Doom3Quest_HapticDisable();
void idCommonLocal::Vibrate(int channel, float low, float high)
{
Doom3Quest_Vibrate(channel, low, high);
}
void idCommonLocal::HapticEvent(const char* event, int position, int flags, int intensity, float angle, float yHeight )
{
if (cvarSystem->GetCVarBool("vr_useHapticsService")) {
Doom3Quest_HapticEvent(event, position, flags, intensity, angle, yHeight);
}
}
void idCommonLocal::HapticStopEvent(const char* event)
{
Doom3Quest_HapticStopEvent(event);
}
void idCommonLocal::HapticEnable()
{
Doom3Quest_HapticEnable();
}
void idCommonLocal::HapticDisable()
{
Doom3Quest_HapticDisable();
}
/*
=================

View file

@ -1622,7 +1622,7 @@ bool idEntity::StartSoundShader( const idSoundShader *shader, const s_channelTyp
}
idPlayer *player = gameLocal.GetLocalPlayer();
if (vr_bhaptics.GetBool() &&
if (vr_useHapticsService.GetBool() &&
player != NULL) {
idVec3 playerOrigin = gameLocal.GetLocalPlayer()->GetPlayerPhysics()->GetOrigin(0);
idVec3 entityOrigin = GetPhysics()->GetOrigin(0);

View file

@ -813,6 +813,20 @@ void idGameLocal::SetLocalClient( int clientNum ) {
void idGameLocal::SetVRClientInfo(vrClientInfo *pVR)
{
pVRClientInfo = pVR;
//Only triggers haptic enabling if value of cvar changes or the first time this is called
static bool firstTime = true;
static bool lastUseHapticsService = false;
if (firstTime || (lastUseHapticsService != vr_useHapticsService.GetBool())) {
if (vr_useHapticsService.GetBool()) {
common->HapticEnable();
} else {
common->HapticDisable();
}
firstTime = false;
lastUseHapticsService = vr_useHapticsService.GetBool();
}
}
/*

View file

@ -12630,8 +12630,8 @@ void idPlayer::Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &di
}
if ( IsType( idPlayer::Type ) &&
//Save the effort of going through this code if bhaptics isn't enabled
vr_bhaptics.GetBool()) {
//Save the effort of going through this code if vr_useHapticsService isn't enabled
vr_useHapticsService.GetBool()) {
idVec3 bodyOrigin = vec3_zero;
idMat3 bodyAxis;
GetViewPos( bodyOrigin, bodyAxis );

View file

@ -163,8 +163,6 @@ public:
void MotionControllerSetHapticOculus( float low, float hi );
void MotionControllerSetHapticOpenVR( int hand, unsigned short value );
bool GetWeaponStabilised();
//void MSAAResolve( void );
//void FXAAResolve( idImage * leftCurrent, idImage * rightCurrent );
//void FXAASetUniforms( Framebuffer FBO );
@ -414,6 +412,8 @@ private:
};
extern idCVar vr_useHapticsService;
extern idCVar vr_scale;
extern idCVar vr_normalViewHeight;
extern idCVar vr_useFloorHeight;

View file

@ -1758,7 +1758,7 @@ void idSoundWorldLocal::AddChannelContribution( idSoundEmitterLocal *sound, idSo
float inputSamples[MIXBUFFER_SAMPLES*2+16];
float *alignedInputSamples = (float *) ( ( ( (intptr_t)inputSamples ) + 15 ) & ~15 );
if (cvarSystem->GetCVarBool("vr_bhaptics") &&
if (cvarSystem->GetCVarBool("vr_useHapticsService") &&
looping)
{
idVec3 direction = (listenerPos / DOOM_TO_METERS) - sound->origin;

Binary file not shown.

View file

@ -1 +0,0 @@
{"project":{"createdAt":1586477737488,"description":"","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":3,"name":"DefaultHead_1","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":210,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN_OUT","pointList":[{"intensity":1,"time":0,"x":0.5,"y":0.49}],"visible":true}]}}},"name":"Effect 1","offsetTime":210,"startTime":2}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1586477841512},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616239718226,"description":"","id":"-MWEOE8DY8zhPJHx2AQW","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"DMG_Electric","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":1},{"index":0,"intensity":1}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":5,"intensity":1},{"index":4,"intensity":1}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":2,"intensity":1},{"index":3,"intensity":1}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":5,"intensity":1},{"index":2,"intensity":1}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":5,"intensity":1}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616239749680},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616239598403,"description":"","id":"-MWENlswJzPcV1u6358l","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"DMG_Explosion","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":450,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.56,"y":0.5},{"intensity":1,"time":450,"x":1,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.43,"y":0.5},{"intensity":1,"time":450,"x":0,"y":0.5}],"visible":true}]}}},"name":"Effect 1","offsetTime":450,"startTime":0}],"enable":true},{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":300,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.56,"y":0.5},{"intensity":1,"time":300,"x":1,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.43,"y":0.5},{"intensity":1,"time":300,"x":0,"y":0.5}],"visible":true}]}}},"name":"Effect 1 copy 1","offsetTime":300,"startTime":200}],"enable":true}],"updatedAt":1616239754592},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616239604665,"description":"","id":"-MWENnPmWsKl4vO1F1EH","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"HeadShot","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":250,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":0,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":1,"y":0.5}],"visible":true}]}}},"name":"Effect 1 copy 3","offsetTime":250,"startTime":0},{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":250,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":0,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":1,"y":0.5}],"visible":true}]}}},"name":"Effect 1 copy 5","offsetTime":250,"startTime":0}],"enable":true},{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":250,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":0,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.51,"y":0.5},{"intensity":1,"time":250,"x":1,"y":0.5}],"visible":true}]}}},"name":"Effect 1 copy 4","offsetTime":250,"startTime":0}],"enable":true}],"updatedAt":1616239696568},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616239575886,"description":"","id":"-MWENgOAxXzbwAH9Jh6I","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"DMG_Melee1","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":400,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0,"y":0.02},{"intensity":1,"time":400,"x":1,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.7,"time":0,"x":0,"y":0.01},{"intensity":0.7,"time":400,"x":1,"y":1}],"visible":true}]}}},"name":"Effect 1","offsetTime":400,"startTime":0}],"enable":true},{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":328,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.8,"time":0,"x":0,"y":0},{"intensity":0.8,"time":328,"x":1,"y":1}],"visible":true}]}}},"name":"Effect 2","offsetTime":328,"startTime":137}],"enable":true}],"updatedAt":1616239662646},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616239578155,"description":"","id":"-MWENgwY7SIuYym4NuIN","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"DMG_Melee2","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":400,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":1,"y":0.02},{"intensity":1,"time":400,"x":0,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.7,"time":0,"x":1,"y":0.01},{"intensity":0.7,"time":400,"x":0,"y":1}],"visible":true}]}}},"name":"Effect 1","offsetTime":400,"startTime":0}],"enable":true},{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":328,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.8,"time":0,"x":1,"y":0},{"intensity":0.8,"time":328,"x":0,"y":1}],"visible":true}]}}},"name":"Effect 2","offsetTime":328,"startTime":137}],"enable":true}],"updatedAt":1616239663558},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238902724,"description":"","id":"-MWEL71xDrgeF3VhdYGV","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":3,"name":"ItemPickup","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":250,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":62,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.2},{"index":2,"intensity":0.2},{"index":0,"intensity":0.2}],"startTime":0},{"endTime":125,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":0,"intensity":0.2},{"index":1,"intensity":0.2},{"index":4,"intensity":0.2},{"index":5,"intensity":0.2},{"index":2,"intensity":0.2}],"startTime":62},{"endTime":187,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":4,"intensity":0.2},{"index":0,"intensity":0.2},{"index":1,"intensity":0.2},{"index":2,"intensity":0.2},{"index":5,"intensity":0.2}],"startTime":125},{"endTime":250,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":4,"intensity":0.2},{"index":5,"intensity":0.2}],"startTime":187},{"endTime":250,"playbackType":"NONE","startTime":250,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":250,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616239013203},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238902724,"description":"","id":"-MWEL71xDrgeF3VhdYGV","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":3,"name":"ItemPickup","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":62,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.2},{"index":2,"intensity":0.2},{"index":0,"intensity":0.2}],"startTime":0},{"endTime":125,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":0,"intensity":0.2},{"index":1,"intensity":0.2},{"index":4,"intensity":0.2},{"index":5,"intensity":0.2},{"index":2,"intensity":0.2}],"startTime":62},{"endTime":187,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":4,"intensity":0.2},{"index":0,"intensity":0.2},{"index":1,"intensity":0.2},{"index":2,"intensity":0.2},{"index":5,"intensity":0.2}],"startTime":125},{"endTime":250,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.2},{"index":4,"intensity":0.2},{"index":5,"intensity":0.2}],"startTime":187},{"endTime":250,"playbackType":"NONE","startTime":250,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":250,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":250,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616239013203},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238950616,"description":"","id":"-MWELIjGh36wjtZnboq_","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"PDA_Click","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":75,"startTime":25},{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1 copy 1","offsetTime":75,"startTime":125}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616239011654},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238950616,"description":"","id":"-MWELIjGh36wjtZnboq_","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"PDA_Click","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":75,"startTime":25},{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy 1","offsetTime":75,"startTime":125}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616239011654},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616568625884,"description":"","id":"-MBDzKgwgnexUgAkQSpf","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"Spark","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":0,"intensity":0.5}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.5},{"index":4,"intensity":0.5}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.5},{"index":3,"intensity":0.5}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.5},{"index":1,"intensity":0.5}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.5},{"index":5,"intensity":0.5}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616568665047},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616725262848,"description":"","layout":{"layouts":{"Head":[{"index":0,"x":0,"y":0.5},{"index":1,"x":0.2,"y":0.5},{"index":2,"x":0.4,"y":0.5},{"index":3,"x":0.6,"y":0.5},{"index":4,"x":0.8,"y":0.5},{"index":5,"x":1,"y":0.5}]},"name":"Tactal","type":"Tactal"},"mediaFileDuration":1,"name":"Steam","tracks":[{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":2,"intensity":0.5},{"index":3,"intensity":0.5},{"index":4,"intensity":0.5}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.5},{"index":4,"intensity":0.5}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":3,"intensity":0.5}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":2,"intensity":0.5},{"index":3,"intensity":0.5},{"index":4,"intensity":0.5}],"startTime":600}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":800,"startTime":101}],"enable":true},{"effects":[{"modes":{"Head":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":1000,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.6,"time":0,"x":0.51,"y":0.5},{"intensity":0.6,"time":1000,"x":0,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.6,"time":0,"x":0.51,"y":0.5},{"intensity":0.6,"time":1000,"x":1,"y":0.5}],"visible":true}]}}},"name":"Effect 1 copy 5","offsetTime":1000,"startTime":0}],"enable":true}],"updatedAt":1616726002365,"id":"-MWgKRBAGBbUKHWvEE50"},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616227496861,"description":"","id":"-MWDebPg08cNHty8ERNv","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"DoorSlide","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.1}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":18,"intensity":0.1},{"index":15,"intensity":0.1}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":17,"intensity":0.1}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":12,"intensity":0.1},{"index":19,"intensity":0.1}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":19,"intensity":0.1},{"index":14,"intensity":0.1}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":12,"intensity":0.1},{"index":15,"intensity":0.1}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true},{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":18,"intensity":0.1},{"index":12,"intensity":0.1}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":18,"intensity":0.1}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":13,"intensity":0.1}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":19,"intensity":0.1},{"index":16,"intensity":0.1}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":18,"intensity":0.1}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":15,"intensity":0.1},{"index":12,"intensity":0.1}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true}],"updatedAt":1616227655930},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616229514005,"description":"","id":"-MWDmIsZeXfuJpAqQa7u","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":0.673,"name":"PlayerJump","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.2,"time":0,"x":0,"y":1},{"intensity":0.2,"time":150,"x":0,"y":0.5}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.3,"time":0,"x":0.34,"y":1},{"intensity":0.3,"time":150,"x":0.33,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.3,"time":0,"x":0.67,"y":1},{"intensity":0.3,"time":150,"x":0.65,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.2,"time":0,"x":1,"y":0.99},{"intensity":0.2,"time":150,"x":1,"y":0.49}],"visible":true}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.2,"time":0,"x":0,"y":1},{"intensity":0.2,"time":150,"x":0,"y":0.51}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.3,"time":0,"x":0.34,"y":1},{"intensity":0.3,"time":150,"x":0.33,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.3,"time":0,"x":0.67,"y":1},{"intensity":0.3,"time":150,"x":0.65,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.2,"time":0,"x":1,"y":0.99},{"intensity":0.2,"time":150,"x":1,"y":0.51}],"visible":true}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616229602098},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616229516658,"description":"","id":"-MWDmJX0TWkdbZGPQNVm","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":0.673,"name":"PlayerLanding","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":90,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.2},{"index":17,"intensity":0.2},{"index":18,"intensity":0.2},{"index":19,"intensity":0.2}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":90,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.2},{"index":17,"intensity":0.2},{"index":18,"intensity":0.2},{"index":19,"intensity":0.2}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":90,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616229600525},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616134839464,"description":"","id":"-MW888lfGJrJsPYe6dI_","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Spark","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":300,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.4}],"startTime":0},{"endTime":150,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.4}],"startTime":75},{"endTime":225,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.4},{"index":6,"intensity":0.4}],"startTime":150},{"endTime":300,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.4}],"startTime":225},{"endTime":300,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.4},{"index":4,"intensity":0.4}],"startTime":300}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":300,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616236084901},"durationMillis":0,"intervalMillis":20,"size":20}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238431854,"description":"","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Fist","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":0},{"endTime":150,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":4,"intensity":1},{"index":5,"intensity":1}],"startTime":75}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238451255,"id":"-MWEJK4bODAJ-NHSodeK"},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238431854,"description":"","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Fist","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":0},{"endTime":150,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":4,"intensity":1},{"index":5,"intensity":1}],"startTime":75}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238451255,"id":"-MWEJK4bODAJ-NHSodeK"},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238116773,"description":"","id":"-MWEI79Tl1wVuVCDZnRm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV1","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":1},{"index":4,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":100,"startTime":0}],"enable":true},{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]},{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":5,"intensity":0.5},{"index":3,"intensity":0.5},{"index":0,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1 copy","offsetTime":100,"startTime":0}],"enable":true}],"updatedAt":1616238334506},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238116773,"description":"","id":"-MWEI79Tl1wVuVCDZnRm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV1","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":1},{"index":4,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":100,"startTime":0}],"enable":true},{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":5,"intensity":0.5},{"index":3,"intensity":0.5},{"index":0,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]},{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy","offsetTime":100,"startTime":0}],"enable":true}],"updatedAt":1616238334506},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238120012,"description":"","id":"-MWEI7x3jlQm4ZMf70R2","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV2","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1},{"index":5,"intensity":1},{"index":4,"intensity":1},{"index":3,"intensity":1}],"startTime":0},{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":4,"intensity":1},{"index":1,"intensity":1},{"index":5,"intensity":1},{"index":2,"intensity":1},{"index":0,"intensity":1},{"index":3,"intensity":1}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238295181},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616238120012,"description":"","id":"-MWEI7x3jlQm4ZMf70R2","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV2","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1},{"index":5,"intensity":1},{"index":4,"intensity":1},{"index":3,"intensity":1}],"startTime":0},{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":4,"intensity":1},{"index":1,"intensity":1},{"index":5,"intensity":1},{"index":2,"intensity":1},{"index":0,"intensity":1},{"index":3,"intensity":1}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238295181},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237271401,"description":"","id":"-MWEEtlf-TfJMr3V4qqm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV3","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","startTime":0,"pointList":[]},{"endTime":150,"playbackType":"FADE_IN_OUT","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":75},{"endTime":225,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":4,"intensity":1},{"index":5,"intensity":1}],"startTime":150},{"endTime":300,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":225}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":300,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616237886876},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237271401,"description":"","id":"-MWEEtlf-TfJMr3V4qqm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV3","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","startTime":0,"pointList":[]},{"endTime":150,"playbackType":"FADE_IN_OUT","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":75},{"endTime":225,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":4,"intensity":1},{"index":5,"intensity":1}],"startTime":150},{"endTime":300,"playbackType":"NONE","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1}],"startTime":225}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":300,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616237886876},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237295765,"description":"","id":"-MWEEziM8_8HSTnQljOm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV4","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":166,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":0,"intensity":1}],"startTime":0},{"endTime":333,"playbackType":"NONE","pointList":[{"index":4,"intensity":1},{"index":1,"intensity":1}],"startTime":166},{"endTime":500,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":333}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":500,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616237885364},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237295765,"description":"","id":"-MWEEziM8_8HSTnQljOm","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV4","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":166,"playbackType":"NONE","pointList":[{"index":3,"intensity":1},{"index":0,"intensity":1}],"startTime":0},{"endTime":333,"playbackType":"NONE","pointList":[{"index":4,"intensity":1},{"index":1,"intensity":1}],"startTime":166},{"endTime":500,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":333}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":500,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616237885364},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237344969,"description":"","id":"-MWEFAjBFsS0u1TtNO2B","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV5","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":999,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":999,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.47,"y":0.49},{"intensity":1,"time":167,"x":0.3,"y":0.39},{"intensity":1,"time":301,"x":0.35,"y":0.24},{"intensity":1,"time":522,"x":0.09,"y":0.26},{"intensity":1,"time":762,"x":0.29,"y":0.06},{"intensity":1,"time":999,"x":0.02,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.51},{"intensity":1,"time":122,"x":0.27,"y":0.53},{"intensity":1,"time":234,"x":0.12,"y":0.44},{"intensity":1,"time":412,"x":0.26,"y":0.68},{"intensity":1,"time":547,"x":0.06,"y":0.61},{"intensity":1,"time":735,"x":0.23,"y":0.85},{"intensity":1,"time":867,"x":0.03,"y":0.8},{"intensity":1,"time":999,"x":0,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.49},{"intensity":1,"time":152,"x":0.39,"y":0.68},{"intensity":1,"time":320,"x":0.58,"y":0.8},{"intensity":1,"time":538,"x":0.3,"y":0.88},{"intensity":1,"time":681,"x":0.49,"y":0.9},{"intensity":1,"time":816,"x":0.34,"y":1},{"intensity":1,"time":999,"x":0.58,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.45,"y":0.48},{"intensity":1,"time":90,"x":0.61,"y":0.51},{"intensity":1,"time":172,"x":0.56,"y":0.65},{"intensity":1,"time":316,"x":0.79,"y":0.77},{"intensity":1,"time":432,"x":0.8,"y":0.56},{"intensity":1,"time":526,"x":0.95,"y":0.64},{"intensity":1,"time":719,"x":0.68,"y":0.86},{"intensity":1,"time":829,"x":0.87,"y":0.92},{"intensity":1,"time":911,"x":1,"y":0.85},{"intensity":1,"time":999,"x":1,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.49,"y":0.49},{"intensity":1,"time":135,"x":0.7,"y":0.58},{"intensity":1,"time":296,"x":0.62,"y":0.32},{"intensity":1,"time":485,"x":0.92,"y":0.43},{"intensity":1,"time":642,"x":0.77,"y":0.21},{"intensity":1,"time":778,"x":1,"y":0.2},{"intensity":1,"time":903,"x":0.85,"y":0.05},{"intensity":1,"time":999,"x":1,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.5},{"intensity":1,"time":129,"x":0.39,"y":0.32},{"intensity":1,"time":276,"x":0.61,"y":0.31},{"intensity":1,"time":447,"x":0.38,"y":0.2},{"intensity":1,"time":623,"x":0.64,"y":0.16},{"intensity":1,"time":825,"x":0.36,"y":0.05},{"intensity":1,"time":999,"x":0.61,"y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":999,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238531207},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237344969,"description":"","id":"-MWEFAjBFsS0u1TtNO2B","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"Recoil_LV5","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":999,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.47,"y":0.49},{"intensity":1,"time":167,"x":0.3,"y":0.39},{"intensity":1,"time":301,"x":0.35,"y":0.24},{"intensity":1,"time":522,"x":0.09,"y":0.26},{"intensity":1,"time":762,"x":0.29,"y":0.06},{"intensity":1,"time":999,"x":0.02,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.51},{"intensity":1,"time":122,"x":0.27,"y":0.53},{"intensity":1,"time":234,"x":0.12,"y":0.44},{"intensity":1,"time":412,"x":0.26,"y":0.68},{"intensity":1,"time":547,"x":0.06,"y":0.61},{"intensity":1,"time":735,"x":0.23,"y":0.85},{"intensity":1,"time":867,"x":0.03,"y":0.8},{"intensity":1,"time":999,"x":0,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.49},{"intensity":1,"time":152,"x":0.39,"y":0.68},{"intensity":1,"time":320,"x":0.58,"y":0.8},{"intensity":1,"time":538,"x":0.3,"y":0.88},{"intensity":1,"time":681,"x":0.49,"y":0.9},{"intensity":1,"time":816,"x":0.34,"y":1},{"intensity":1,"time":999,"x":0.58,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.45,"y":0.48},{"intensity":1,"time":90,"x":0.61,"y":0.51},{"intensity":1,"time":172,"x":0.56,"y":0.65},{"intensity":1,"time":316,"x":0.79,"y":0.77},{"intensity":1,"time":432,"x":0.8,"y":0.56},{"intensity":1,"time":526,"x":0.95,"y":0.64},{"intensity":1,"time":719,"x":0.68,"y":0.86},{"intensity":1,"time":829,"x":0.87,"y":0.92},{"intensity":1,"time":911,"x":1,"y":0.85},{"intensity":1,"time":999,"x":1,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.49,"y":0.49},{"intensity":1,"time":135,"x":0.7,"y":0.58},{"intensity":1,"time":296,"x":0.62,"y":0.32},{"intensity":1,"time":485,"x":0.92,"y":0.43},{"intensity":1,"time":642,"x":0.77,"y":0.21},{"intensity":1,"time":778,"x":1,"y":0.2},{"intensity":1,"time":903,"x":0.85,"y":0.05},{"intensity":1,"time":999,"x":1,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":1,"time":0,"x":0.46,"y":0.5},{"intensity":1,"time":129,"x":0.39,"y":0.32},{"intensity":1,"time":276,"x":0.61,"y":0.31},{"intensity":1,"time":447,"x":0.38,"y":0.2},{"intensity":1,"time":623,"x":0.64,"y":0.16},{"intensity":1,"time":825,"x":0.36,"y":0.05},{"intensity":1,"time":999,"x":0.61,"y":0}],"visible":true}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":999,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":999,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616238531207},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616227794594,"description":"","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"ReloadFinish","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.5},{"index":1,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":0},{"endTime":200,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.5},{"index":4,"intensity":0.5},{"index":5,"intensity":0.5}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616227937233,"id":"-MWDfk5khkaMqIRjjfr0"},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616227794594,"description":"","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"ReloadFinish","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.5},{"index":1,"intensity":0.5},{"index":2,"intensity":0.5}],"startTime":0},{"endTime":200,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.5},{"index":4,"intensity":0.5},{"index":5,"intensity":0.5}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616227937233,"id":"-MWDfk5khkaMqIRjjfr0"},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237979018,"description":"","id":"-MWEHaX3l8CHJ38C3586","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"SoulCube","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1},{"index":5,"intensity":1},{"index":4,"intensity":1},{"index":3,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":0.8},{"index":1,"intensity":0.8},{"index":2,"intensity":0.8},{"index":5,"intensity":0.8},{"index":4,"intensity":0.8},{"index":3,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":150,"startTime":350}],"enable":true}],"updatedAt":1616238609474},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616237979018,"description":"","id":"-MWEHaX3l8CHJ38C3586","layout":{"layouts":{"ForearmL":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}],"ForearmR":[{"index":0,"x":0,"y":0},{"index":1,"x":0.5,"y":0},{"index":2,"x":1,"y":0},{"index":3,"x":0,"y":1},{"index":4,"x":0.5,"y":1},{"index":5,"x":1,"y":1}]},"name":"Tactosy2","type":"Tactosy2"},"mediaFileDuration":1,"name":"SoulCube","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":1},{"index":1,"intensity":1},{"index":2,"intensity":1},{"index":5,"intensity":1},{"index":4,"intensity":1},{"index":3,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":0.8},{"index":1,"intensity":0.8},{"index":2,"intensity":0.8},{"index":5,"intensity":0.8},{"index":4,"intensity":0.8},{"index":3,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"ForearmR":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":150,"startTime":350}],"enable":true}],"updatedAt":1616238609474},"durationMillis":0,"intervalMillis":20,"size":20}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614063863216,"description":"","id":"-MUCh-OyqGJ1QiTCDLOU","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Body_Reload","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":102,"playbackType":"NONE","pointList":[{"index":7,"intensity":0.6}],"startTime":0},{"endTime":204,"playbackType":"FADE_IN","pointList":[{"index":3,"intensity":0.6}],"startTime":102}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":102,"playbackType":"NONE","pointList":[{"index":6,"intensity":0.6},{"index":7,"intensity":0.6}],"startTime":0},{"endTime":204,"playbackType":"FADE_IN","pointList":[{"index":2,"intensity":0.6},{"index":3,"intensity":0.6}],"startTime":102}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":204,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"type":"project","updatedAt":1614063881495},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616157976157,"description":"","id":"-MW9WPPdtm9PkZGPFdVi","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Chainsaw_LV1","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.2},{"index":7,"intensity":0.2}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":6,"intensity":0.2},{"index":3,"intensity":0.2}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":7,"intensity":0.2}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.2}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":7,"intensity":0.2}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.2},{"index":6,"intensity":0.2}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225501153},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616157976157,"description":"","id":"-MW9WPPdtm9PkZGPFdVi","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Chainsaw_LV1","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.2},{"index":4,"intensity":0.2}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.2},{"index":0,"intensity":0.2}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":4,"intensity":0.2}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.2}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":4,"intensity":0.2}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.2},{"index":5,"intensity":0.2}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225501153},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616157569521,"description":"","id":"-MW9Ur802dC5KOcJAryy","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1.2,"name":"Chainsaw_LV2","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.5},{"index":7,"intensity":0.5}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":6,"intensity":0.5},{"index":15,"intensity":0.5},{"index":3,"intensity":0.5}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":11,"intensity":0.5},{"index":10,"intensity":0.5}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.5}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":7,"intensity":0.5},{"index":14,"intensity":0.5}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.5},{"index":15,"intensity":0.5},{"index":10,"intensity":0.5}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":2,"intensity":1},{"index":7,"intensity":1}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":6,"intensity":1},{"index":15,"intensity":1},{"index":3,"intensity":1}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":11,"intensity":1},{"index":10,"intensity":1}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":2,"intensity":1}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":7,"intensity":1},{"index":14,"intensity":1}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":2,"intensity":1},{"index":15,"intensity":1},{"index":10,"intensity":1}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225656740},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616157569521,"description":"","id":"-MW9Ur802dC5KOcJAryy","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1.2,"name":"Chainsaw_LV2","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":4,"intensity":0.5}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.5},{"index":12,"intensity":0.5},{"index":0,"intensity":0.5}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":8,"intensity":0.5},{"index":9,"intensity":0.5}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":4,"intensity":0.5},{"index":13,"intensity":0.5}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.5},{"index":12,"intensity":0.5},{"index":9,"intensity":0.5}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":200,"playbackType":"NONE","pointList":[{"index":1,"intensity":1},{"index":4,"intensity":1}],"startTime":0},{"endTime":400,"playbackType":"NONE","pointList":[{"index":5,"intensity":1},{"index":12,"intensity":1},{"index":0,"intensity":1}],"startTime":200},{"endTime":600,"playbackType":"NONE","pointList":[{"index":8,"intensity":1},{"index":9,"intensity":1}],"startTime":400},{"endTime":800,"playbackType":"NONE","pointList":[{"index":1,"intensity":1}],"startTime":600},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":4,"intensity":1},{"index":13,"intensity":1}],"startTime":800},{"endTime":1000,"playbackType":"NONE","pointList":[{"index":1,"intensity":1},{"index":12,"intensity":1},{"index":9,"intensity":1}],"startTime":1000}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":1000,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225656740},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153465590,"description":"","id":"-MW9FC9j9K9IDFfD-kaH","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Fist","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":1},{"index":7,"intensity":1},{"index":2,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225505995},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153465590,"description":"","id":"-MW9FC9j9K9IDFfD-kaH","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Fist","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":1},{"index":4,"intensity":1},{"index":1,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225505995},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614044314479,"description":"","id":"-MUBXQyWd34-ZarylCUG","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Body_Grenade_Init","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0.16,"y":0.16},{"intensity":0.5,"time":100,"x":0,"y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":100,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614044964990},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614044993605,"description":"","id":"-MUB_0lqX_FXOJ79X20H","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Body_Grenade_Throw","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":124,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0.84,"y":0.16},{"intensity":0.5,"time":124,"x":0.98,"y":0.01}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":1,"y":0.26},{"intensity":0.5,"time":124,"x":0.99,"y":0.01}],"visible":true}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":124,"playbackType":"NONE","pointList":[{"index":3,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0.84,"y":0.01},{"intensity":0.5,"time":124,"x":1,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0.85,"y":0.24},{"intensity":0.5,"time":124,"x":1,"y":0.23}],"visible":true}]}}},"name":"Effect 1","offsetTime":124,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614045738313},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153465748,"description":"","id":"-MW9FCCBrqCjd2z7pWaF","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Recoil_LV1","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":0.9},{"index":6,"intensity":0.9},{"index":2,"intensity":0.9},{"index":7,"intensity":0.9}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.68,"y":0.23},{"intensity":1,"time":43,"x":0.67,"y":0},{"intensity":1,"time":100,"x":0.97,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.73,"y":0.21},{"intensity":1,"time":55,"x":1,"y":0.22},{"intensity":1,"time":100,"x":1,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.67,"y":0.23},{"intensity":1,"time":100,"x":1,"y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":100,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225504311},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153465748,"description":"","id":"-MW9FCCBrqCjd2z7pWaF","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Recoil_LV1","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":0.9},{"index":5,"intensity":0.9},{"index":1,"intensity":0.9},{"index":4,"intensity":0.9}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":"0.320","y":0.23},{"intensity":1,"time":43,"x":"0.330","y":0},{"intensity":1,"time":100,"x":"0.030","y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":"0.270","y":0.21},{"intensity":1,"time":55,"x":"0.000","y":0.22},{"intensity":1,"time":100,"x":"0.000","y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":"0.330","y":0.23},{"intensity":1,"time":100,"x":"0.000","y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":100,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225504311},"durationMillis":0,"intervalMillis":20,"size":20}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153466399,"description":"","id":"-MW9FCMM__CKV0-sbrlq","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Recoil_LV5","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":2,"intensity":1},{"index":3,"intensity":1},{"index":7,"intensity":1},{"index":11,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":2,"intensity":1},{"index":3,"intensity":1},{"index":7,"intensity":1},{"index":11,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 4","offsetTime":200,"startTime":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":19,"intensity":0.5},{"index":14,"intensity":0.5},{"index":9,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":19,"intensity":0.6},{"index":14,"intensity":0.6},{"index":9,"intensity":0.6}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 5","offsetTime":200,"startTime":199}],"enable":true},{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":0.8},{"index":5,"intensity":0.8},{"index":9,"intensity":0.8},{"index":14,"intensity":0.8},{"index":19,"intensity":0.8},{"index":15,"intensity":0.8},{"index":10,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":0.8},{"index":5,"intensity":0.8},{"index":9,"intensity":0.8},{"index":14,"intensity":0.8},{"index":19,"intensity":0.8},{"index":15,"intensity":0.8},{"index":10,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 3","offsetTime":200,"startTime":100},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":13,"intensity":0.3},{"index":18,"intensity":0.3},{"index":14,"intensity":0.3}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","startTime":0,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":200,"startTime":300}],"enable":true}],"updatedAt":1616225507057},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616153466399,"description":"","id":"-MW9FCMM__CKV0-sbrlq","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"Recoil_LV5","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":1},{"index":0,"intensity":1},{"index":4,"intensity":1},{"index":8,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":1,"intensity":1},{"index":0,"intensity":1},{"index":4,"intensity":1},{"index":8,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 4","offsetTime":200,"startTime":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":16,"intensity":0.5},{"index":13,"intensity":0.5},{"index":10,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":16,"intensity":0.6},{"index":13,"intensity":0.6},{"index":10,"intensity":0.6}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 5","offsetTime":200,"startTime":199}],"enable":true},{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":2,"intensity":0.8},{"index":6,"intensity":0.8},{"index":10,"intensity":0.8},{"index":13,"intensity":0.8},{"index":16,"intensity":0.8},{"index":12,"intensity":0.8},{"index":9,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":2,"intensity":0.8},{"index":6,"intensity":0.8},{"index":10,"intensity":0.8},{"index":13,"intensity":0.8},{"index":16,"intensity":0.8},{"index":12,"intensity":0.8},{"index":9,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 3","offsetTime":200,"startTime":100},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","pointList":[{"index":14,"intensity":0.3},{"index":17,"intensity":0.3},{"index":13,"intensity":0.3}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"FADE_OUT","startTime":0,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":200,"startTime":300}],"enable":true}],"updatedAt":1616225507057},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616134825893,"description":"","id":"-MW885ScMFCJIa5ASpG2","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"ReloadFinish","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":7,"intensity":0.6}],"startTime":0},{"endTime":200,"playbackType":"FADE_IN","pointList":[{"index":3,"intensity":0.6}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":6,"intensity":0.6},{"index":7,"intensity":0.6}],"startTime":0},{"endTime":200,"playbackType":"FADE_IN","pointList":[{"index":2,"intensity":0.6},{"index":3,"intensity":0.6}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616227734704},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616134825893,"description":"","id":"-MW885ScMFCJIa5ASpG2","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"ReloadFinish","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":4,"intensity":0.6}],"startTime":0},{"endTime":200,"playbackType":"FADE_IN","pointList":[{"index":0,"intensity":0.6}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":100,"playbackType":"NONE","pointList":[{"index":5,"intensity":0.6},{"index":4,"intensity":0.6}],"startTime":0},{"endTime":200,"playbackType":"FADE_IN","pointList":[{"index":1,"intensity":0.6},{"index":0,"intensity":0.6}],"startTime":100}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":200,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616227734704},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616160745618,"description":"","id":"-MW9fyYUJQWycnRv_wEC","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"SoulCube","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":1},{"index":7,"intensity":1},{"index":2,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy 1","offsetTime":150,"startTime":350,"trackIndex":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":1},{"index":7,"intensity":1},{"index":2,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225499541},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616160745618,"description":"","id":"-MW9fyYUJQWycnRv_wEC","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"SoulCube","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":1},{"index":4,"intensity":1},{"index":1,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy 1","offsetTime":150,"startTime":350,"trackIndex":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":0,"intensity":1},{"index":4,"intensity":1},{"index":1,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616225499541},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616134823958,"description":"","id":"-MW884zOsften2orxco7","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"WeaponSwap","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.5,"time":0,"x":0.66,"y":0.53},{"intensity":0.5,"time":150,"x":1,"y":0.25}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.5,"time":0,"x":0.67,"y":0.28},{"intensity":0.5,"time":150,"x":1,"y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616236130134},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1616134823958,"description":"","id":"-MW884zOsften2orxco7","layout":{"layouts":{"VestBack":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}],"VestFront":[{"index":0,"x":0,"y":0},{"index":1,"x":0.333,"y":0},{"index":2,"x":0.667,"y":0},{"index":3,"x":1,"y":0},{"index":4,"x":0,"y":0.25},{"index":5,"x":0.333,"y":0.25},{"index":6,"x":0.667,"y":0.25},{"index":7,"x":1,"y":0.25},{"index":8,"x":0,"y":0.5},{"index":9,"x":0.333,"y":0.5},{"index":10,"x":0.667,"y":0.5},{"index":11,"x":1,"y":0.5},{"index":12,"x":0,"y":0.75},{"index":13,"x":0.333,"y":0.75},{"index":14,"x":0.667,"y":0.75},{"index":15,"x":1,"y":0.75},{"index":16,"x":0,"y":1},{"index":17,"x":0.333,"y":1},{"index":18,"x":0.667,"y":1},{"index":19,"x":1,"y":1}]},"name":"Tactot","type":"Tactot"},"mediaFileDuration":1,"name":"WeaponSwap","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.5,"time":0,"x":"0.340","y":0.53},{"intensity":0.5,"time":150,"x":"0.000","y":0.25}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.5,"time":0,"x":"0.330","y":0.28},{"intensity":0.5,"time":150,"x":"0.000","y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":150,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1616236130134},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -5,18 +5,24 @@ package com.drbeef.doom3quest;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import com.bhaptics.commons.PermissionUtils;
import com.drbeef.doom3quest.bhaptics.bHaptics;
import com.drbeef.hapticsservice.IHapticsService;
import java.io.BufferedReader;
import java.io.File;
@ -29,7 +35,7 @@ import java.io.OutputStream;
import static android.system.Os.setenv;
@SuppressLint("SdCardPath") public class GLES3JNIActivity extends Activity implements SurfaceHolder.Callback
@SuppressLint("SdCardPath") public class GLES3JNIActivity extends Activity implements SurfaceHolder.Callback, ServiceConnection
{
// Load the gles3jni library right away to make sure JNI_OnLoad() gets called as the very first thing.
static
@ -37,9 +43,15 @@ import static android.system.Os.setenv;
System.loadLibrary( "doom3" );
}
private static final String TAG = "Doom3Quest";
private boolean hasHapticService = false;
private IHapticsService hapticsService = null;
private int permissionCount = 0;
private static final int READ_EXTERNAL_STORAGE_PERMISSION_ID = 1;
private static final int WRITE_EXTERNAL_STORAGE_PERMISSION_ID = 2;
private static final String APPLICATION = "Doom3Quest";
private String commandLineParams;
@ -53,41 +65,74 @@ import static android.system.Os.setenv;
}
public void haptic_event(String event, int position, int flags, int intensity, float angle, float yHeight) {
public void haptic_event(String event, int position, int flags, int intensity, float angle, float yHeight) {
bHaptics.playHaptic(event, position, flags, intensity, angle, yHeight);
if (hasHapticService) {
try {
hapticsService.hapticEvent(APPLICATION, event, position, flags, intensity, angle, yHeight);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void haptic_updateevent(String event, int intensity, float angle) {
bHaptics.updateRepeatingHaptic(event, intensity, angle);
if (hasHapticService) {
try {
hapticsService.hapticUpdateEvent(APPLICATION, event, intensity, angle);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void haptic_stopevent(String event) {
bHaptics.stopHaptic(event);
}
public void haptic_beginframe() {
bHaptics.beginFrame();
if (hasHapticService) {
try {
hapticsService.hapticStopEvent(APPLICATION, event);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void haptic_endframe() {
bHaptics.endFrame();
if (hasHapticService) {
try {
hapticsService.hapticFrameTick();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void haptic_enable() {
bHaptics.enable(this);
if (hasHapticService) {
try {
hapticsService.hapticEnable();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void haptic_disable() {
bHaptics.disable();
if (hasHapticService) {
try {
hapticsService.hapticDisable();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override protected void onCreate( Bundle icicle )
{
Log.v( TAG, "----------------------------------------------------------------" );
Log.v( TAG, "GLES3JNIActivity::onCreate()" );
super.onCreate( icicle );
mView = new SurfaceView( this );
@ -115,35 +160,37 @@ import static android.system.Os.setenv;
/** Initializes the Activity only if the permission has been granted. */
private void checkPermissionsAndInitialize() {
if (PermissionUtils.hasFilePermissions(this)) {
create();
onStart();
// Boilerplate for checking runtime permissions in Android.
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
}
else
{
requestPermissions();
permissionCount++;
}
if (permissionCount == 1) {
// Permissions have already been granted.
create();
}
}
/** Handles the user accepting the permission. */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
if (requestCode == 1) {
//Quit for now
finish();
System.exit(0);
}
//Was this a bHaptics FINE LOCATION perms request?
else if (requestCode == 2) {
if (results.length > 0 && results[0] == PackageManager.PERMISSION_GRANTED) {
//call enable again
bHaptics.enable(this);
}
else
{
//Don't do anything here, we can't enable if permissions were denied
if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_ID) {
if (results.length > 0 && results[0] != PackageManager.PERMISSION_GRANTED) {
finish();
System.exit(0);
}
}
checkPermissionsAndInitialize();
}
public void create() {
@ -296,9 +343,13 @@ import static android.system.Os.setenv;
@Override protected void onStart()
{
Log.v( TAG, "GLES3JNIActivity::onStart()" );
Log.v(APPLICATION, "GLES3JNIActivity::onStart()" );
super.onStart();
// Bind to the service - Make this a config file thing
bindService(new Intent("com.drbeef.hapticservice.HapticService_bHaptics").setPackage("com.drbeef.hapticservice"), this,
Context.BIND_AUTO_CREATE);
if ( mNativeHandle != 0 )
{
GLES3JNILib.onStart(mNativeHandle, this);
@ -307,7 +358,7 @@ import static android.system.Os.setenv;
@Override protected void onResume()
{
Log.v( TAG, "GLES3JNIActivity::onResume()" );
Log.v(APPLICATION, "GLES3JNIActivity::onResume()" );
super.onResume();
if ( mNativeHandle != 0 )
@ -318,7 +369,7 @@ import static android.system.Os.setenv;
@Override protected void onPause()
{
Log.v( TAG, "GLES3JNIActivity::onPause()" );
Log.v(APPLICATION, "GLES3JNIActivity::onPause()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onPause(mNativeHandle);
@ -328,19 +379,21 @@ import static android.system.Os.setenv;
@Override protected void onStop()
{
Log.v( TAG, "GLES3JNIActivity::onStop()" );
Log.v(APPLICATION, "GLES3JNIActivity::onStop()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onStop(mNativeHandle);
}
// Unbind from the service
unbindService(this);
super.onStop();
}
@Override protected void onDestroy()
{
Log.v( TAG, "GLES3JNIActivity::onDestroy()" );
bHaptics.destroy();
Log.v(APPLICATION, "GLES3JNIActivity::onDestroy()" );
if ( mSurfaceHolder != null )
{
@ -358,7 +411,7 @@ import static android.system.Os.setenv;
@Override public void surfaceCreated( SurfaceHolder holder )
{
Log.v( TAG, "GLES3JNIActivity::surfaceCreated()" );
Log.v(APPLICATION, "GLES3JNIActivity::surfaceCreated()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onSurfaceCreated( mNativeHandle, holder.getSurface() );
@ -368,7 +421,7 @@ import static android.system.Os.setenv;
@Override public void surfaceChanged( SurfaceHolder holder, int format, int width, int height )
{
Log.v( TAG, "GLES3JNIActivity::surfaceChanged()" );
Log.v(APPLICATION, "GLES3JNIActivity::surfaceChanged()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onSurfaceChanged( mNativeHandle, holder.getSurface() );
@ -378,11 +431,25 @@ import static android.system.Os.setenv;
@Override public void surfaceDestroyed( SurfaceHolder holder )
{
Log.v( TAG, "GLES3JNIActivity::surfaceDestroyed()" );
Log.v(APPLICATION, "GLES3JNIActivity::surfaceDestroyed()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onSurfaceDestroyed( mNativeHandle );
mSurfaceHolder = null;
}
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
hapticsService = IHapticsService.Stub.asInterface(service);
hasHapticService = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
stopService(new Intent("com.drbeef.hapticservice.HapticService_bHaptics").setPackage("com.drbeef.hapticservice"));
hasHapticService = false;
hapticsService = null;
}
}

View file

@ -1,800 +0,0 @@
package com.drbeef.doom3quest.bhaptics;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import com.bhaptics.bhapticsmanger.BhapticsManager;
import com.bhaptics.bhapticsmanger.BhapticsManagerCallback;
import com.bhaptics.bhapticsmanger.BhapticsModule;
import com.bhaptics.bhapticsmanger.DefaultHapticStreamer;
import com.bhaptics.bhapticsmanger.HapticStreamer;
import com.bhaptics.bhapticsmanger.HapticPlayer;
import com.bhaptics.commons.PermissionUtils;
import com.bhaptics.commons.model.BhapticsDevice;
import com.bhaptics.commons.model.DotPoint;
import com.bhaptics.commons.model.PositionType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import java.util.Vector;
public class bHaptics {
public static class Haptic
{
Haptic(PositionType type, String key, String altKey, String group, float intensity, float duration) {
this.type = type;
this.key = key;
this.altKey = altKey;
this.group = group;
this.directional = false;
this.intensity = intensity;
this.duration = duration;
this.rotation = 0;
this.level = 100;
}
public Haptic(Haptic haptic) {
this.type = haptic.type;
this.key = haptic.key;
this.altKey = haptic.altKey;
this.group = haptic.group;
this.directional = haptic.directional;
this.intensity = haptic.intensity;
this.duration = haptic.duration;
this.rotation = 0;
this.level = 100;
}
public final String key;
public final String altKey;
public final String group;
public boolean directional; // can be changed for specific repeating patterns
public final float duration;
public final PositionType type;
public final float intensity;
//These two values can be changed over time when playing a looping effect
public float rotation;
public float level;
};
private static final String TAG = "Doom3Quest.bHaptics";
private static Random rand = new Random();
private static boolean hasPairedDevice = false;
private static boolean enabled = false;
private static boolean requestingPermission = false;
private static boolean initialised = false;
private static HapticPlayer player;
private static HapticStreamer hapticStreamer;
private static Context context;
private static Map<String, Vector<Haptic>> eventToEffectKeyMap = new HashMap<>();
private static Map<String, Vector<Haptic>> repeatingHaptics = new HashMap<>();
public static void initialise()
{
if (initialised)
{
//Already initialised, but might need to rescan
scanIfNeeded();
return;
}
BhapticsModule.initialize(context);
scanIfNeeded();
player = BhapticsModule.getHapticPlayer();
/*
DAMAGE
*/
registerFromAsset(context, "bHaptics/Damage/Body_Heartbeat.tact", PositionType.Vest, "heartbeat", "health", 1.0f, 1.0f);
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Melee1.tact", "melee_left", "damage");
registerFromAsset(context, "bHaptics/Damage/Head/DMG_Melee1.tact", PositionType.Head, "melee_left", "damage"); // always play melee on the head too
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Melee2.tact", "melee_right", "damage");
registerFromAsset(context, "bHaptics/Damage/Head/DMG_Melee2.tact", PositionType.Head, "melee_right", "damage"); // always play melee on the head too
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fireball.tact", "fireball", "damage");
registerFromAsset(context, "bHaptics/Damage/Head/DMG_Explosion.tact", PositionType.Head, "fireball", "damage"); // always play fireball on the head too
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Bullet.tact", "bullet", "damage");
registerFromAsset(context, "bHaptics/Damage/Head/DMG_HeadShot.tact", PositionType.Head, "bullet", "damage");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Shotgun.tact", "shotgun", "damage");
registerFromAsset(context, "bHaptics/Damage/Head/DMG_Explosion.tact", PositionType.Head, "shotgun", "damage");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fire.tact", "fire", "damage");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fire.tact", "noair", "damage");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Falling.tact", "fall", "damage");
registerFromAsset(context, "bHaptics/Damage/Body_Shield_Break.tact", "shield_break", "damage");
/*
INTERACTIONS
*/
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Shield_Get.tact", "pickup_shield", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Pickup_L.tact", PositionType.ForearmL, "pickup_shield", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Pickup_R.tact", PositionType.ForearmR, "pickup_shield", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Weapon_Get.tact", "pickup_weapon", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/ItemPickup_Mirror.tact", PositionType.ForearmL, "pickup_weapon", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/ItemPickup.tact", PositionType.ForearmR, "pickup_weapon", "pickup");
//registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Ammo_Get.tact", "pickup_ammo", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Ammo_L.tact", PositionType.ForearmL, "pickup_ammo", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Ammo_R.tact", PositionType.ForearmR, "pickup_ammo", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Healstation.tact", "healstation", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Healthstation_L.tact", PositionType.ForearmL, "healstation", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Healthstation_R.tact", PositionType.ForearmR, "healstation", "pickup");
registerFromAsset(context, "bHaptics/Interaction/Vest/DoorSlide.tact", PositionType.Vest, "doorslide", "door", 1.0f, 0.5f);
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Scan.tact", PositionType.Vest, "scan", "environment", 1.0f, 1.15f);
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Scan.tact", PositionType.Vest, "decontaminate", "environment", 0.5f, 0.75f);
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Chamber_Up.tact", "liftup", "environment");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Chamber_Down.tact", "liftdown", "environment");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Machine.tact", "machine", "environment");
registerFromAsset(context, "bHaptics/Interaction/Vest/Spark.tact", "spark", "environment");
registerFromAsset(context, "bHaptics/Interaction/Head/Spark.tact", PositionType.Head, "spark", "environment", 0.5f, 0.5f);
//Directional based looping steam pattern
registerFromAsset(context, "bHaptics/Interaction/Vest/Steam.tact", PositionType.Vest, "steam_loop", "environment", 0.5f, 1.0f);
registerFromAsset(context, "bHaptics/Interaction/Head/Steam.tact", PositionType.Head, "steam_loop", "environment", 0.5f, 1.0f);
eventToEffectKeyMap.get("steam_loop").forEach((haptic) -> {
haptic.directional = true;
});
//Directional based looping flames pattern (use steam, but stronger)
registerFromAsset(context, "bHaptics/Interaction/Vest/Steam.tact", PositionType.Vest, "flame_loop", "environment", 1.0f, 1.0f);
registerFromAsset(context, "bHaptics/Interaction/Head/Steam.tact", PositionType.Head, "flame_loop", "environment", 1.0f, 1.0f);
eventToEffectKeyMap.get("flame_loop").forEach((haptic) -> {
haptic.directional = true;
});
//Re use the spark for the steam blast
registerFromAsset(context, "bHaptics/Interaction/Vest/Spark.tact", PositionType.Vest, "steam_blast", "environment", 1.0f, 0.25f);
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_PDA_Open.tact", "pda_open", "pda");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_PDA_Open.tact", "pda_close", "pda");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_PDA_Alarm.tact", "pda_alarm", "pda");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_PDA_Touch.tact", "pda_touch", "pda");
registerFromAsset(context, "bHaptics/Interaction/Arms/PDA_Click_Mirror.tact", PositionType.ForearmL, "pda_touch", "pda");
registerFromAsset(context, "bHaptics/Interaction/Arms/PDA_Click.tact", PositionType.ForearmR, "pda_touch", "pda");
registerFromAsset(context, "bHaptics/Interaction/Vest/PlayerJump.tact", "jump_start", "player");
registerFromAsset(context, "bHaptics/Interaction/Vest/PlayerLanding.tact", "jump_landing", "player");
/*
WEAPONS
*/
registerFromAsset(context, "bHaptics/Weapon/Vest/WeaponSwap.tact", PositionType.Right, "weapon_switch", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Swap_R.tact", PositionType.ForearmR, "weapon_switch", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Vest/WeaponSwap_Mirror.tact", PositionType.Left, "weapon_switch", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Swap_L.tact", PositionType.ForearmL, "weapon_switch", "weapon");
//Reload Start
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_Reload.tact", "weapon_reload", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Reload_L.tact", PositionType.ForearmL, "weapon_reload", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Reload_R.tact", PositionType.ForearmR, "weapon_reload", "weapon");
//Reload Finish
registerFromAsset(context, "bHaptics/Weapon/Vest/ReloadFinish.tact", PositionType.Right, "weapon_reload_finish", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/ReloadFinish.tact", PositionType.ForearmR, "weapon_reload_finish", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Vest/ReloadFinish_Mirror.tact", PositionType.Left, "weapon_reload_finish", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/ReloadFinish_Mirror.tact", PositionType.ForearmL, "weapon_reload_finish", "weapon");
//Chainsaw Idle
registerFromAsset(context, "bHaptics/Weapon/Vest/Chainsaw_LV1.tact", PositionType.Right, "chainsaw_idle", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Chainsaw_LV2.tact", PositionType.ForearmR, "chainsaw_idle", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Vest/Chainsaw_LV1_Mirror.tact", PositionType.Left, "chainsaw_idle", "weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/Chainsaw_LV2_Mirror.tact", PositionType.ForearmL, "chainsaw_idle", "weapon");
//Chainsaw Fire
registerFromAsset(context, "bHaptics/Weapon/Vest/Chainsaw_LV2.tact", PositionType.Right, "chainsaw_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Chainsaw_LV1.tact", PositionType.ForearmR, "chainsaw_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Chainsaw_LV2_Mirror.tact", PositionType.Left, "chainsaw_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Chainsaw_LV1_Mirror.tact", PositionType.ForearmL, "chainsaw_fire", "weapon_fire");
//Fist
registerFromAsset(context, "bHaptics/Weapon/Vest/Fist_Mirror.tact", PositionType.Left, "punch", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Fist_Mirror.tact", PositionType.ForearmL, "punch", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Fist.tact", PositionType.Right, "punch", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Fist.tact", PositionType.ForearmR, "punch", "weapon_fire");
//Pistol
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV3_Mirror.tact", PositionType.Left, "pistol_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV3_Mirror.tact", PositionType.ForearmL, "pistol_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV3.tact", PositionType.Right, "pistol_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV3.tact", PositionType.ForearmR, "pistol_fire", "weapon_fire");
//Shotgun
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV2_Mirror.tact", PositionType.Left, "shotgun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV2_Mirror.tact", PositionType.ForearmL, "shotgun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV2.tact", PositionType.Right, "shotgun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV2.tact", PositionType.ForearmR, "shotgun_fire", "weapon_fire");
//Plasma Gun
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV1_Mirror.tact", PositionType.Left, "plasmagun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV1_Mirror.tact", PositionType.ForearmL, "plasmagun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV1.tact", PositionType.Right, "plasmagun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV1.tact", PositionType.ForearmR, "plasmagun_fire", "weapon_fire");
//Grenade
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_Grenade_Init.tact", "handgrenade_init", "weapon_init");
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_Grenade_Throw.tact", "handgrenade_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Grenade_L.tact", PositionType.ForearmL, "handgrenade_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Grenade_R.tact", PositionType.ForearmR, "handgrenade_fire", "weapon_fire");
//SMG
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV1_Mirror.tact", PositionType.Left, "machinegun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV1_Mirror.tact", PositionType.ForearmL, "machinegun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV1.tact", PositionType.Right, "machinegun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV1.tact", PositionType.ForearmR, "machinegun_fire", "weapon_fire");
//Chaingun
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_Chaingun_Init.tact", "chaingun_init", "weapon_init");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV2_Mirror.tact", PositionType.Left, "chaingun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV2_Mirror.tact", PositionType.ForearmL, "chaingun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV2.tact", PositionType.Right, "chaingun_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV2.tact", PositionType.ForearmR, "chaingun_fire", "weapon_fire");
//BFG9000
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_BFG9000_Init.tact", "bfg_init", "weapon_init");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV5_Mirror.tact", PositionType.Left, "bfg_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV5_Mirror.tact", PositionType.ForearmL, "bfg_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV5.tact", PositionType.Right, "bfg_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV5.tact", PositionType.ForearmR, "bfg_fire", "weapon_fire");
//Rocket Launcher
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV4_Mirror.tact", PositionType.Left, "rocket_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV4_Mirror.tact", PositionType.ForearmL, "rocket_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Vest/Recoil_LV4.tact", PositionType.Right, "rocket_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/Recoil_LV4.tact", PositionType.ForearmR, "rocket_fire", "weapon_fire");
//Soul Cube
registerFromAsset(context, "bHaptics/Weapon/Vest/SoulCube.tact", PositionType.Right, "soul_cube_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/SoulCube.tact", PositionType.ForearmR, "soul_cube_fire", "weapon_fire", 2.0f, 1.0f);
registerFromAsset(context, "bHaptics/Weapon/Vest/SoulCube_Mirror.tact", PositionType.Left, "soul_cube_fire", "weapon_fire");
registerFromAsset(context, "bHaptics/Weapon/Arms/SoulCube_Mirror.tact", PositionType.ForearmL, "soul_cube_fire", "weapon_fire", 2.0f, 1.0f);
initialised = true;
}
public static void registerFromAsset(Context context, String filename, PositionType type, String key, String group, float intensity, float duration)
{
String content = read(context, filename);
if (content != null) {
String hapticKey = key + "_" + type.name();
player.registerProject(hapticKey, content);
UUID uuid = UUID.randomUUID();
Haptic haptic = new Haptic(type, hapticKey, uuid.toString(), group, intensity, duration);
Vector<Haptic> haptics;
if (!eventToEffectKeyMap.containsKey(key))
{
haptics = new Vector<>();
haptics.add(haptic);
eventToEffectKeyMap.put(key, haptics);
}
else
{
haptics = eventToEffectKeyMap.get(key);
haptics.add(haptic);
}
}
}
public static void registerFromAsset(Context context, String filename, String key, String group)
{
registerFromAsset(context, filename, PositionType.Vest, key, group, 1.0f, 1.0f);
}
public static void registerFromAsset(Context context, String filename, PositionType type, String key, String group)
{
registerFromAsset(context, filename, type, key, group, 1.0f, 1.0f);
}
public static void destroy()
{
if (initialised) {
BhapticsModule.destroy();
}
}
private static boolean hasPermissions() {
boolean blePermission = PermissionUtils.hasBluetoothPermission(context);
boolean filePermission = PermissionUtils.hasFilePermissions(context);
return blePermission && filePermission;
}
private static void requestPermissions() {
if (!requestingPermission) {
requestingPermission = true;
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
2);
}
}
private static boolean checkPermissionsAndInitialize() {
if (hasPermissions()) {
// Permissions have already been granted.
return true;
}
else
{
requestPermissions();
}
return false;
}
public static void enable(Context ctx)
{
context = ctx;
if (!enabled)
{
if (checkPermissionsAndInitialize()) {
initialise();
enabled = true;
}
}
}
public static void disable()
{
enabled = false;
stopStreaming();
}
public static void startStreaming() {
if (hapticStreamer == null) {
hapticStreamer = new DefaultHapticStreamer();
hapticStreamer.setCallback(new HapticStreamer.HapticStreamerCallback() {
@Override
public void onDiscover(String host) {
Log.i(TAG, "onDiscover: " + host);
hapticStreamer.connect(host);
}
@Override
public void onConnect(String host) {
}
@Override
public void onDisconnect(String host) {
}
});
hapticStreamer.refreshCandidateIps();
}
}
public static void stopStreaming() {
if (hapticStreamer != null) {
hapticStreamer.dispose();
hapticStreamer = null;
}
}
public static void refreshIp() {
if (hapticStreamer != null) {
hapticStreamer.refreshCandidateIps();
}
}
public static void beginFrame() {}
public static void endFrame()
{
if (enabled && hasPairedDevice) {
repeatingHaptics.forEach((key, haptics) -> {
haptics.forEach((haptic) -> {
if (haptic.level < 10) {
if (player.isPlaying(haptic.altKey)) {
player.turnOff(haptic.altKey);
}
} else if (!player.isPlaying(haptic.altKey)) {
//If a repeating haptic isn't playing, start it again with last known values
float flIntensity = ((haptic.level / 100.0F) * haptic.intensity);
if (haptic.type != PositionType.Head ||
//If the haptic is head based, then only play if it is within a certain FOV
(haptic.rotation >= -360 && haptic.rotation <= -315) || (haptic.rotation >= 0 && haptic.rotation <= 45)) {
player.submitRegistered(haptic.key, haptic.altKey, flIntensity, haptic.duration, haptic.rotation, 0);
}
}
});
});
}
else
{
repeatingHaptics.clear();
}
}
/*
position values:
0 - Will play on vest and both arms if tactosy tact files present for both
1 - Will play on (left) vest and on left arm only if tactosy tact files present for left
2 - Will play on (right) vest and on right arm only if tactosy tact files present for right
3 - Will play on head only (if present)
4 - Will play on all devices (that have a pattern defined for them)
flag values:
0 - No flags set
1 - Indicate this is a looping effect that should play repeatedly until stopped
intensity:
0 - 100
angle:
0 - 360
yHeight:
-0.5 - 0.5
*/
public static void playHaptic(String event, int position, int flags, float intensity, float angle, float yHeight)
{
if (enabled && hasPairedDevice) {
String key = getHapticEventKey(event);
//Log.v(TAG, event);
//Special rumble effect that changes intensity per frame
if (key.compareTo("rumble") == 0)
{
{
float highDuration = angle;
List<DotPoint> vector = new Vector<>();
int flipflop = 0;
for (int d = 0; d < 20; d += 4) // Only select every other dot
{
vector.add(new DotPoint(d + flipflop, (int) intensity));
vector.add(new DotPoint(d + 2 + flipflop, (int) intensity));
flipflop = 1 - flipflop;
}
player.submitDot("rumble_front", PositionType.VestFront, vector, (int) highDuration);
player.submitDot("rumble_back", PositionType.VestBack, vector, (int) highDuration);
}
}
else if (eventToEffectKeyMap.containsKey(key)) {
Vector<Haptic> haptics = eventToEffectKeyMap.get(key);
for (Haptic haptic : haptics) {
//Don't allow a haptic to interrupt itself if it is already playing
if (player.isPlaying(haptics.get(0).altKey)) {
return;
}
//The following groups play at full intensity
if (haptic.group.compareTo("environment") == 0) {
intensity = 100;
}
{
float flIntensity = ((intensity / 100.0F) * haptic.intensity);
float flAngle = angle;
float flDuration = haptic.duration;
if (position > 0)
{
BhapticsManager manager = BhapticsModule.getBhapticsManager();
//If playing left position and haptic type is right, don;t play that one
if (position == 1)
{
if (haptic.type == PositionType.ForearmR ||
haptic.type == PositionType.Right) {
continue;
}
}
//If playing right position and haptic type is left, don;t play that one
if (position == 2)
{
if (haptic.type == PositionType.ForearmL ||
haptic.type == PositionType.Left) {
continue;
}
}
//Are we playing a "head only" pattern?
if (position == 3 &&
(haptic.type != PositionType.Head || !manager.isDeviceConnected(BhapticsManager.DeviceType.Head)))
{
continue;
}
if (haptic.type == PositionType.Head) {
//Is this a "don't play on head" effect?
if (position < 3) {
continue;
}
//Zero angle for head
flAngle = 0;
}
}
//Special values for heartbeat
if (haptic.group.compareTo("health") == 0)
{
//The worse condition we are in, the faster the heart beats!
float health = intensity;
flDuration = 1.0f - (0.4f * ((40 - health) / 40));
flIntensity = 1.0f;
flAngle = 0;
}
//If this is a repeating event, then add to the set to play in begin frame
if (flags == 1)
{
Haptic repeatingHaptic = new Haptic(haptic);
if (haptic.directional) {
repeatingHaptic.rotation = flAngle;
}
repeatingHaptic.level = intensity;
if (!repeatingHaptics.containsKey(key))
{
Vector<Haptic> v = new Vector<>();
v.add(repeatingHaptic);
repeatingHaptics.put(key, v);
}
else
{
Vector<Haptic> v = repeatingHaptics.get(key);
v.add(repeatingHaptic);
}
}
else {
player.submitRegistered(haptic.key, haptic.altKey, flIntensity, flDuration, flAngle, yHeight);
}
}
}
}
else
{
Log.v(TAG, "Unknown Event: " + event);
}
}
}
private static String getHapticEventKey(String event) {
String key = event.toLowerCase();
if (key.contains("melee")) {
if (key.contains("right"))
{
key = "melee_right";
}
else
{
key = "melee_left";
}
}
else if (key.contains("damage")) {
if (key.contains("bullet") ||
key.contains("splash") ||
key.contains("cgun")) {
key = "bullet";
}
else if (key.contains("fireball") ||
key.contains("rocket") ||
key.contains("explode")) {
key = "fireball"; // Just re-use this one
}
else if (key.contains("noair") || key.contains("gasp")) {
key = "noair";
}
else if (key.contains("shotgun")) {
key = "shotgun";
}
else if (key.contains("fall")) {
key = "fall";
}
}
else if (key.contains("door") || key.contains("panel") || key.contains("silver_sliding"))
{
key = "doorslide";
}
else if (key.contains("lift"))
{
if (key.contains("up"))
{
key = "liftup";
}
else if (key.contains("down"))
{
key = "liftdown";
}
}
else if (key.contains("elevator"))
{
key = "machine";
}
else if (key.contains("entrance_scanner") || key.contains("scanner_rot1s"))
{
key = "scan";
}
else if (key.contains("decon_started"))
{
key = "decontaminate";
}
else if (key.contains("spark"))
{
key = "spark";
}
else if (key.contains("flames") || key.contains("propane") || key.contains("burning"))
{
key = "flame_loop";
}
else if (key.contains("steam"))
{
if (key.contains("blast") || key.contains("shot") || key.contains("chuff")) {
key = "steam_blast";
}
else
{
key = "steam_loop";
}
}
else if (key.contains("player") && key.contains("jump"))
{
key = "jump_start";
}
else if (key.contains("player") && key.contains("land"))
{
key = "jump_landing";
}
return key;
}
public static void stopHaptic(String event) {
if (enabled && hasPairedDevice) {
String key = getHapticEventKey(event);
if (repeatingHaptics.containsKey(key))
{
repeatingHaptics.get(key).forEach((haptic) -> {
player.turnOff(haptic.altKey);
});
repeatingHaptics.remove(key);
}
}
}
public static void updateRepeatingHaptic(String event, float intensity, float angle) {
if (enabled && hasPairedDevice) {
String key = getHapticEventKey(event);
if (repeatingHaptics.containsKey(key))
{
repeatingHaptics.get(key).forEach((haptic) -> {
if (haptic.directional) {
haptic.rotation = angle;
}
haptic.level = intensity;
});
}
}
}
public static String read(Context context, String fileName) {
try {
InputStream is = context.getAssets().open(fileName);
StringBuilder textBuilder = new StringBuilder();
try (Reader reader = new BufferedReader(new InputStreamReader
(is, Charset.forName(StandardCharsets.UTF_8.name())))) {
int c = 0;
while ((c = reader.read()) != -1) {
textBuilder.append((char) c);
}
}
return textBuilder.toString();
} catch (IOException e) {
Log.e(TAG, "read: ", e);
}
return null;
}
public static void scanIfNeeded() {
BhapticsManager manager = BhapticsModule.getBhapticsManager();
List<BhapticsDevice> deviceList = manager.getDeviceList();
for (BhapticsDevice device : deviceList) {
if (device.isPaired()) {
hasPairedDevice = true;
break;
}
}
if (hasPairedDevice) {
manager.scan();
manager.addBhapticsManageCallback(new BhapticsManagerCallback() {
@Override
public void onDeviceUpdate(List<BhapticsDevice> list) {
}
@Override
public void onScanStatusChange(boolean b) {
}
@Override
public void onChangeResponse() {
}
@Override
public void onConnect(String s) {
Thread t = new Thread(() -> {
try {
Thread.sleep(1000);
manager.ping(s);
}
catch (Throwable e) {
}
});
t.start();
}
@Override
public void onDisconnect(String s) {
}
});
}
startStreaming();
}
}