Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import {Container} from '@pixi/display';
import {Graphics} from '@pixi/graphics';
import {Vec2} from '../RTCGameUtils';
interface JoystickOption {
bigCircleRadius?: number;
bigCircleColor?: number;
bigCircleAlpha?: number;
smallCircleRadius?: number;
smallCircleColor?: number;
smallCircleAlpha?: number;
}
// interface IJoystick {
// bigCircleRadius: number;
// bigCircleColor: number;
// bigCircleAlpha: number;
// // private smallCircleRadius: number;
// // private smallCircleColor: number;
// // private smallCircleAlpha: number;
// }
export class Joystick extends Container {
private bigCircle: Graphics;
private bigCircleRadius: number;
private smallCircle: Graphics;
private smallCircleRadius: number;
// private playerPointer: PlayerPointer;
constructor(options?: JoystickOption) {
super();
const bigCircleRadius = options?.bigCircleRadius || 50;
const bigCircleColor = options?.bigCircleColor || 0x112222;
const bigCircleAlpha = options?.bigCircleAlpha || 0.3;
const smallCircleRadius = options?.smallCircleRadius || 20;
const smallCircleColor = options?.smallCircleColor || 0x001010;
const smallCircleAlpha = options?.smallCircleAlpha || 0.3;
const bigCircle = this.makeCircle(
bigCircleColor,
bigCircleAlpha,
bigCircleRadius,
);
this.bigCircleRadius = bigCircleRadius;
this.bigCircle = bigCircle;
this.addChild(bigCircle);
const smallCircle = this.makeCircle(
smallCircleColor,
smallCircleAlpha,
smallCircleRadius,
);
this.smallCircleRadius = smallCircleRadius;
this.smallCircle = smallCircle;
bigCircle.addChild(smallCircle);
this.visible = false;
}
private makeCircle(color: number, alpha: number, radius: number): Graphics {
const circle = new Graphics();
circle.beginFill(color, alpha);
circle.drawCircle(0, 0, radius);
return circle;
}
public revealJoystick(posX: number, posY: number): void {
this.position.set(posX, posY);
this.visible = true;
}
public setSmallCirclePosition(diff: Vec2, length: number): void {
console.log('Diff', length, this.bigCircleRadius - this.smallCircleRadius);
if (!this.isOuterMost(length))
this.smallCircle.position.set(diff.x, diff.y);
else {
this.smallCircle.position.set(
(this.bigCircleRadius - this.smallCircleRadius) * (diff.x / length),
(this.bigCircleRadius - this.smallCircleRadius) * (diff.y / length),
);
}
}
private isOuterMost(length: number) {
return length > this.bigCircleRadius - this.smallCircleRadius;
}
public hideJoystick(): void {
this.smallCircle.position.set(0);
this.visible = false;
}
}
|