Implement event manager and banner display

This commit is contained in:
Ice 2024-05-18 16:43:15 -05:00
parent 5dd017fa30
commit 06e8de245d
5 changed files with 61 additions and 5 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View File

@ -48,6 +48,7 @@ import { BerryType } from '../data/berry';
import i18next from '../plugins/i18n';
import { speciesEggMoves } from '../data/egg-moves';
import { ModifierTier } from '../modifier/modifier-tier';
import { TimedEventManager } from '#app/timed-event-manager.js';
export enum FieldPosition {
CENTER,
@ -1096,9 +1097,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
let shinyThreshold = new Utils.IntegerHolder(32);
if (thresholdOverride === undefined) {
const eventManager = new TimedEventManager()
if (!this.hasTrainer()) {
if (new Date() < new Date('2024-05-21'))
shinyThreshold.value *= 3;
if (eventManager.isEventActive())
shinyThreshold.value *= eventManager.getShinyMultiplier();
this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold);
}
} else

View File

@ -9,6 +9,7 @@ import { WindowVariant, getWindowVariantSuffix } from "./ui/ui-theme";
import { isMobile } from "./touch-controls";
import * as Utils from "./utils";
import { initI18n } from "./plugins/i18n";
import { TimedEventManager } from "./timed-event-manager";
export class LoadingScene extends SceneBase {
constructor() {
@ -29,6 +30,9 @@ export class LoadingScene extends SceneBase {
// Load menu images
this.loadAtlas('bg', 'ui');
if (new TimedEventManager().isEventActive()) {
this.loadImage('banner', 'events')
}
this.loadImage('command_fight_labels', 'ui');
this.loadAtlas('prompt', 'ui');
this.loadImage('candy', 'ui');
@ -209,9 +213,6 @@ export class LoadingScene extends SceneBase {
this.loadImage('egg_list_bg', 'ui');
this.loadImage('end_m', 'cg');
this.loadImage('end_f', 'cg');
for (let i = 0; i < 10; i++) {
this.loadAtlas(`pokemon_icons_${i}`, '');
if (i)

View File

@ -0,0 +1,41 @@
interface TimedEvent {
name: string;
eventType: string;
value: number;
startDate: string;
endDate: string;
}
const timedEvents: TimedEvent[] = [
{"name": "3x Shiny Weekend", "eventType": "shiny", "value": 3,
"startDate": "2024-05-18", "endDate": "2024-05-21"},
];
export class TimedEventManager {
constructor() {}
isEventActive(): boolean {
for (const timedEvent of timedEvents) {
const eventStart = new Date(timedEvent.startDate);
const now = new Date();
const eventEnd = new Date(timedEvent.endDate);
if (eventStart < now && now < eventEnd) {
return true;
}
}
return false;
}
getShinyMultiplier(): number {
let multiplier = 1;
for (const timedEvent of timedEvents) {
if (timedEvent.eventType === 'shiny' &&
new Date(timedEvent.startDate) < new Date() &&
new Date() < new Date(timedEvent.endDate)) {
multiplier *= timedEvent.value;
}
}
return multiplier;
}
}

View File

@ -6,6 +6,7 @@ import * as Utils from "../utils";
import { TextStyle, addTextObject } from "./text";
import { getBattleCountSplashMessage, getSplashMessages } from "../data/splash-messages";
import i18next from "i18next";
import { TimedEventManager } from "#app/timed-event-manager.js";
export default class TitleUiHandler extends OptionSelectUiHandler {
private titleContainer: Phaser.GameObjects.Container;
@ -31,7 +32,18 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
const logo = this.scene.add.image((this.scene.game.canvas.width / 6) / 2, 8, 'logo');
logo.setOrigin(0.5, 0);
this.titleContainer.add(logo);
if (new TimedEventManager().isEventActive()) {
const banner = this.scene.add.image((this.scene.game.canvas.width / 6.5) / 2, (this.scene.game.canvas.height / 4.65) / 2, 'banner');
banner.displayWidth = this.scene.game.canvas.width / 18.33
banner.displayHeight = banner.displayWidth / 3
banner.setOrigin(0.315, -0.8);
this.titleContainer.add(banner);
}
this.dailyRunScoreboard = new DailyRunScoreboard(this.scene, 1, 44);
this.dailyRunScoreboard.setup();