gamejam_v1 / src /App.tsx
rolexx's picture
wip
7fb8a10
import { useRef, useState } from 'react';
import PhaserGame, { IRefPhaserGame } from './game/PhaserGame';
import { MainMenu } from './game/scenes/MainMenu';
function App()
{
// The sprite can only be moved in the MainMenu Scene
const [canMoveSprite, setCanMoveSprite] = useState(true);
// References to the PhaserGame component (game and scene are exposed)
const phaserRef = useRef<IRefPhaserGame>();
const [spritePosition, setSpritePosition] = useState({ x: 0, y: 0 });
const [currentScene, setCurrentScene] = useState<Phaser.Scene | null>(null);
const changeScene = () => {
if(phaserRef.current)
{
const scene = phaserRef.current.scene as MainMenu;
if (scene)
{
scene.changeScene();
}
}
}
const moveSprite = () => {
if(phaserRef.current)
{
const scene = phaserRef.current.scene as MainMenu;
if (scene && scene.scene.key === 'MainMenu')
{
// Get the update logo position
scene.moveLogo(({ x, y }) => {
setSpritePosition({ x, y });
});
}
}
}
const addSprite = () => {
if (phaserRef.current)
{
const scene = phaserRef.current.scene;
if (scene)
{
// Add more stars
const x = Phaser.Math.Between(64, scene.scale.width - 64);
const y = Phaser.Math.Between(64, scene.scale.height - 64);
// `add.sprite` is a Phaser GameObjectFactory method and it returns a Sprite Game Object instance
const star = scene.add.sprite(x, y, 'star');
// ... which you can then act upon. Here we create a Phaser Tween to fade the star sprite in and out.
// You could, of course, do this from within the Phaser Scene code, but this is just an example
// showing that Phaser objects and systems can be acted upon from outside of Phaser itself.
scene.add.tween({
targets: star,
duration: 500 + Math.random() * 1000,
alpha: 0,
yoyo: true,
repeat: -1
});
}
}
}
// Event emitted from the PhaserGame component
const onCurrentActiveScene = (scene: Phaser.Scene) => {
setCurrentScene(scene);
setCanMoveSprite(scene.scene.key !== 'MainMenu');
};
return (
<div id="app">
<PhaserGame currentActiveScene={onCurrentActiveScene} />
<div>
<div>
<button className="button" onClick={changeScene}>Change Scene</button>
</div>
<div>
<button disabled={canMoveSprite} className="button" onClick={moveSprite}>Toggle Movement</button>
</div>
<div className="spritePosition">Sprite Position:
<pre>{`{\n x: ${spritePosition.x}\n y: ${spritePosition.y}\n}`}</pre>
</div>
<div>
<button className="button" onClick={addSprite}>Add New Sprite</button>
</div>
</div>
</div>
)
}
export default App