Full blown example.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user