58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import p5 from 'p5';
|
|
import { SCREEN_WIDTH, SCREEN_HEIGHT } from './src/constants/screen';
|
|
import { DetailScene } from './src/scenes/DetailScene';
|
|
import { OverviewScene } from './src/scenes/OverviewScene';
|
|
import { Scenes } from './src/scenes/scenes';
|
|
import store from './src/store';
|
|
import { Companion, CompanionState } from './src/ui/companion';
|
|
import { InfoMessage } from './src/ui/info';
|
|
import { Intro } from './src/ui/intro';
|
|
import { Score } from './src/ui/score';
|
|
|
|
const sketch = (s: p5) => {
|
|
// Scenes
|
|
let overviewScene: OverviewScene;
|
|
let detailScene: DetailScene;
|
|
|
|
s.setup = () => {
|
|
s.createCanvas(SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
s.noCursor();
|
|
|
|
new Intro();
|
|
new Companion();
|
|
new InfoMessage();
|
|
new Score();
|
|
|
|
overviewScene = new OverviewScene();
|
|
detailScene = new DetailScene();
|
|
};
|
|
|
|
s.draw = () => {
|
|
const { currentScene } = store.getState();
|
|
|
|
if (currentScene === Scenes.OVERVIEW) {
|
|
overviewScene.draw();
|
|
} else if (currentScene === Scenes.DETAIL) {
|
|
detailScene.draw();
|
|
}
|
|
};
|
|
|
|
s.mousePressed = () => {
|
|
const { currentScene, companionState, infoMessageShown } = store.getState();
|
|
|
|
if (
|
|
companionState !== CompanionState.ACTIVE &&
|
|
!infoMessageShown &&
|
|
store.getState().currentIntroStep === 0
|
|
) {
|
|
if (currentScene === Scenes.OVERVIEW) {
|
|
overviewScene.onSceneClick();
|
|
} else if (currentScene === Scenes.DETAIL) {
|
|
detailScene.onSceneClick();
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
// Setup Sketch
|
|
export const mp5 = new p5(sketch);
|