mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 10:21:27 +00:00
fa7b7fceb3
## Description: ### ✅ Summary of Changes This PR enables the ESLint rule **`@typescript-eslint/no-unused-vars`** as requested in the issue and applies the necessary code adjustments across the project. #### 🔧 What was done: - Activated the rule `@typescript-eslint/no-unused-vars` in the ESLint config. - Updated ~70 files to comply with the rule: - Replaced unused variables with a `_` prefix where appropriate. - Added inline ESLint disable comments (`eslint-disable-next-line`) for specific cases where the variable or code block seemed important for context, readability, or future use. - Ensured no linting errors remain related to this rule. --- ### ❓ Clarification Some cases were handled with inline disable comments instead of removing the variable entirely, to avoid accidental breaking changes or loss of intent. If a different approach is preferred (e.g., stricter removal or alternative handling), I’m happy to adjust the implementation accordingly — just let me know! --- ### 🙌 Next Steps Please review and let me know if: - Any file should be handled differently. - You prefer removal instead of disabling in certain areas. - Additional rules should be enforced or reverted. I’m available to make any follow-up improvements needed. --- ### 🎃 Hacktoberfest Note I'm participating in **Hacktoberfest**, so if this PR is accepted, please add the label: `hacktoberfest-accepted` Thank you! #1784 ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: DISCORD_USERNAME
93 lines
2.4 KiB
TypeScript
93 lines
2.4 KiB
TypeScript
import { Theme } from "../../../core/configuration/Config";
|
|
import { PlayerView } from "../../../core/game/GameView";
|
|
import { AnimatedSprite } from "../AnimatedSprite";
|
|
import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader";
|
|
import { Fx, FxType } from "./Fx";
|
|
|
|
function fadeInOut(
|
|
t: number,
|
|
fadeIn: number = 0.3,
|
|
fadeOut: number = 0.7,
|
|
): number {
|
|
if (t < fadeIn) {
|
|
const f = t / fadeIn; // Map to [0, 1]
|
|
return f * f;
|
|
} else if (t < fadeOut) {
|
|
return 1;
|
|
} else {
|
|
const f = (t - fadeOut) / (1 - fadeOut); // Map to [0, 1]
|
|
return 1 - f * f;
|
|
}
|
|
}
|
|
/**
|
|
* Fade in/out another FX
|
|
*/
|
|
export class FadeFx implements Fx {
|
|
constructor(
|
|
private fxToFade: SpriteFx,
|
|
private fadeIn: number,
|
|
private fadeOut: number,
|
|
) {}
|
|
|
|
renderTick(duration: number, ctx: CanvasRenderingContext2D): boolean {
|
|
const t = this.fxToFade.getElapsedTime() / this.fxToFade.getDuration();
|
|
ctx.save();
|
|
ctx.globalAlpha = fadeInOut(t, this.fadeIn, this.fadeOut);
|
|
const result = this.fxToFade.renderTick(duration, ctx);
|
|
ctx.restore();
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Animated sprite. Can be colored if provided an owner/theme
|
|
*/
|
|
export class SpriteFx implements Fx {
|
|
protected animatedSprite: AnimatedSprite | null;
|
|
protected elapsedTime = 0;
|
|
protected duration: number;
|
|
protected waitToTheEnd = false;
|
|
constructor(
|
|
animatedSpriteLoader: AnimatedSpriteLoader,
|
|
protected x: number,
|
|
protected y: number,
|
|
fxType: FxType,
|
|
duration?: number,
|
|
owner?: PlayerView,
|
|
theme?: Theme,
|
|
) {
|
|
this.animatedSprite = animatedSpriteLoader.createAnimatedSprite(
|
|
fxType,
|
|
owner,
|
|
theme,
|
|
);
|
|
if (!this.animatedSprite) {
|
|
console.error("Could not load animated sprite", fxType);
|
|
} else {
|
|
this.waitToTheEnd = duration ? true : false;
|
|
this.duration = duration ?? this.animatedSprite.lifeTime() ?? 1000;
|
|
}
|
|
}
|
|
|
|
renderTick(frameTime: number, ctx: CanvasRenderingContext2D): boolean {
|
|
if (!this.animatedSprite) return false;
|
|
|
|
this.elapsedTime += frameTime;
|
|
if (this.elapsedTime >= this.duration) return false;
|
|
|
|
if (!this.animatedSprite.isActive() && !this.waitToTheEnd) return false;
|
|
|
|
this.animatedSprite.update(frameTime);
|
|
this.animatedSprite.draw(ctx, this.x, this.y);
|
|
return true;
|
|
}
|
|
|
|
getElapsedTime(): number {
|
|
return this.elapsedTime;
|
|
}
|
|
|
|
getDuration(): number {
|
|
return this.duration;
|
|
}
|
|
}
|