Move to using bHaptics service

This commit is contained in:
Simon 2021-05-02 10:42:53 +01:00
parent 8ae6d5604f
commit c4a3dd2ecb
31 changed files with 97 additions and 1647 deletions

Binary file not shown.

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614045611893,"description":"","id":"-MUBbNia2pxTI9bYQH4k","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.21,"name":"Body_DMG_Bullet","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":1,"time":0,"x":0.496,"y":0.499}],"visible":true}]}}},"name":"path","offsetTime":100,"startTime":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":200,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.7,"time":0,"x":0.496,"y":0.502},{"intensity":0.7,"time":200,"x":0.803,"y":0.116}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.7,"time":0,"x":0.499,"y":0.502},{"intensity":0.7,"time":200,"x":0.8,"y":0.87}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.7,"time":0,"x":0.499,"y":0.503},{"intensity":0.7,"time":200,"x":0.197,"y":0.112}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.7,"time":0,"x":0.498,"y":0.502},{"intensity":0.7,"time":200,"x":0.197,"y":0.87}],"visible":true}]}}},"name":"path","offsetTime":200,"startTime":10}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614046809138},"durationMillis":0,"intervalMillis":20,"size":20}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614061945366,"description":"","id":"-MUC_gA_V0xawHHkzj_V","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_DMG_Falling","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":160,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.5},{"index":17,"intensity":0.5},{"index":13,"intensity":0.5},{"index":14,"intensity":0.5},{"index":18,"intensity":0.5},{"index":19,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0,"y":1},{"intensity":0.5,"time":160,"x":0.31,"y":1}],"visible":true}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":160,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.5},{"index":17,"intensity":0.5},{"index":13,"intensity":0.5},{"index":14,"intensity":0.5},{"index":18,"intensity":0.5},{"index":19,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":160,"startTime":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":73,"playbackType":"FADE_IN_OUT","pointList":[{"index":16,"intensity":0.4},{"index":17,"intensity":0.4},{"index":18,"intensity":0.4},{"index":19,"intensity":0.4}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0,"y":1},{"intensity":0.5,"time":73,"x":0.31,"y":1}],"visible":true}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":73,"playbackType":"FADE_IN_OUT","pointList":[{"index":16,"intensity":0.4},{"index":17,"intensity":0.4},{"index":18,"intensity":0.4},{"index":19,"intensity":0.4}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy 1","offsetTime":73,"startTime":125,"trackIndex":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":234,"playbackType":"FADE_IN_OUT","pointList":[{"index":16,"intensity":0.8},{"index":17,"intensity":0.8},{"index":13,"intensity":0.8},{"index":14,"intensity":0.8},{"index":18,"intensity":0.8},{"index":19,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0,"y":1},{"intensity":0.5,"time":234,"x":0.31,"y":1}],"visible":true}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":234,"playbackType":"FADE_IN_OUT","pointList":[{"index":16,"intensity":0.8},{"index":17,"intensity":0.8},{"index":13,"intensity":0.8},{"index":14,"intensity":0.8},{"index":18,"intensity":0.8},{"index":19,"intensity":0.8}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1 copy 2","offsetTime":234,"startTime":183,"trackIndex":0}],"enable":true},{"enable":true,"effects":[]}],"type":"project","updatedAt":1614062086876},"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

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614048794073,"description":"","id":"-MUBnWcADf5KMVyhKI-w","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_DMG_Melee1","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":301,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":301,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.05,"y":0.05},{"intensity":1,"time":202,"x":0.36,"y":0.61},{"intensity":1,"time":301,"x":0.36,"y":0.92}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.9,"time":0,"x":0.36,"y":0.02},{"intensity":0.9,"time":177,"x":0.67,"y":0.56},{"intensity":0.9,"time":301,"x":0.56,"y":0.98}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.8,"time":0,"x":0.52,"y":0},{"intensity":0.8,"time":164,"x":0.95,"y":0.49},{"intensity":0.8,"time":301,"x":0.74,"y":0.99}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.21,"y":0.01},{"intensity":1,"time":186,"x":0.52,"y":0.59},{"intensity":1,"time":301,"x":0.45,"y":0.99}],"visible":true}]}}},"name":"Effect 1","offsetTime":301,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614048846823},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614048803886,"description":"","id":"-MUBnZ0WpNnym9JDjO35","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_DMG_Melee2","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":353,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":353,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN_OUT","pointList":[{"intensity":1,"time":0,"x":0.14,"y":0.1},{"intensity":1,"time":112,"x":0.19,"y":0.64},{"intensity":1,"time":170,"x":0.04,"y":0.4},{"intensity":1,"time":230,"x":0.33,"y":0.37},{"intensity":1,"time":285,"x":0.39,"y":0.63},{"intensity":1,"time":353,"x":0.39,"y":0.95}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN_OUT","pointList":[{"intensity":1,"time":0,"x":0.6,"y":0.02},{"intensity":1,"time":105,"x":0.86,"y":0.46},{"intensity":1,"time":166,"x":0.84,"y":0.16},{"intensity":1,"time":231,"x":0.57,"y":0.33},{"intensity":1,"time":289,"x":0.68,"y":0.59},{"intensity":1,"time":353,"x":0.82,"y":0.86}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.33,"y":0},{"intensity":1,"time":353,"x":0.64,"y":0.99}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.14,"y":0},{"intensity":1,"time":353,"x":0.49,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":1,"time":0,"x":0.5,"y":0},{"intensity":1,"time":353,"x":0.8,"y":0.95}],"visible":true}]}}},"name":"Effect 1","offsetTime":353,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614048856777},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614045602307,"description":"","id":"-MUBbLNpMc_4cg2om2f6","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.226,"name":"Body_DMG_Shotgun","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_OUT","pointList":[{"index":9,"intensity":1},{"index":10,"intensity":1},{"index":6,"intensity":1},{"index":5,"intensity":1},{"index":13,"intensity":1},{"index":14,"intensity":1},{"index":0,"intensity":1},{"index":3,"intensity":1},{"index":16,"intensity":1},{"index":19,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"path","offsetTime":150,"startTime":0},{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":150,"playbackType":"FADE_IN","pointList":[{"index":10,"intensity":1},{"index":9,"intensity":1},{"index":14,"intensity":1},{"index":13,"intensity":1},{"index":5,"intensity":1},{"index":6,"intensity":1}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","pointList":[{"intensity":0.5,"time":0,"x":0.357,"y":0.017},{"intensity":0.5,"time":150,"x":0.69,"y":0.021}],"visible":true}]}},"VestFront":{"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":"path","offsetTime":150,"startTime":76}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614046862534},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614060274647,"description":"","id":"-MUCUJH_9e0MdvLOR8ly","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_Heartbeat","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":true,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":88,"playbackType":"NONE","startTime":0,"pointList":[]},{"endTime":176,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.4},{"index":5,"intensity":0.4},{"index":0,"intensity":0.4}],"startTime":88},{"endTime":265,"playbackType":"NONE","startTime":176,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":265,"startTime":0}],"enable":true},{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":true,"feedback":[]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":74,"playbackType":"NONE","startTime":0,"pointList":[]},{"endTime":148,"playbackType":"NONE","pointList":[{"index":1,"intensity":0.4},{"index":5,"intensity":0.4}],"startTime":74},{"endTime":223,"playbackType":"NONE","startTime":148,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"dot","offsetTime":223,"startTime":266}],"enable":true}],"updatedAt":1614060291468},"durationMillis":0,"intervalMillis":20,"size":20}

