diff --git a/package.json b/package.json index a3d2dab..aae948a 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,7 @@ "scripts": { "build": "rbxtsc", "watch": "rbxtsc -w", - "lint": "eslint", - "prepare": "ts-patch install -s" + "lint": "eslint" }, "keywords": [], "author": "Aconit team", @@ -39,6 +38,7 @@ "@flamework/components": "^1.3.2", "@flamework/core": "^1.3.2", "@flamework/networking": "^1.3.2", - "ts-patch": "^3.3.0" + "@rbxts/fusion-0.3-temp": "^0.7.2", + "@rbxts/object-utils": "^1.0.4" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6629133..03ec599 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,12 @@ importers: '@flamework/networking': specifier: ^1.3.2 version: 1.3.2(@flamework/core@1.3.2) - ts-patch: - specifier: ^3.3.0 - version: 3.3.0 + '@rbxts/fusion-0.3-temp': + specifier: ^0.7.2 + version: 0.7.2 + '@rbxts/object-utils': + specifier: ^1.0.4 + version: 1.0.4 devDependencies: '@eslint/eslintrc': specifier: ^3.3.1 @@ -170,6 +173,9 @@ packages: '@rbxts/compiler-types@3.0.0-types.0': resolution: {integrity: sha512-VGOHJPoL7+56NTatMGqQj3K7xWuzEV+aP4QD5vZiHu+bcff3kiTmtoadaF6NkJrmwfFAvbsd4Dg764ZjWNceag==} + '@rbxts/fusion-0.3-temp@0.7.2': + resolution: {integrity: sha512-204MueZ6/3sps9bf4H+usqAL3VO+M5cmHwQnRci0LEF/Q4yV1re/ID96BTYTaWlohI0Vn+yKE45iFYNoclhk5Q==} + '@rbxts/maid@1.1.0': resolution: {integrity: sha512-bVWXZ0p2M3OJzPzvN5fY0T4s37ezUMY7EX31Xspp7Ds4C/K9yE4MHMRXjtlNvsYVPmoc5tdhAbpZY02Veix5lg==} @@ -191,6 +197,9 @@ packages: '@rbxts/types@1.0.887': resolution: {integrity: sha512-vhp4vIKEfl1TaBcKxBxU5dTFsVNqLkvefoF9pw/Epb+Jk9T+0g4SFQQtBdCu3UdZcBGK/PWk/IJeEyoRNDMkSw==} + '@rbxts/ui-labs@2.4.2': + resolution: {integrity: sha512-9cyzDYN4mM7KSupZpbHRCUWCfSHzy8LCqa9Czys2jaKYUCn8oV4j5AE+5jTrHD/8RcltP5EvCSFIFwB0N/NfxA==} + '@roblox-ts/luau-ast@2.0.0': resolution: {integrity: sha512-cmMi093IdwBOLVxwuordhM8AmtbyTIyRpsTbB0D/JauidW4SXsQRQowSwWjHo4QP0DRJBXvOIlxtqEQi50uNzQ==} @@ -572,10 +581,6 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} - global-prefix@4.0.0: - resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} - engines: {node: '>=16'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -624,10 +629,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@4.1.3: - resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -659,10 +660,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -685,10 +682,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -730,9 +723,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} @@ -925,10 +915,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-patch@3.3.0: - resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==} - hasBin: true - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -966,11 +952,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -1097,6 +1078,10 @@ snapshots: '@rbxts/compiler-types@3.0.0-types.0': {} + '@rbxts/fusion-0.3-temp@0.7.2': + dependencies: + '@rbxts/ui-labs': 2.4.2 + '@rbxts/maid@1.1.0': {} '@rbxts/object-utils@1.0.4': {} @@ -1111,6 +1096,8 @@ snapshots: '@rbxts/types@1.0.887': {} + '@rbxts/ui-labs@2.4.2': {} + '@roblox-ts/luau-ast@2.0.0': {} '@roblox-ts/path-translator@1.1.0': @@ -1574,12 +1561,6 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 - global-prefix@4.0.0: - dependencies: - ini: 4.1.3 - kind-of: 6.0.3 - which: 4.0.0 - globals@14.0.0: {} graceful-fs@4.2.11: {} @@ -1615,8 +1596,6 @@ snapshots: ini@1.3.8: {} - ini@4.1.3: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -1639,8 +1618,6 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.1: {} - js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -1663,8 +1640,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - kleur@4.1.5: {} levn@0.4.1: @@ -1703,8 +1678,6 @@ snapshots: dependencies: brace-expansion: 2.0.2 - minimist@1.2.8: {} - minipass@4.2.8: {} minipass@7.1.2: {} @@ -1887,15 +1860,6 @@ snapshots: dependencies: typescript: 5.5.4 - ts-patch@3.3.0: - dependencies: - chalk: 4.1.2 - global-prefix: 4.0.0 - minimist: 1.2.8 - resolve: 1.22.11 - semver: 7.7.3 - strip-ansi: 6.0.1 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -1925,10 +1889,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - word-wrap@1.2.5: {} wrap-ansi@7.0.0: diff --git a/src/client/controllers/gui.ts b/src/client/controllers/gui.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/character/builder.ts b/src/shared/character/builder.ts index c7db3b7..7a5d7ca 100644 --- a/src/shared/character/builder.ts +++ b/src/shared/character/builder.ts @@ -1,13 +1,47 @@ // TODO -// class AbilityBuilder { -// constructor() {} -// } +import { TupleType } from "typescript"; +import { AbilityType } from "./main"; -// class PasiveBuilder { -// constructor() {} -// } +/** + * Transform a object in getter and setter. + */ +type Builder, T = E> = { + [Key in keyof E as `get${Capitalize}`]: () => E[Key]; +} & { + [Key in keyof E as `set${Capitalize}`]: (arg: E[Key]) => void; +} & { + build: () => T; +}; +type ListenerBuilder = { + addEvent( + event: E, + func: (...args: L[E] extends unknown[] ? L[E] : never) => void, + ): void; +}; + +interface AbilityEvents { + onSpawn: [player: Player]; + onKill: [player: Player]; + onKey: [player: Player, key: string]; +} + +class AbilityBuilder implements Builder<{ id: string; type: AbilityType }>, ListenerBuilder { + constructor() {} + addEvent( + event: E, + func: (...args: AbilityEvents[E] extends unknown[] ? AbilityEvents[E] : never) => void, + ): void {} + getId!: () => string; + getType!: () => AbilityType; + setId!: (arg: string) => void; + setType!: (arg: AbilityType) => void; + build!: () => { id: string; type: AbilityType }; +} + +const test = new AbilityBuilder(); +test.addEvent("onKey", (player, key) => {}); // class CharacterBuilder { // constructor() {} // } diff --git a/src/shared/character/main.ts b/src/shared/character/main.ts new file mode 100644 index 0000000..55e6289 --- /dev/null +++ b/src/shared/character/main.ts @@ -0,0 +1,4 @@ +export enum AbilityType { + KeyBoard, + Pasive, +} diff --git a/tsconfig.json b/tsconfig.json index 69e7f35..bc844de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "allowSyntheticDefaultImports": true, "downlevelIteration": true, "jsx": "react", - "jsxFactory": "React.createElement", + "jsxFactory": "Fusion.jsx", "jsxFragmentFactory": "React.Fragment", "module": "commonjs", "moduleResolution": "Node",