Full blown example.

This commit is contained in:
CSG-Dominic
2025-03-11 13:58:20 -05:00
parent ba27084fa1
commit 85f643ef10
5 changed files with 96 additions and 42 deletions

View File

@@ -9,35 +9,40 @@ type EmulatorCore = (
'gambatte' | 'mgba'
);
const EMULATOR_SYSTEM_CORES:{ [key in EmulatorSystem]:EmulatorCore } = {
'gb': 'gambatte',
'gbc': 'gambatte',
'gba': 'mgba'
type SendEmulatorMessageInit = {
message:'init';
core:EmulatorCore;
system:EmulatorSystem;
gameId:string;
gameName:string;
}
type SendEmulatorMessageVolume = {
message:'volume';
volume:number;
};
type SendEmulatorMessage = (
SendEmulatorMessageInit |
SendEmulatorMessageVolume
);
type ReceiveEmulatorMessage = (
{ message: 'start' } |
{ message: 'ready' } |
{ message: 'save' } |
{ message: 'load' }
);
export type EmulatorProps = {
system:EmulatorSystem;
};
type SendEmulatorMessageInit = {
message:'init';
core:EmulatorCore;
system:EmulatorSystem;
game:string;
gameName:string;
}
type SendEmulatorMessage = (
SendEmulatorMessageInit
);
type ReceiveEmulatorOnGameStart = {
message:'start'
}
type ReceiveEmulatorMessage = (
ReceiveEmulatorOnGameStart
);
const EMULATOR_SYSTEM_CORES:{ [key in EmulatorSystem]:EmulatorCore } = {
'gb': 'gambatte',
'gbc': 'gambatte',
'gba': 'mgba'
};
export const Emulator:React.FC<EmulatorProps> = props => {
const iframeRef = useRef<HTMLIFrameElement>(null);
@@ -55,7 +60,7 @@ export const Emulator:React.FC<EmulatorProps> = props => {
message: 'init',
core: EMULATOR_SYSTEM_CORES[props.system],
system: props.system,
game: '/test.gbc',
gameId: '0',
gameName: 'Pokemon - Crystal Version'
});
@@ -66,12 +71,12 @@ export const Emulator:React.FC<EmulatorProps> = props => {
}
const msg = e.data as ReceiveEmulatorMessage;
console.log('recv', msg);
switch(msg.message) {
case 'start':
console.log('Game started!');
break
case 'ready':
case 'load':
case 'save':
break;
default:
console.error('Invalid message received:', msg);
break