File diff suppressed because one or more lines are too long

View file

@ -1,167 +0,0 @@
{
"project": {
"createdAt": 1588717308064,
"description": "",
"id": "",
"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": "Arm_Ammo_L",
"tracks": [
{
"effects": [
{
"modes": {
"ForearmL": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 208,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.22,
"y": 0.66
},
{
"intensity": 0.5,
"time": 95,
"x": 0.98,
"y": 0.36
},
{
"intensity": 0.5,
"time": 154,
"x": 0.48,
"y": 0.48
},
{
"intensity": 0.5,
"time": 208,
"x": 0.2,
"y": 0.12
}
],
"visible": true
}
]
}
},
"ForearmR": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 208,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": []
}
}
},
"name": "Effect 1",
"offsetTime": 208,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1588717323608
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

View file

@ -1,173 +0,0 @@
{
"project": {
"createdAt": 1588717167212,
"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": "Arm_Ammo_R",
"tracks": [
{
"effects": [
{
"modes": {
"ForearmL": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 208,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"visible": true,
"pointList": []
}
]
}
},
"ForearmR": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 208,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.22,
"y": 0.66
},
{
"intensity": 0.5,
"time": 95,
"x": 0.98,
"y": 0.36
},
{
"intensity": 0.5,
"time": 154,
"x": 0.48,
"y": 0.48
},
{
"intensity": 0.5,
"time": 208,
"x": 0.2,
"y": 0.12
}
],
"visible": true
}
]
}
}
},
"name": "Effect 1",
"offsetTime": 208,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1588717291718
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"project":{"createdAt":1588851459789,"description":"","id":"","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":"HealthStationUseRightArm_1","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":308,"playbackType":"FADE_IN_OUT","pointList":[{"index":0,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":308,"startTime":0},{"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":302,"playbackType":"FADE_IN_OUT","pointList":[{"index":2,"intensity":0.5}],"startTime":0}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 3","offsetTime":302,"startTime":219},{"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":301,"playbackType":"FADE_IN_OUT","pointList":[{"index":1,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 5","offsetTime":301,"startTime":467},{"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":303,"playbackType":"FADE_IN_OUT","pointList":[{"index":0,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 7","offsetTime":303,"startTime":616}],"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":308,"playbackType":"FADE_IN_OUT","pointList":[{"index":4,"intensity":0.5}],"startTime":0}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":308,"startTime":86},{"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":309,"playbackType":"FADE_IN_OUT","pointList":[{"index":3,"intensity":0.5}],"startTime":0}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 4","offsetTime":309,"startTime":465},{"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":301,"playbackType":"FADE_IN_OUT","pointList":[{"index":4,"intensity":0.5}],"startTime":0}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 6","offsetTime":301,"startTime":274},{"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":301,"playbackType":"FADE_IN_OUT","pointList":[{"index":5,"intensity":0.5}],"startTime":0}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 8","offsetTime":301,"startTime":694}],"enable":true}],"updatedAt":1588851566466},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1,193 +0,0 @@
{
"project": {
"createdAt": 1588700875148,
"description": "",
"id": "",
"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": "Arm_Pickup_L",
"tracks": [
{
"effects": [
{
"modes": {
"ForearmL": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 250,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0,
"y": 0.02
},
{
"intensity": 0.6,
"time": 250,
"x": 0,
"y": 0.56
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0.5,
"y": 0.01
},
{
"intensity": 0.6,
"time": 250,
"x": 0.49,
"y": 0.55
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0.99,
"y": 0.02
},
{
"intensity": 0.6,
"time": 250,
"x": 0.98,
"y": 0.54
}
],
"visible": true
}
]
}
},
"ForearmR": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 250,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": []
}
}
},
"name": "Effect 1",
"offsetTime": 250,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1588700906413
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

