mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 15:06:02 +01:00
71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
|
|
import { cache } from '../cache';
|
||
|
|
|
||
|
|
const duis: Record<string, Dui> = {};
|
||
|
|
let currentId = 0;
|
||
|
|
|
||
|
|
interface DuiProperties {
|
||
|
|
url: string;
|
||
|
|
width: number;
|
||
|
|
height: number;
|
||
|
|
debug?: boolean;
|
||
|
|
}
|
||
|
|
|
||
|
|
export class Dui {
|
||
|
|
private id: string = '';
|
||
|
|
private debug: boolean = false;
|
||
|
|
url: string = '';
|
||
|
|
duiObject: number = 0;
|
||
|
|
duiHandle: string = '';
|
||
|
|
runtimeTxd: number = 0;
|
||
|
|
txdObject: number = 0;
|
||
|
|
dictName: string = '';
|
||
|
|
txtName: string = '';
|
||
|
|
|
||
|
|
constructor(data: DuiProperties) {
|
||
|
|
const time = GetGameTimer();
|
||
|
|
const id = `${cache.resource}_${time}_${currentId}`;
|
||
|
|
currentId++;
|
||
|
|
this.id = id;
|
||
|
|
this.debug = data.debug || false;
|
||
|
|
this.url = data.url;
|
||
|
|
this.dictName = `ox_lib_dui_dict_${id}`;
|
||
|
|
this.txtName = `ox_lib_dui_txt_${id}`;
|
||
|
|
this.duiObject = CreateDui(data.url, data.width, data.height);
|
||
|
|
this.duiHandle = GetDuiHandle(this.duiObject);
|
||
|
|
this.runtimeTxd = CreateRuntimeTxd(this.dictName);
|
||
|
|
this.txdObject = CreateRuntimeTextureFromDuiHandle(this.runtimeTxd, this.txtName, this.duiHandle);
|
||
|
|
duis[id] = this;
|
||
|
|
|
||
|
|
if (this.debug) console.log(`Dui ${this.id} created`);
|
||
|
|
}
|
||
|
|
|
||
|
|
remove() {
|
||
|
|
SetDuiUrl(this.duiObject, 'about:blank');
|
||
|
|
DestroyDui(this.duiObject);
|
||
|
|
delete duis[this.id];
|
||
|
|
|
||
|
|
if (this.debug) console.log(`Dui ${this.id} removed`);
|
||
|
|
}
|
||
|
|
|
||
|
|
setUrl(url: string) {
|
||
|
|
this.url = url;
|
||
|
|
SetDuiUrl(this.duiObject, url);
|
||
|
|
|
||
|
|
if (this.debug) console.log(`Dui ${this.id} url set to ${url}`);
|
||
|
|
}
|
||
|
|
|
||
|
|
sendMessage(data: object) {
|
||
|
|
SendDuiMessage(this.duiObject, JSON.stringify(data));
|
||
|
|
|
||
|
|
if (this.debug) console.log(`Dui ${this.id} message sent with data :`, data);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
on('onResourceStop', (resourceName: string) => {
|
||
|
|
if (cache.resource !== resourceName) return;
|
||
|
|
|
||
|
|
for (const dui in duis) {
|
||
|
|
duis[dui].remove();
|
||
|
|
}
|
||
|
|
});
|