Skip to content

Commit

Permalink
Merge pull request #95 from KotRikD/refactor/memory_issues
Browse files Browse the repository at this point in the history
Refactor memory issues
  • Loading branch information
KotRikD authored Mar 7, 2024
2 parents 8a185d1 + 2062d5a commit 941b409
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 353 deletions.
4 changes: 2 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"request": "launch",
"args": ["src/index.ts"],
"outputCapture": "std",
"runtimeArgs": ["--nolazy", "--inspect", "-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"runtimeArgs": ["--nolazy", "--inspect", "--expose-gc", "--inspect", "-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"cwd": "${workspaceRoot}/packages/tosu",
},
{
Expand All @@ -19,7 +19,7 @@
"request": "launch",
"args": ["${relativeFile}"],
"outputCapture": "std",
"runtimeArgs": ["--nolazy", "--inspect", "-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"runtimeArgs": ["--nolazy", "--inspect", "--expose-gc", "-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"cwd": "${workspaceRoot}/packages/tosu",
}
]
Expand Down
2 changes: 1 addition & 1 deletion packages/tosu/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"ts:compile": "ncc build src/index.ts -o dist -m -d",
"run:dev": "pnpm run genver && pnpm run ts:run src/index.ts",
"compile:prepare-htmls": "cp -rf node_modules/@tosu/server/assets ./dist",
"compile": "pnpm run genver && pnpm run ts:compile && pnpm run compile:prepare-htmls && pkg -t node18-win-x64 --output dist/tosu.exe --debug --config pkg.json --compress brotli dist/index.js --options max-old-space-size=512 && pnpm run ts:run src/postBuild.ts"
"compile": "pnpm run genver && pnpm run ts:compile && pnpm run compile:prepare-htmls && pkg -t node18-win-x64 --output dist/tosu.exe --debug --config pkg.json --compress brotli dist/index.js && pnpm run ts:run src/postBuild.ts"
},
"dependencies": {
"@kotrikd/rosu-pp": "^0.10.0",
Expand Down
309 changes: 5 additions & 304 deletions packages/tosu/src/entities/AllTimesData/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,240 +26,6 @@ export class AllTimesData extends AbstractEntity {
ShowInterface: boolean = false;
IsWatchingReplay: number = 0;

bindingNames = new Map();

private configList: Record<string, IConfigBindable> = {
VolumeUniversal: {
type: 'int',
setValue: (settings, value) => {
settings.audio.volume.master = value;
}
},
VolumeEffect: {
type: 'int',
setValue: (settings, value) => {
settings.audio.volume.effect = value;
}
},
VolumeMusic: {
type: 'int',
setValue: (settings, value) => {
settings.audio.volume.music = value;
}
},
_ReleaseStream: {
type: 'enum',
setValue: (settings, value) => {
settings.client.branch = value;
}
},
DimLevel: {
type: 'int',
setValue: (settings, value) => {
settings.background.dim = value;
}
},
ShowStoryboard: {
type: 'bool',
setValue: (settings, value) => {
settings.background.storyboard = value;
}
},
ShowInterface: {
type: 'bool',
setValue: (settings, value) => {
settings.showInterface = value;
}
},
BeatmapDirectory: {
type: 'bstring',
setValue: (settings, value) => {
settings.BeatmapDirectory = value;
}
},
ScoreMeter: {
type: 'enum',
setValue: (settings, value) => {
settings.scoreMeter.type = value;
}
},
ScoreMeterScale: {
type: 'double',
setValue: (settings, value) => {
settings.scoreMeter.size = value;
}
},
Offset: {
type: 'int',
setValue: (settings, value) => {
settings.offset.universal = value;
}
},
CursorSize: {
type: 'double',
setValue: (settings, value) => {
settings.cursor.size = value;
}
},
MouseSpeed: {
type: 'double',
setValue: (settings, value) => {
settings.mouse.sensitivity = value;
}
},
Fullscreen: {
type: 'bool',
setValue: (settings, value) => {
settings.resolution.fullscreen = value;
}
},
Width: {
type: 'int',
setValue: (settings, value) => {
settings.resolution.width = value;
}
},
Height: {
type: 'int',
setValue: (settings, value) => {
settings.resolution.height = value;
}
},
WidthFullscreen: {
type: 'int',
setValue: (settings, value) => {
settings.resolution.widthFullscreen = value;
}
},
HeightFullscreen: {
type: 'int',
setValue: (settings, value) => {
settings.resolution.heightFullscreen = value;
}
},
AutomaticCursorSizing: {
type: 'bool',
setValue: (settings, value) => {
settings.cursor.autoSize = value;
}
},
IgnoreBeatmapSamples: {
type: 'bool',
setValue: (settings, value) => {
settings.audio.ignoreBeatmapSounds = value;
}
},
SkinSamples: {
type: 'bool',
setValue: (settings, value) => {
settings.audio.useSkinSamples = value;
}
},
LastVersion: {
type: 'bstring',
setValue: (settings, value) => {
settings.client.version = value;
}
},
ManiaSpeedBPMScale: {
type: 'bool',
setValue: (settings, value) => {
settings.mania.speedBPMScale = value;
}
},
UsePerBeatmapManiaSpeed: {
type: 'bool',
setValue: (settings, value) => {
settings.mania.usePerBeatmapSpeedScale = value;
}
},
MouseDisableButtons: {
type: 'bool',
setValue: (settings, value) => {
settings.mouse.disableButtons = value;
}
},
MouseDisableWheel: {
type: 'bool',
setValue: (settings, value) => {
settings.mouse.disableWheel = value;
}
},
ProgressBarType: {
type: 'enum',
setValue: (settings, value) => {
settings.progressBarType = value;
}
},
RankType: {
type: 'enum',
setValue: (settings, value) => {
settings.leaderboardType = value;
}
},
UpdatePending: {
type: 'bool',
setValue: (settings, value) => {
settings.client.updateAvailable = value;
}
},

UseSkinCursor: {
type: 'bool',
setValue: (settings, value) => {
settings.cursor.useSkinCursor = value;
}
},
RawInput: {
type: 'bool',
setValue: (settings, value) => {
settings.mouse.rawInput = value;
}
},
TreeSortMode: {
type: 'enum',
setValue: (settings, value) => {
settings.groupType = value;
}
},
TreeSortMode2: {
type: 'enum',
setValue: (settings, value) => {
settings.sortType = value;
}
},
EditorDefaultSkin: {
type: 'bool',
setValue: (settings, value) => {
settings.skin.useDefaultSkinInEditor = value;
}
},
ComboColourSliderBall: {
type: 'bool',
setValue: (settings, value) => {
settings.skin.tintSliderBall = value;
}
},
IgnoreBeatmapSkins: {
type: 'bool',
setValue: (settings, value) => {
settings.skin.ignoreBeatmapSkins = value;
}
},
Skin: {
type: 'bstring',
setValue: (settings, value) => {
settings.skin.name = value;
}
},
UseTaikoSkin: {
type: 'bool',
setValue: (settings, value) => {
settings.skin.useTaikoSkin = value;
}
}
};

private bindingList: Record<number, IBindable> = {
[Bindings.OsuLeft]: {
setValue: (settings, value: number) => {
Expand Down Expand Up @@ -322,71 +88,6 @@ export class AllTimesData extends AbstractEntity {
super(services);
}

updateConfigState(
process: Process,
settings: Settings,
configurationAddr: number
) {
try {
const rawSharpDictionary =
process.readSharpDictionary(configurationAddr);
for (let i = 0; i < rawSharpDictionary.length; i++) {
const current = rawSharpDictionary[i];
const keyAddress = process.readInt(current);
let key;
if (this.bindingNames.has(keyAddress)) {
key = this.bindingNames.get(keyAddress);
} else {
key = process.readSharpString(keyAddress);
this.bindingNames.set(keyAddress, key);
}
const bindable = process.readInt(current + 0x4);

if (!(key in this.configList)) {
continue;
}
let value: any;

switch (this.configList[key].type) {
case 'byte':
value = process.readByte(bindable + 0xc);
break;
case 'bool':
value = Boolean(process.readByte(bindable + 0xc));
break;
case 'int':
case 'double':
value = process.readDouble(bindable + 0x4);
break;
case 'string':
value = process.readSharpString(
process.readInt(current + 0x4)
);
break;
case 'bstring':
value = process.readSharpString(
process.readInt(bindable + 0x4)
);
break;
case 'enum':
value = process.readInt(bindable + 0xc);
break;
default:
break;
}

if (value) {
this.configList[key].setValue(settings, value);
}
}
} catch (exc) {
wLogger.error(
"ATD(updateConfigState) Can't update config state",
exc
);
}
}

updateBindingState(
process: Process,
settings: Settings,
Expand Down Expand Up @@ -464,11 +165,11 @@ export class AllTimesData extends AbstractEntity {
process.readInt(canRunSlowlyAddr + 0x46)
);

this.updateConfigState(
process,
settings,
process.readPointer(configurationAddr)
);
// this.updateConfigState(
// process,
// settings,
// process.readPointer(configurationAddr)
// );

this.updateBindingState(
process,
Expand Down
16 changes: 15 additions & 1 deletion packages/tosu/src/entities/GamePlayData/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ export class GamePlayData extends AbstractEntity {
}

const keyOverlayPtr = process.readInt(rulesetAddr + 0xb0);
if (keyOverlayPtr === 0) {
if (keyOverlayPtr === 0 || keyOverlayPtr < 127) {
wLogger.debug('GD(updateKeyOverlay) keyOverlayPtr is zero');
return;
}
Expand Down Expand Up @@ -287,6 +287,20 @@ export class GamePlayData extends AbstractEntity {
}

private getKeyOverlay(process: Process, keyOverlayArrayAddr: number) {
const itemsSize = process.readInt(keyOverlayArrayAddr + 0x4);
if (itemsSize < 4) {
return {
K1Pressed: false,
K1Count: 0,
K2Pressed: false,
K2Count: 0,
M1Pressed: false,
M1Count: 0,
M2Pressed: false,
M2Count: 0
};
}

return {
// [Base + 0x8] + 0x1C
K1Pressed: Boolean(
Expand Down
Loading

0 comments on commit 941b409

Please sign in to comment.