View file

@ -1,199 +0,0 @@
{
"project": {
"createdAt": 1588700778838,
"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": "Arm_Pickup_R",
"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": false,
"feedback": [
{
"endTime": 250,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0,
"y": 0.02
},
{
"intensity": 0.6,
"time": 250,
"x": 0,
"y": 0.56
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0.5,
"y": 0.01
},
{
"intensity": 0.6,
"time": 250,
"x": 0.49,
"y": 0.55
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"pointList": [
{
"intensity": 0.6,
"time": 0,
"x": 0.99,
"y": 0.02
},
{
"intensity": 0.6,
"time": 250,
"x": 0.98,
"y": 0.54
}
],
"visible": true
}
]
}
}
},
"name": "Effect 1",
"offsetTime": 250,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1589043737549
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614048923930,"description":"","id":"-MUBo0KAj1FzMlYj4yfu","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.35,"name":"Body_Healstation","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":350,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":350,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.3,"time":0,"x":0.51,"y":0.23},{"intensity":0.3,"time":350,"x":0.52,"y":0}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.3,"time":0,"x":0.49,"y":0.72},{"intensity":0.3,"time":350,"x":0.49,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.3,"time":0,"x":0.73,"y":0.5},{"intensity":0.3,"time":350,"x":1,"y":0.49}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_IN","pointList":[{"intensity":0.3,"time":0,"x":0.27,"y":0.49},{"intensity":0.3,"time":350,"x":0,"y":0.49}],"visible":true}]}}},"name":"path","offsetTime":350,"startTime":0}],"enable":true},{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":350,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":350,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.3,"time":0,"x":0.72,"y":0.25},{"intensity":0.3,"time":350,"x":0.99,"y":0.01}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.3,"time":0,"x":0.3,"y":0.74},{"intensity":0.3,"time":350,"x":0,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.3,"time":0,"x":0.67,"y":0.75},{"intensity":0.3,"time":350,"x":1,"y":1}],"visible":true},{"movingPattern":"CONST_SPEED","playbackType":"FADE_OUT","pointList":[{"intensity":0.3,"time":0,"x":0.31,"y":0.24},{"intensity":0.3,"time":350,"x":0.03,"y":0.01}],"visible":true}]}}},"name":"path","offsetTime":350,"startTime":0}],"enable":true}],"updatedAt":1614049113924},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614045491186,"description":"","id":"-MUBavF_CdJJCd6uDvQ1","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_Shield_Get","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":70,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.3},{"index":16,"intensity":0.3},{"index":10,"intensity":0.3},{"index":19,"intensity":0.3},{"index":3,"intensity":0.3},{"index":9,"intensity":0.3}],"startTime":0},{"endTime":141,"playbackType":"NONE","startTime":70,"pointList":[]},{"endTime":211,"playbackType":"NONE","startTime":141,"pointList":[]},{"endTime":282,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.3},{"index":9,"intensity":0.3},{"index":0,"intensity":0.3},{"index":10,"intensity":0.3},{"index":3,"intensity":0.3},{"index":19,"intensity":0.3}],"startTime":211},{"endTime":353,"playbackType":"NONE","startTime":282,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":true,"feedback":[{"endTime":88,"playbackType":"NONE","pointList":[{"index":0,"intensity":0.3},{"index":16,"intensity":0.3},{"index":10,"intensity":0.3},{"index":19,"intensity":0.3},{"index":3,"intensity":0.3},{"index":9,"intensity":0.3}],"startTime":0},{"endTime":176,"playbackType":"NONE","startTime":88,"pointList":[]},{"endTime":264,"playbackType":"NONE","startTime":176,"pointList":[]},{"endTime":353,"playbackType":"NONE","pointList":[{"index":16,"intensity":0.3},{"index":9,"intensity":0.3},{"index":0,"intensity":0.3},{"index":10,"intensity":0.3},{"index":3,"intensity":0.3},{"index":19,"intensity":0.3}],"startTime":264},{"endTime":353,"playbackType":"NONE","startTime":353,"pointList":[]}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 2","offsetTime":353,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"type":"project","updatedAt":1614047144270},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1612169309013,"description":"","id":"-MSRlqVvfsiS46-TvT0U","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":"Reload_L","tracks":[{"effects":[{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"index":2,"intensity":0.8}],"startTime":0}]},"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":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1","offsetTime":75,"startTime":25},{"modes":{"ForearmL":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":75,"playbackType":"NONE","pointList":[{"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":[{"endTime":75,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}}},"name":"Effect 1 copy 1","offsetTime":75,"startTime":125}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1612169355742},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1612169321640,"description":"","id":"-MSRltaCurrZp-ouVkRI","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":"Reload_R","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":1612169357359},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1,211 +0,0 @@
{
"project": {
"createdAt": 1588695063234,
"description": "",
"id": "",
"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": "ShootDefault_L",
"tracks": [
{
"effects": [
{
"modes": {
"ForearmL": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 300,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.4,
"y": 0
},
{
"intensity": 0.5,
"time": 127,
"x": 0.39,
"y": 0.48
},
{
"intensity": 0.5,
"time": 300,
"x": 0,
"y": 1
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.51,
"y": 0
},
{
"intensity": 0.5,
"time": 144,
"x": 0.5,
"y": 0.48
},
{
"intensity": 0.5,
"time": 300,
"x": 0.5,
"y": 1
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.62,
"y": 0.01
},
{
"intensity": 0.5,
"time": 129,
"x": 0.6,
"y": 0.49
},
{
"intensity": 0.5,
"time": 300,
"x": 0.98,
"y": 1
}
],
"visible": true
}
]
}
},
"ForearmR": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 300,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": []
}
}
},
"name": "Effect 1",
"offsetTime": 300,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1588695081620
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

