112 lines
2.9 KiB
TypeScript
112 lines
2.9 KiB
TypeScript
|
|
import { ButtplugDeviceError } from "../core/Exceptions";
|
||
|
|
import { OutputType } from "../core/Messages";
|
||
|
|
|
||
|
|
class PercentOrSteps {
|
||
|
|
private _percent: number | undefined;
|
||
|
|
private _steps: number | undefined;
|
||
|
|
|
||
|
|
public get percent() {
|
||
|
|
return this._percent;
|
||
|
|
}
|
||
|
|
|
||
|
|
public get steps() {
|
||
|
|
return this._steps;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static createSteps(s: number): PercentOrSteps {
|
||
|
|
let v = new PercentOrSteps;
|
||
|
|
v._steps = s;
|
||
|
|
return v;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static createPercent(p: number): PercentOrSteps {
|
||
|
|
if (p < 0 || p > 1.0) {
|
||
|
|
throw new ButtplugDeviceError(`Percent value ${p} is not in the range 0.0 <= x <= 1.0`);
|
||
|
|
}
|
||
|
|
|
||
|
|
let v = new PercentOrSteps;
|
||
|
|
v._percent = p;
|
||
|
|
return v;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export class DeviceOutputCommand {
|
||
|
|
public constructor(
|
||
|
|
private _outputType: OutputType,
|
||
|
|
private _value: PercentOrSteps,
|
||
|
|
private _duration?: number,
|
||
|
|
)
|
||
|
|
{}
|
||
|
|
|
||
|
|
public get outputType() {
|
||
|
|
return this._outputType;
|
||
|
|
}
|
||
|
|
|
||
|
|
public get value() {
|
||
|
|
return this._value;
|
||
|
|
}
|
||
|
|
|
||
|
|
public get duration() {
|
||
|
|
return this._duration;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export class DeviceOutputValueConstructor {
|
||
|
|
public constructor(
|
||
|
|
private _outputType: OutputType)
|
||
|
|
{}
|
||
|
|
|
||
|
|
public steps(steps: number): DeviceOutputCommand {
|
||
|
|
return new DeviceOutputCommand(this._outputType, PercentOrSteps.createSteps(steps), undefined);
|
||
|
|
}
|
||
|
|
|
||
|
|
public percent(percent: number): DeviceOutputCommand {
|
||
|
|
return new DeviceOutputCommand(this._outputType, PercentOrSteps.createPercent(percent), undefined);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export class DeviceOutputPositionWithDurationConstructor {
|
||
|
|
public steps(steps: number, duration: number): DeviceOutputCommand {
|
||
|
|
return new DeviceOutputCommand(OutputType.Position, PercentOrSteps.createSteps(steps), duration);
|
||
|
|
}
|
||
|
|
|
||
|
|
public percent(percent: number, duration: number): DeviceOutputCommand {
|
||
|
|
return new DeviceOutputCommand(OutputType.HwPositionWithDuration, PercentOrSteps.createPercent(percent), duration);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export class DeviceOutput {
|
||
|
|
private constructor() {}
|
||
|
|
|
||
|
|
public static get Vibrate() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Vibrate);
|
||
|
|
}
|
||
|
|
public static get Rotate() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Rotate);
|
||
|
|
}
|
||
|
|
public static get Oscillate() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Oscillate);
|
||
|
|
}
|
||
|
|
public static get Constrict() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Constrict);
|
||
|
|
}
|
||
|
|
public static get Inflate() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Inflate);
|
||
|
|
}
|
||
|
|
public static get Temperature() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Temperature);
|
||
|
|
}
|
||
|
|
public static get Led() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Led);
|
||
|
|
}
|
||
|
|
public static get Spray() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Spray);
|
||
|
|
}
|
||
|
|
public static get Position() {
|
||
|
|
return new DeviceOutputValueConstructor(OutputType.Position);
|
||
|
|
}
|
||
|
|
public static get PositionWithDuration() {
|
||
|
|
return new DeviceOutputPositionWithDurationConstructor();
|
||
|
|
}
|
||
|
|
}
|