🍗try add fusion

This commit is contained in:
2025-11-22 22:04:11 +01:00
parent bb02dfd558
commit 9114bafb8f
6 changed files with 66 additions and 68 deletions

View File

@@ -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"
}
}

76
pnpm-lock.yaml generated
View File

@@ -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:

View File

View File

@@ -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<E extends Record<string, defined>, T = E> = {
[Key in keyof E as `get${Capitalize<string & Key>}`]: () => E[Key];
} & {
[Key in keyof E as `set${Capitalize<string & Key>}`]: (arg: E[Key]) => void;
} & {
build: () => T;
};
type ListenerBuilder<L> = {
addEvent<E extends keyof L & string>(
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<AbilityEvents> {
constructor() {}
addEvent<E extends keyof AbilityEvents>(
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() {}
// }

View File

@@ -0,0 +1,4 @@
export enum AbilityType {
KeyBoard,
Pasive,
}

View File

@@ -4,7 +4,7 @@
"allowSyntheticDefaultImports": true,
"downlevelIteration": true,
"jsx": "react",
"jsxFactory": "React.createElement",
"jsxFactory": "Fusion.jsx",
"jsxFragmentFactory": "React.Fragment",
"module": "commonjs",
"moduleResolution": "Node",