Simplify types
This commit is contained in:
parent
6eddb4834b
commit
ba8b1a29fd
30 changed files with 52 additions and 76 deletions
|
|
@ -7,7 +7,7 @@ export type CommandExecutors = {
|
|||
export abstract class CommandReceiver {
|
||||
protected commandExecutors: CommandExecutors = {};
|
||||
|
||||
protected defaultCommandExecutor(command: Command) {}
|
||||
protected defaultCommandExecutor(command: Command) { }
|
||||
|
||||
public reactsToCommand(commandType: string): boolean {
|
||||
return Object.prototype.hasOwnProperty.call(this.commandExecutors, commandType);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
import { Id } from '../transport/identity';
|
||||
import { Typed } from '../transport/typed';
|
||||
|
||||
export abstract class Command {
|
||||
public get type(): string {
|
||||
return (this as any).constructor.type;
|
||||
}
|
||||
}
|
||||
export abstract class Command extends Typed { }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import { Command } from '../command';
|
||||
|
||||
export class CreateObjectsCommand extends Command {
|
||||
public static readonly type = 'CreateObjectsCommand';
|
||||
|
||||
public constructor(public readonly serializedObjects: string) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import { Command } from '../command';
|
||||
|
||||
export class CreatePlayerCommand extends Command {
|
||||
public static readonly type = 'CreatePlayerCommand';
|
||||
|
||||
public constructor(public readonly serializedPlayer: string) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { Id } from '../../transport/identity';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class DeleteObjectsCommand extends Command {
|
||||
public static readonly type = 'DeleteObjectsCommand';
|
||||
|
||||
public constructor(public readonly ids: Array<Id>) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { vec2 } from 'gl-matrix';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class MoveActionCommand extends Command {
|
||||
public static readonly type = 'MoveActionCommand';
|
||||
|
||||
public constructor(public readonly delta: vec2) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { vec2 } from 'gl-matrix';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class PrimaryActionCommand extends Command {
|
||||
public static readonly type = 'PrimaryActionCommand';
|
||||
|
||||
public constructor(public readonly position: vec2) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { vec2 } from 'gl-matrix';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class SecondaryActionCommand extends Command {
|
||||
public static readonly type = 'SecondaryActionCommand';
|
||||
|
||||
public constructor(public readonly position: vec2) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { Rectangle } from '../../helper/rectangle';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class SetViewAreaActionCommand extends Command {
|
||||
public static readonly type = 'SetViewAreaAction';
|
||||
|
||||
public constructor(public readonly viewArea: Rectangle) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import { Command } from '../command';
|
||||
|
||||
export class StepCommand extends Command {
|
||||
public static readonly type = 'StepCommand';
|
||||
|
||||
public constructor(public readonly deltaTimeInMiliseconds: DOMHighResTimeStamp) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ import { vec2 } from 'gl-matrix';
|
|||
import { Command } from '../command';
|
||||
|
||||
export class TernaryActionCommand extends Command {
|
||||
public static readonly type = 'TernaryActionCommand';
|
||||
|
||||
public constructor(public readonly position: vec2) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import { Command } from '../command';
|
||||
|
||||
export class UpdateObjectsCommand extends Command {
|
||||
public static readonly type = 'UpdateObjectsCommand';
|
||||
|
||||
public constructor(public readonly serializedObjects: string) {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,3 +29,4 @@ export * from './objects/types/tunnel-base';
|
|||
export * from './settings';
|
||||
export * from './transport/transport-events';
|
||||
export * from './transport/identity';
|
||||
export * from './transport/type-to-base-type';
|
||||
|
|
|
|||
|
|
@ -2,8 +2,12 @@ import { CommandReceiver } from '../commands/command-receiver';
|
|||
import { Id } from '../transport/identity';
|
||||
|
||||
export abstract class GameObject extends CommandReceiver {
|
||||
public static get type(): string {
|
||||
return (this as any).name;
|
||||
}
|
||||
|
||||
public get type(): string {
|
||||
return (this as any).constructor.type;
|
||||
return (this as any).constructor.name;
|
||||
}
|
||||
|
||||
constructor(public readonly id: Id) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
import { vec2 } from 'gl-matrix';
|
||||
import { Circle } from '../../helper/circle';
|
||||
import { Id } from '../../main';
|
||||
import { GameObject } from '../game-object';
|
||||
|
||||
export abstract class CharacterBase extends GameObject {
|
||||
public static readonly type = 'Character';
|
||||
|
||||
constructor(
|
||||
id: Id,
|
||||
public head: Circle,
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ import { Id } from '../../main';
|
|||
import { GameObject } from '../game-object';
|
||||
|
||||
export abstract class LampBase extends GameObject {
|
||||
public static readonly type = 'Lamp';
|
||||
|
||||
constructor(id: Id, public center: vec2, public color: vec3, public lightness: number) {
|
||||
super(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
import { vec2 } from 'gl-matrix';
|
||||
import { GameObject, Id } from '../../main';
|
||||
import { typed } from '../../transport/typed';
|
||||
|
||||
export abstract class TunnelBase extends GameObject {
|
||||
public static readonly type = 'Tunnel';
|
||||
|
||||
constructor(
|
||||
id: Id,
|
||||
public readonly from: vec2,
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
import { v4 } from 'uuid';
|
||||
import { Id } from './identity';
|
||||
|
||||
export class IdentityManager {
|
||||
public static generateId(): Id {
|
||||
return v4();
|
||||
}
|
||||
}
|
||||
14
shared/src/transport/type-to-base-type.ts
Normal file
14
shared/src/transport/type-to-base-type.ts
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
export const typeToBaseType = <T extends { new(...args: any[]): {} }>(
|
||||
constructor: T
|
||||
) => {
|
||||
const parent = constructor;
|
||||
return class extends constructor {
|
||||
public static get type(): string {
|
||||
return Object.getPrototypeOf((parent as any).prototype).constructor.name;
|
||||
}
|
||||
|
||||
public get type(): string {
|
||||
return Object.getPrototypeOf((parent as any).prototype).constructor.name;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
/**
|
||||
* static type: string must be implemented
|
||||
* @param constructor
|
||||
*/
|
||||
export const typed = <T extends { new (...args: any[]): {} }>(constructor: T) => {
|
||||
return class extends constructor {
|
||||
public get type(): string {
|
||||
return (this as any).constructor.type;
|
||||
}
|
||||
};
|
||||
};
|
||||
export abstract class Typed {
|
||||
public static get type(): string {
|
||||
return (this as any).name;
|
||||
}
|
||||
|
||||
public get type(): string {
|
||||
return (this as any).constructor.name;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue