From c22d31ad294efeedb7c6386b779f951b60961927 Mon Sep 17 00:00:00 2001 From: donggang <> Date: Fri, 21 Jun 2024 15:51:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=AA=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/common/random/RandomManager.ts | 38 ++++---------------- assets/core/common/random/SeedRandom.ts | 23 ++++++++++++ assets/core/common/random/SeedRandom.ts.meta | 9 +++++ 3 files changed, 39 insertions(+), 31 deletions(-) create mode 100644 assets/core/common/random/SeedRandom.ts create mode 100644 assets/core/common/random/SeedRandom.ts.meta diff --git a/assets/core/common/random/RandomManager.ts b/assets/core/common/random/RandomManager.ts index 10cdad4..455cde4 100644 --- a/assets/core/common/random/RandomManager.ts +++ b/assets/core/common/random/RandomManager.ts @@ -3,48 +3,24 @@ /** 随机管理 */ export class RandomManager { private static _instance: RandomManager; - - /** 是否运行在客户端环境 */ - isClient: boolean = true; - /** 是否为全局伪随机 */ - isGlobal: boolean = false; - - private random: any = null; + private random: any = null!; /** 随机数管理单例对象 */ static get instance(): RandomManager { if (this._instance == null) { this._instance = new RandomManager(); - this._instance.random = Math.random; + this._instance.setRandom(Math.random); } return this._instance; } - private getRandom(): number { - return this.isGlobal ? Math.random() : this.random(); + /** 设置第三方随机库 */ + setRandom(random: any) { + this.random = random; } - /** 设置随机种子 */ - setSeed(seed: number) { - if (this.isClient) { - //注:seedrandom.min.js文件在Cocos Creator中导入为插件生效 - //@ts-ignore - if (Math.seedrandom) { - if (this.isGlobal) - //@ts-ignore - new Math.seedrandom(seed, { global: true }); - else - //@ts-ignore - this.random = new Math.seedrandom(seed); - } - } - else { - var seedrandom = require('seedrandom'); - if (this.isGlobal) - new seedrandom(seed, { global: true }); - else - this.random = new seedrandom(seed); - } + private getRandom(): number { + return this.random(); } /** diff --git a/assets/core/common/random/SeedRandom.ts b/assets/core/common/random/SeedRandom.ts new file mode 100644 index 0000000..2669a47 --- /dev/null +++ b/assets/core/common/random/SeedRandom.ts @@ -0,0 +1,23 @@ +import { RandomManager } from "./RandomManager"; + +/** 伪随机 */ +export class SeedRandom { + private rm: RandomManager; + private sr: any; + + get random(): RandomManager { + return this.rm; + } + + constructor(seed: string) { + //@ts-ignore + this.sr = new Math.seedrandom(seed); + this.rm = new RandomManager(); + this.rm.setRandom(this.sr); + } + + destroy() { + this.rm = null!; + this.sr = null!; + } +} \ No newline at end of file diff --git a/assets/core/common/random/SeedRandom.ts.meta b/assets/core/common/random/SeedRandom.ts.meta new file mode 100644 index 0000000..5a17f7a --- /dev/null +++ b/assets/core/common/random/SeedRandom.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "9b02b9cd-c306-445a-af45-b79f41442201", + "files": [], + "subMetas": {}, + "userData": {} +}