View file

@ -1,210 +0,0 @@
{
"project": {
"createdAt": 1588695017725,
"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": "ShootDefault_R",
"tracks": [
{
"effects": [
{
"modes": {
"ForearmL": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 300,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": []
}
},
"ForearmR": {
"dotMode": {
"dotConnected": false,
"feedback": [
{
"endTime": 300,
"playbackType": "NONE",
"startTime": 0,
"pointList": []
}
]
},
"mode": "PATH_MODE",
"pathMode": {
"feedback": [
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.4,
"y": 0
},
{
"intensity": 0.5,
"time": 127,
"x": 0.39,
"y": 0.48
},
{
"intensity": 0.5,
"time": 300,
"x": 0,
"y": 1
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "NONE",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.51,
"y": 0
},
{
"intensity": 0.5,
"time": 144,
"x": 0.5,
"y": 0.48
},
{
"intensity": 0.5,
"time": 300,
"x": 0.5,
"y": 1
}
],
"visible": true
},
{
"movingPattern": "CONST_SPEED",
"playbackType": "FADE_IN",
"pointList": [
{
"intensity": 0.5,
"time": 0,
"x": 0.62,
"y": 0.01
},
{
"intensity": 0.5,
"time": 129,
"x": 0.6,
"y": 0.49
},
{
"intensity": 0.5,
"time": 300,
"x": 0.98,
"y": 1
}
],
"visible": true
}
]
}
}
},
"name": "Effect 1",
"offsetTime": 300,
"startTime": 0
}
],
"enable": true
},
{
"enable": true,
"effects": []
}
],
"updatedAt": 1588695033727
},
"durationMillis": 0,
"intervalMillis": 20,
"size": 20
}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614044803909,"description":"","id":"-MUBZISrHJDp0tWMsms1","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_Pistol","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":159,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":159,"playbackType":"FADE_OUT","pointList":[{"index":3,"intensity":0.5}],"startTime":0}]},"mode":"DOT_MODE","pathMode":{"feedback":[{"movingPattern":"CONST_SPEED","playbackType":"NONE","visible":true,"pointList":[]}]}}},"name":"Effect 1","offsetTime":159,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614044982128},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -1 +0,0 @@
{"project":{"createdAt":1614063916796,"description":"","id":"-MUChCU9pwtX6gNu8ZSr","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_Swap","tracks":[{"effects":[{"modes":{"VestBack":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":235,"playbackType":"NONE","startTime":0,"pointList":[]}]},"mode":"PATH_MODE","pathMode":{"feedback":[]}},"VestFront":{"dotMode":{"dotConnected":false,"feedback":[{"endTime":235,"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":235,"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":235,"x":1,"y":0}],"visible":true}]}}},"name":"Effect 1","offsetTime":235,"startTime":0}],"enable":true},{"enable":true,"effects":[]}],"updatedAt":1614064417056},"durationMillis":0,"intervalMillis":20,"size":20}

View file

@ -15,8 +15,7 @@ import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import com.bhaptics.commons.PermissionUtils;
import com.drbeef.questzdoom.bhaptics.bHaptics;
import com.drbeef.externalhapticsservice.HapticServiceClient;
import java.io.BufferedReader;
import java.io.File;
@ -35,7 +34,9 @@ import java.io.OutputStream;
System.loadLibrary( "qzdoom" );
}
private static final String TAG = "QuestZDoom";
private static final String APPLICATION = "QuestZDoom";
private HapticServiceClient externalHapticsServiceClient = null;
private int permissionCount = 0;
private static final int READ_EXTERNAL_STORAGE_PERMISSION_ID = 1;
@ -51,39 +52,91 @@ import java.io.OutputStream;
System.exit(0);
}
/*
position is used for weapon based haptics:
0 - Will play on both arms if tactosy tact files present for both
1 - Will play on left arm only if tactosy tact files present for left
2 - Will play on right arm only if tactosy tact files present for right
*/
public void haptic_event(String event, int position, int intensity, float angle, float yHeight) {
public void haptic_event(String event, int position, int intensity, float angle, float yHeight) {
bHaptics.playHaptic(event, position, intensity, angle, yHeight);
if (externalHapticsServiceClient.hasService()) {
try {
//QuestZDoom doesn't use repeating patterns - set flags to 0
int flags = 0;
externalHapticsServiceClient.getHapticsService().hapticEvent(APPLICATION, event, position, flags, intensity, angle, yHeight);
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
public void haptic_updateevent(String event, int intensity, float angle) {
if (externalHapticsServiceClient.hasService()) {
try {
externalHapticsServiceClient.getHapticsService().hapticUpdateEvent(APPLICATION, event, intensity, angle);
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
public void haptic_stopevent(String event) {
bHaptics.stopHaptic(event);
if (externalHapticsServiceClient.hasService()) {
try {
externalHapticsServiceClient.getHapticsService().hapticStopEvent(APPLICATION, event);
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
public void haptic_stopall() {
bHaptics.stopAll();
public void haptic_endframe() {
if (externalHapticsServiceClient.hasService()) {
try {
externalHapticsServiceClient.getHapticsService().hapticFrameTick();
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
public void haptic_enable() {
bHaptics.enable(this);
if (externalHapticsServiceClient.hasService()) {
try {
externalHapticsServiceClient.getHapticsService().hapticEnable();
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
public void haptic_disable() {
bHaptics.disable();
if (externalHapticsServiceClient.hasService()) {
try {
externalHapticsServiceClient.getHapticsService().hapticDisable();
}
catch (RemoteException r)
{
Log.v(APPLICATION, r.toString());
}
}
}
@Override protected void onCreate( Bundle icicle )
{
Log.v( TAG, "----------------------------------------------------------------" );
Log.v( TAG, "GLES3JNIActivity::onCreate()" );
Log.v(APPLICATION, "----------------------------------------------------------------" );
Log.v(APPLICATION, "GLES3JNIActivity::onCreate()" );
super.onCreate( icicle );
mView = new SurfaceView( this );
@ -104,43 +157,28 @@ import java.io.OutputStream;
/** 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},
WRITE_EXTERNAL_STORAGE_PERMISSION_ID);
}
else
{
requestPermissions();
// Permissions have already been granted.
create();
}
}
private void requestPermissions() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
}
/** Handles the user accepting the permission. */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
if (requestCode == 1) {
//Quit for now
if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_ID) {
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
}
}
}
private boolean isPackageInstalled(String packageName, PackageManager packageManager) {
@ -197,6 +235,12 @@ import java.io.OutputStream;
}
}
externalHapticsServiceClient = new HapticServiceClient(this, (state, desc) -> {
Log.v(APPLICATION, "ExternalHapticsService is:" + desc);
});
externalHapticsServiceClient.bindService();
//If there are no IWADS, then should exit after creating the folders
//to allow the launcher app to do its thing, otherwise it would crash anyway
//Check that launcher is installed too
@ -250,7 +294,7 @@ import java.io.OutputStream;
@Override protected void onStart()
{
Log.v( TAG, "GLES3JNIActivity::onStart()" );
Log.v(APPLICATION, "GLES3JNIActivity::onStart()" );
super.onStart();
if ( mNativeHandle != 0 )
@ -261,7 +305,7 @@ import java.io.OutputStream;
@Override protected void onResume()
{
Log.v( TAG, "GLES3JNIActivity::onResume()" );
Log.v(APPLICATION, "GLES3JNIActivity::onResume()" );
super.onResume();
if ( mNativeHandle != 0 )
@ -272,7 +316,7 @@ import java.io.OutputStream;
@Override protected void onPause()
{
Log.v( TAG, "GLES3JNIActivity::onPause()" );
Log.v(APPLICATION, "GLES3JNIActivity::onPause()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onPause(mNativeHandle);
@ -282,7 +326,7 @@ import java.io.OutputStream;
@Override protected void onStop()
{
Log.v( TAG, "GLES3JNIActivity::onStop()" );
Log.v(APPLICATION, "GLES3JNIActivity::onStop()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onStop(mNativeHandle);
@ -292,7 +336,7 @@ import java.io.OutputStream;
@Override protected void onDestroy()
{
Log.v( TAG, "GLES3JNIActivity::onDestroy()" );
Log.v(APPLICATION, "GLES3JNIActivity::onDestroy()" );
bHaptics.destroy();
@ -306,13 +350,15 @@ import java.io.OutputStream;
GLES3JNILib.onDestroy(mNativeHandle);
}
externalHapticsServiceClient.stopBinding();
super.onDestroy();
mNativeHandle = 0;
}
@Override public void surfaceCreated( SurfaceHolder holder )
{
Log.v( TAG, "GLES3JNIActivity::surfaceCreated()" );
Log.v(APPLICATION, "GLES3JNIActivity::surfaceCreated()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onSurfaceCreated( mNativeHandle, holder.getSurface() );
@ -322,7 +368,7 @@ import java.io.OutputStream;
@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() );
@ -332,7 +378,7 @@ import java.io.OutputStream;
@Override public void surfaceDestroyed( SurfaceHolder holder )
{
Log.v( TAG, "GLES3JNIActivity::surfaceDestroyed()" );
Log.v(APPLICATION, "GLES3JNIActivity::surfaceDestroyed()" );
if ( mNativeHandle != 0 )
{
GLES3JNILib.onSurfaceDestroyed( mNativeHandle );

View file

@ -1,425 +0,0 @@
package com.drbeef.questzdoom.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.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, float intensity, float duration) {
this.type = type;
this.key = key;
this.altKey = altKey;
this.intensity = intensity;
this.duration = duration;
}
public final String key;
public final String altKey;
public final float intensity;
public final float duration;
public final PositionType type;
};
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 Context context;
private static Map<String, Vector<Haptic>> eventToEffectKeyMap = 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", 1.0f, 1.2f);
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Melee1.tact", "melee_left");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Melee2.tact", "melee_right");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fireball.tact", "fireball");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Bullet.tact", "bullet");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Shotgun.tact", "shotgun");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Electric.tact", "electric");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fire.tact", "fire");
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Fire.tact", "poison"); // reuse
registerFromAsset(context, "bHaptics/Damage/Body_DMG_Falling.tact", "fall");
registerFromAsset(context, "bHaptics/Damage/Body_Shield_Break.tact", "slime");
/*
INTERACTIONS
*/
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Healstation.tact", "healstation");
registerFromAsset(context, "bHaptics/Interaction/Arms/Healthstation_L.tact", PositionType.ForearmL, "healstation");
registerFromAsset(context, "bHaptics/Interaction/Arms/Healthstation_R.tact", PositionType.ForearmR, "healstation");
registerFromAsset(context, "bHaptics/Interaction/Arms/Ammo_L.tact", PositionType.ForearmL, "pickup");
registerFromAsset(context, "bHaptics/Interaction/Arms/Ammo_R.tact", PositionType.ForearmR, "pickup");
registerFromAsset(context, "bHaptics/Interaction/Vest/Body_Shield_Get.tact", "pickup_weapon");
registerFromAsset(context, "bHaptics/Interaction/Arms/Pickup_L.tact", PositionType.ForearmL, "pickup_weapon");
registerFromAsset(context, "bHaptics/Interaction/Arms/Pickup_R.tact", PositionType.ForearmR, "pickup_weapon");
registerFromAsset(context, "bHaptics/Weapon/Vest/Body_Pistol.tact", "fire_weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/ShootDefault_L.tact", PositionType.ForearmL, "fire_weapon");
registerFromAsset(context, "bHaptics/Weapon/Arms/ShootDefault_R.tact", PositionType.ForearmR, "fire_weapon");
initialised = true;
}
public static void registerFromAsset(Context context, String filename, PositionType type, String key, 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(), 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)
{
registerFromAsset(context, filename, PositionType.Vest, key, 1.0f, 1.0f);
}
public static void registerFromAsset(Context context, String filename, PositionType type, String key)
{
registerFromAsset(context, filename, type, key, 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;
requestingPermission = false;
}
public static void playHaptic(String event, int position, 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.contains("rumble"))
{
{
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;
}
if (key.contains("front")) {
player.submitDot("rumble_front", PositionType.VestFront, vector, (int) highDuration);
}
else {
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 heartbeat haptic to interrupt itself if it is already playing
if (haptic.key.contains("heartbeat") &&
player.isPlaying(haptic.altKey))
{
continue;
}
//The following groups play at full intensity
if (haptic.altKey.compareTo("environment") == 0) {
intensity = 100;
}
if (position > 0)
{
//If playing left position and haptic type is right, don;t play that one
if (position == 1 && haptic.type == PositionType.ForearmR)
{
continue;
}
//If playing right position and haptic type is left, don;t play that one
if (position == 2 && haptic.type == PositionType.ForearmL)
{
continue;
}
}
if (haptic != null) {
float flIntensity = ((intensity / 100.0F) * haptic.intensity);
float duration = haptic.duration;
//Special hack for heartbeat
if (haptic.key.contains("heartbeat"))
{
//The worse condition we are in, the faster the heart beats!
float health = intensity;
duration = 1.0f - (0.6f * ((25 - health) / 25));
flIntensity = ((25 - health) / 25);
}
if (flIntensity > 0)
{
player.submitRegistered(haptic.key, haptic.altKey, flIntensity, duration, angle, yHeight);
}
}
}
}
else
{
Log.i(TAG, "Unknown event: " + event);
}
}
}
private static String getHapticEventKey(String e) {
String event = e.toLowerCase();
String key = event;
if (event.contains("melee") ||
event.contains("strike") ||
event.contains("rip") ||
event.contains("tear") ||
event.contains("slice") ||
event.contains("claw")) {
if (event.contains("right"))
{
key = "melee_right";
}
else if (event.contains("left"))
{
key = "melee_left";
}
else {
key = rand.nextInt(2) == 0 ? "melee_right" : "melee_left";
}
} else if (event.contains("bullet")) {
key = "bullet";
} else if (event.contains("burn") ||
event.contains("flame")) {
key = "fireball";
} else if (event.contains("shotgun")) {
key = "shotgun";
} else if (event.contains("fall")) {
key = "fall";
}
return key;
}
public static void stopAll() {
if (hasPairedDevice) {
player.turnOffAll();
}
}
public static void stopHaptic(String event) {
if (hasPairedDevice) {
String key = getHapticEventKey(event);
{
player.turnOff(key);
}
}
}
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) {
}
});
}
}
}