Faster mouse and sound stuff.

This commit is contained in:
Kapendev 2025-03-21 20:47:54 +02:00
parent f21a8f8f32
commit 798b792e83
3 changed files with 26 additions and 20 deletions

View file

@ -148,8 +148,8 @@ int runDubSetup(string[] args, bool isFirstRun) {
if (hasDubLockFileNow != dubLockFile.isX) rm(dubLockFile);
// Remove the backup copies if something failed.
if (dub1 || dub2) {
restore(dubFile, true);
restore(dubLockFile, true);
restore(dubFile);
restore(dubLockFile);
return 1;
}
}

View file

@ -599,6 +599,11 @@ struct SoundId {
getOr().setPan(value);
}
/// Sets the looping mode for the sound associated with the resource identifier.
void setIsLooping(bool value) {
if (isValid) get().isLooping = value;
}
/// Checks if the resource identifier is valid. It becomes automatically invalid when the resource is freed.
bool isValid() {
return data.value && engineState.sounds.has(GenerationalIndex(data.value - 1, data.generation));
@ -893,6 +898,7 @@ struct EngineState {
EngineFlags flags;
EngineFullscreenState fullscreenState;
EngineViewportInfo viewportInfoBuffer;
Vec2 mouseBuffer;
Sz tickCount;
Color borderColor;
@ -1332,6 +1338,16 @@ void updateWindow(bool function(float dt) updateFunc) {
engineState.droppedFilePathsBuffer.append(list.paths[i].toStr());
}
}
if (isResolutionLocked) {
auto rlMouse = rl.GetTouchPosition(0);
auto info = engineViewportInfo;
engineState.mouseBuffer = Vec2(
(rlMouse.x - (info.maxSize.x - info.area.size.x) * 0.5f) / info.minRatio,
(rlMouse.y - (info.maxSize.y - info.area.size.y) * 0.5f) / info.minRatio,
);
} else {
engineState.mouseBuffer = rl.GetTouchPosition(0).toParin();
}
auto dt = deltaTime;
auto result = __updateFunc(dt);
engineState.tickCount = (engineState.tickCount + 1) % engineState.tickCount.max;
@ -1724,17 +1740,7 @@ Vec2 resolution() {
/// Returns the current position of the mouse on the screen.
@trusted
Vec2 mouse() {
// Touch works on desktop, web and mobile.
auto rlMouse = rl.GetTouchPosition(0);
if (isResolutionLocked) {
auto info = engineViewportInfo;
return Vec2(
(rlMouse.x - (info.maxSize.x - info.area.size.x) * 0.5f) / info.minRatio,
(rlMouse.y - (info.maxSize.y - info.area.size.y) * 0.5f) / info.minRatio,
);
} else {
return rlMouse.toParin();
}
return engineState.mouseBuffer;
}
/// Returns the current frames per second (FPS).
@ -2436,7 +2442,6 @@ mixin template runGame(alias readyFunc, alias updateFunc, alias finishFunc, int
Sz length = 0;
while (argv[i][length] != '\0') length += 1;
engineState.envArgsBuffer.append(argv[i][0 .. length]);
}
engineState.assetsPath.append(pathConcat(engineState.envArgsBuffer[0].pathDir, "assets"));
readyFunc();

View file

@ -82,6 +82,7 @@ struct UiState {
Vec2 viewportSize;
Vec2 viewportScale = Vec2(1.0f);
Vec2 mouseBuffer;
Vec2 mousePressedPosition;
Vec2 itemDragOffset;
short itemId;
@ -133,12 +134,7 @@ void prepareUi() {
}
Vec2 uiMouse() {
auto result = (mouse - uiState.viewportPosition) / uiState.viewportScale;
if (result.x < 0) result.x = -100000.0f;
else if (result.x > uiState.viewportSize.x) result.x = 100000.0f;
if (result.y < 0) result.y = -100000.0f;
else if (result.y > uiState.viewportSize.y) result.y = 100000.0f;
return result;
return uiState.mouseBuffer;
}
void setUiClickAction(Mouse value) {
@ -168,6 +164,11 @@ void setUiViewportState(Vec2 position, Vec2 size, Vec2 scale) {
if (uiState.mouseClickAction.isPressed) {
uiState.mousePressedPosition = uiMouse;
}
uiState.mouseBuffer = (mouse - position) / scale;
if (uiState.mouseBuffer.x < 0) uiState.mouseBuffer.x = -100000.0f;
else if (uiState.mouseBuffer.x > size.x) uiState.mouseBuffer.x = 100000.0f;
if (uiState.mouseBuffer.y < 0) uiState.mouseBuffer.y = -100000.0f;
else if (uiState.mouseBuffer.y > size.y) uiState.mouseBuffer.y = 100000.0f;
}
short uiItemId() {