Merge pull request #4 from Gadgame:feature/timer-manager
feat: add timer classfeature/ads-smart-display
commit
454a64bd2c
|
@ -1559,7 +1559,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 33
|
"__id__": 33
|
||||||
},
|
},
|
||||||
|
@ -1881,7 +1880,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 41
|
"__id__": 41
|
||||||
},
|
},
|
||||||
|
@ -2465,7 +2463,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 49
|
"__id__": 49
|
||||||
},
|
},
|
||||||
|
@ -3021,7 +3018,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 63
|
"__id__": 63
|
||||||
},
|
},
|
||||||
|
@ -3371,7 +3367,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 77
|
"__id__": 77
|
||||||
},
|
},
|
||||||
|
@ -3721,7 +3716,6 @@
|
||||||
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
"__type__": "6bb6fbw5PNPYq7zksYK1kHJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 86
|
"__id__": 86
|
||||||
},
|
},
|
||||||
|
@ -7127,7 +7121,6 @@
|
||||||
"__type__": "ce7b7e0d6BHlaRFoKBZN0h/",
|
"__type__": "ce7b7e0d6BHlaRFoKBZN0h/",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 135
|
"__id__": 135
|
||||||
},
|
},
|
||||||
|
@ -7798,7 +7791,6 @@
|
||||||
"__type__": "e3b5fa7tUtAbK3rQJ/G2Rox",
|
"__type__": "e3b5fa7tUtAbK3rQJ/G2Rox",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 212
|
"__id__": 212
|
||||||
},
|
},
|
||||||
|
@ -8265,7 +8257,6 @@
|
||||||
"__type__": "671bfEgTTVFgLo1v+x/wd06",
|
"__type__": "671bfEgTTVFgLo1v+x/wd06",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 221
|
"__id__": 221
|
||||||
},
|
},
|
||||||
|
@ -11835,7 +11826,6 @@
|
||||||
"__type__": "58a5aCWE8VEqJK+0wznWL24",
|
"__type__": "58a5aCWE8VEqJK+0wznWL24",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 311
|
"__id__": 311
|
||||||
},
|
},
|
||||||
|
@ -14665,7 +14655,6 @@
|
||||||
"__type__": "c5e2dm0qXVOuKP1ju7uyMtJ",
|
"__type__": "c5e2dm0qXVOuKP1ju7uyMtJ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 458
|
"__id__": 458
|
||||||
},
|
},
|
||||||
|
@ -15900,7 +15889,6 @@
|
||||||
"__type__": "ecf07La1rNA8YjY0h97yfWf",
|
"__type__": "ecf07La1rNA8YjY0h97yfWf",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 237
|
"__id__": 237
|
||||||
},
|
},
|
||||||
|
@ -17284,7 +17272,6 @@
|
||||||
"__type__": "204c1A707JPjYYnhqfMvkXj",
|
"__type__": "204c1A707JPjYYnhqfMvkXj",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 587
|
"__id__": 587
|
||||||
},
|
},
|
||||||
|
@ -17751,7 +17738,6 @@
|
||||||
"__type__": "fe619HtEX1OQq7oeACKrANd",
|
"__type__": "fe619HtEX1OQq7oeACKrANd",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 609
|
"__id__": 609
|
||||||
},
|
},
|
||||||
|
@ -18406,7 +18392,6 @@
|
||||||
"__type__": "02a884WNWtExrO21yAjQDWZ",
|
"__type__": "02a884WNWtExrO21yAjQDWZ",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 221
|
"__id__": 221
|
||||||
},
|
},
|
||||||
|
@ -19052,7 +19037,6 @@
|
||||||
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 648
|
"__id__": 648
|
||||||
},
|
},
|
||||||
|
@ -19696,7 +19680,6 @@
|
||||||
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 664
|
"__id__": 664
|
||||||
},
|
},
|
||||||
|
@ -20340,7 +20323,6 @@
|
||||||
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 683
|
"__id__": 683
|
||||||
},
|
},
|
||||||
|
@ -20984,7 +20966,6 @@
|
||||||
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
"__type__": "bed15fuvPJLIp1O3BWg43ad",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 702
|
"__id__": 702
|
||||||
},
|
},
|
||||||
|
@ -21664,7 +21645,6 @@
|
||||||
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 723
|
"__id__": 723
|
||||||
},
|
},
|
||||||
|
@ -22251,7 +22231,6 @@
|
||||||
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 738
|
"__id__": 738
|
||||||
},
|
},
|
||||||
|
@ -22838,7 +22817,6 @@
|
||||||
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 753
|
"__id__": 753
|
||||||
},
|
},
|
||||||
|
@ -23410,7 +23388,6 @@
|
||||||
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
"__type__": "85a1du42gFMrIHUG6qev0l/",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 768
|
"__id__": 768
|
||||||
},
|
},
|
||||||
|
@ -23584,7 +23561,6 @@
|
||||||
"__type__": "ca8a0x4KJRGNJFfMRlEhSED",
|
"__type__": "ca8a0x4KJRGNJFfMRlEhSED",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 784
|
"__id__": 784
|
||||||
},
|
},
|
||||||
|
@ -31090,7 +31066,6 @@
|
||||||
"__type__": "402d0NRh/pCFotZG+o5aE8p",
|
"__type__": "402d0NRh/pCFotZG+o5aE8p",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 789
|
"__id__": 789
|
||||||
},
|
},
|
||||||
|
@ -33550,7 +33525,6 @@
|
||||||
"__type__": "1f970S32ylOnofatPpSgI1Z",
|
"__type__": "1f970S32ylOnofatPpSgI1Z",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 999
|
"__id__": 999
|
||||||
},
|
},
|
||||||
|
@ -35568,7 +35542,6 @@
|
||||||
"__type__": "1f970S32ylOnofatPpSgI1Z",
|
"__type__": "1f970S32ylOnofatPpSgI1Z",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 1134
|
"__id__": 1134
|
||||||
},
|
},
|
||||||
|
@ -36067,7 +36040,6 @@
|
||||||
"__type__": "85b9aaRsZBAn5sUxS5RQ3EF",
|
"__type__": "85b9aaRsZBAn5sUxS5RQ3EF",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 9
|
"__id__": 9
|
||||||
},
|
},
|
||||||
|
@ -36094,7 +36066,7 @@
|
||||||
"y": -1200,
|
"y": -1200,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_timePlay": 120,
|
"_timePlay": 10,
|
||||||
"_clockIcon": {
|
"_clockIcon": {
|
||||||
"__uuid__": "f7bd5166-9d5f-4d43-a3d3-58ae9a4957fc@f9941",
|
"__uuid__": "f7bd5166-9d5f-4d43-a3d3-58ae9a4957fc@f9941",
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"ver": "1.2.0",
|
||||||
|
"importer": "directory",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "94327d15-4016-4b65-9832-dba77c986128",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
import { Director, director, game } from 'cc';
|
||||||
|
|
||||||
|
export enum TimerType {
|
||||||
|
countDown,
|
||||||
|
CountUp,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Timer {
|
||||||
|
private _timer: number = 0;
|
||||||
|
private _paused: boolean = true;
|
||||||
|
private _type: TimerType;
|
||||||
|
|
||||||
|
constructor(type: TimerType) {
|
||||||
|
this._type = type;
|
||||||
|
director.on(Director.EVENT_AFTER_UPDATE, this.update, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get time() {
|
||||||
|
return this._timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get timeRound() {
|
||||||
|
return Math.round(this._timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public set time(value: number) {
|
||||||
|
this._timer = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected update(dt: number): void {
|
||||||
|
if (this._paused) return;
|
||||||
|
if (this._type == TimerType.CountUp) {
|
||||||
|
this._timer += game.deltaTime;
|
||||||
|
} else {
|
||||||
|
this._timer -= game.deltaTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public startCount() {
|
||||||
|
this._paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public stopCount() {
|
||||||
|
this._paused = true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
"ver": "4.0.23",
|
"ver": "4.0.23",
|
||||||
"importer": "typescript",
|
"importer": "typescript",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "995ccd98-cdc8-4a0c-96f0-e10abd60ec3a",
|
"uuid": "20fc6cb6-0b98-42cc-b2a9-cdb2aa2d6e34",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
|
@ -1,7 +1,7 @@
|
||||||
import { _decorator, Animation, AudioClip, CCFloat, CCString, Collider2D, Component, Contact2DType } from 'cc';
|
import { _decorator, Animation, AudioClip, CCFloat, CCString, Collider2D, Component, Contact2DType } from 'cc';
|
||||||
import GameEvent from '../Events/GameEvent';
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import { AudioManager } from '../Manager/AudioManager';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import IPoolable from '../Pool/IPoolable';
|
import IPoolable from '../Pool/IPoolable';
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
|
@ -31,7 +31,7 @@ export class BoosterBase extends Component implements IPoolable {
|
||||||
if (!this._enabled) return;
|
if (!this._enabled) return;
|
||||||
this.boosterActive();
|
this.boosterActive();
|
||||||
this._enabled = false;
|
this._enabled = false;
|
||||||
SoundManager.instance.playSfx(this._collectSound);
|
AudioManager.instance.playSfx(this._collectSound);
|
||||||
EventManger.instance.emit(GameEvent.ObjectRelease, this.node);
|
EventManger.instance.emit(GameEvent.ObjectRelease, this.node);
|
||||||
ObjectPool.release(this.node);
|
ObjectPool.release(this.node);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,9 @@ import {
|
||||||
import BoosterType from '../Enum/BoosterType';
|
import BoosterType from '../Enum/BoosterType';
|
||||||
import ScoreType from '../Enum/ScoreType';
|
import ScoreType from '../Enum/ScoreType';
|
||||||
import GameEvent from '../Events/GameEvent';
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
import { SequenceSound } from './SequenceSound';
|
import { SequenceSound } from './SequenceSound';
|
||||||
|
@ -150,7 +150,7 @@ export class CumulativeBar extends Component {
|
||||||
pos.z = 10;
|
pos.z = 10;
|
||||||
fx.node.setWorldPosition(pos);
|
fx.node.setWorldPosition(pos);
|
||||||
this._starPool.release(star);
|
this._starPool.release(star);
|
||||||
SoundManager.instance.playSfx(this._collectStartSoundFx);
|
AudioManager.playSfx(this._collectStartSoundFx);
|
||||||
await Utilities.waitUntil(() => {
|
await Utilities.waitUntil(() => {
|
||||||
return fx.isStopped;
|
return fx.isStopped;
|
||||||
}, 0.1);
|
}, 0.1);
|
||||||
|
@ -166,10 +166,10 @@ export class CumulativeBar extends Component {
|
||||||
break;
|
break;
|
||||||
case ScoreType.Goal:
|
case ScoreType.Goal:
|
||||||
if (this._currentValue == 0) {
|
if (this._currentValue == 0) {
|
||||||
SoundManager.instance.playSfx(this._goalSound, { volume: 3 });
|
AudioManager.playSfx(this._goalSound, { volume: 3 });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SoundManager.instance.playSfx(this._cheeseModeGoalSound, { volume: 3 });
|
AudioManager.playSfx(this._cheeseModeGoalSound, { volume: 3 });
|
||||||
this._multiplier = 0;
|
this._multiplier = 0;
|
||||||
this._goal = true;
|
this._goal = true;
|
||||||
let items = Math.ceil(this._currentValue / 10);
|
let items = Math.ceil(this._currentValue / 10);
|
||||||
|
@ -239,7 +239,7 @@ export class CumulativeBar extends Component {
|
||||||
const pos = this.node.getWorldPosition();
|
const pos = this.node.getWorldPosition();
|
||||||
pos.z = 10;
|
pos.z = 10;
|
||||||
fx.node.setWorldPosition(pos);
|
fx.node.setWorldPosition(pos);
|
||||||
SoundManager.instance.playSfx(selectReward.sound);
|
AudioManager.playSfx(selectReward.sound);
|
||||||
await Utilities.waitUntil(() => fx.isStopped, 0.1);
|
await Utilities.waitUntil(() => fx.isStopped, 0.1);
|
||||||
selectReward.pool.release(fx);
|
selectReward.pool.release(fx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,9 @@ import {
|
||||||
Vec3,
|
Vec3,
|
||||||
} from 'cc';
|
} from 'cc';
|
||||||
import GameEvent from '../Events/GameEvent';
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import IPoolable from '../Pool/IPoolable';
|
import IPoolable from '../Pool/IPoolable';
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
|
@ -70,7 +70,7 @@ export class ScoreObject extends Component implements IPoolable {
|
||||||
private async onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) {
|
private async onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) {
|
||||||
if (!this._enabled) return;
|
if (!this._enabled) return;
|
||||||
if (this._isHit) return;
|
if (this._isHit) return;
|
||||||
if (this._hitSound) SoundManager.instance.playSfx(this._hitSound);
|
if (this._hitSound) AudioManager.playSfx(this._hitSound);
|
||||||
this._enabled = false;
|
this._enabled = false;
|
||||||
// let center = this.node.getWorldPosition();
|
// let center = this.node.getWorldPosition();
|
||||||
// let other = otherCollider.node.getWorldPosition();
|
// let other = otherCollider.node.getWorldPosition();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { _decorator, AudioClip, CCFloat, Component, Node } from 'cc';
|
import { _decorator, AudioClip, CCFloat, Component, Node } from 'cc';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
import AudioManager from '../Manager/AudioManager';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('SequenceSound')
|
@ccclass('SequenceSound')
|
||||||
|
@ -20,12 +20,12 @@ export class SequenceSound extends Component {
|
||||||
|
|
||||||
public playSound(volume: number = 1) {
|
public playSound(volume: number = 1) {
|
||||||
if (this._timer > 0) {
|
if (this._timer > 0) {
|
||||||
SoundManager.instance.playSfx(this._audioClips[this._currentIndex], { volume });
|
AudioManager.playSfx(this._audioClips[this._currentIndex], { volume });
|
||||||
this._currentIndex++;
|
this._currentIndex++;
|
||||||
if (this._currentIndex >= this._audioClips.length) this._currentIndex = 0;
|
if (this._currentIndex >= this._audioClips.length) this._currentIndex = 0;
|
||||||
} else {
|
} else {
|
||||||
this._currentIndex = 0;
|
this._currentIndex = 0;
|
||||||
SoundManager.instance.playSfx(this._audioClips[this._currentIndex], { volume });
|
AudioManager.playSfx(this._audioClips[this._currentIndex], { volume });
|
||||||
}
|
}
|
||||||
this._timer = this._duration;
|
this._timer = this._duration;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { _decorator, Collider2D, Component, Contact2DType, Node, Animation, RigidBody2D, AudioClip } from 'cc';
|
import { _decorator, Animation, AudioClip, Collider2D, Component, Contact2DType, Node, RigidBody2D } from 'cc';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { CameraController } from './CameraController';
|
import { CameraController } from './CameraController';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('SlingShot')
|
@ccclass('SlingShot')
|
||||||
|
@ -20,7 +20,7 @@ export default class SlingShot extends Component {
|
||||||
onBeginContact(self: Collider2D, other: Collider2D) {
|
onBeginContact(self: Collider2D, other: Collider2D) {
|
||||||
this._animation.play();
|
this._animation.play();
|
||||||
const velocity = other.getComponent(RigidBody2D).linearVelocity.length();
|
const velocity = other.getComponent(RigidBody2D).linearVelocity.length();
|
||||||
SoundManager.instance.playSfx(this._soundFx);
|
AudioManager.playSfx(this._soundFx);
|
||||||
if (velocity >= 40) {
|
if (velocity >= 40) {
|
||||||
CameraController.instance.shake(0.08);
|
CameraController.instance.shake(0.08);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { Node, Vec3 } from 'cc';
|
import { Node, Vec3 } from 'cc';
|
||||||
import GameState from '../Enum/GameState';
|
|
||||||
import ScoreType from '../Enum/ScoreType';
|
|
||||||
import BoosterType from '../Enum/BoosterType';
|
import BoosterType from '../Enum/BoosterType';
|
||||||
import ControllerSide from '../Enum/ControllerSide';
|
import ControllerSide from '../Enum/ControllerSide';
|
||||||
|
import GameState from '../Enum/GameState';
|
||||||
|
import ScoreType from '../Enum/ScoreType';
|
||||||
|
|
||||||
enum GameEvent {
|
enum GameEvent {
|
||||||
Score,
|
Score,
|
||||||
|
|
|
@ -14,8 +14,8 @@ import {
|
||||||
import TimeConfig from '../Enum/TimeConfig';
|
import TimeConfig from '../Enum/TimeConfig';
|
||||||
import { CameraController } from '../Environments/CameraController';
|
import { CameraController } from '../Environments/CameraController';
|
||||||
import GameEvent from '../Events/GameEvent';
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
import { Ball } from './Ball';
|
import { Ball } from './Ball';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
@ -54,7 +54,7 @@ export class Cannon extends Component {
|
||||||
this._animation.play();
|
this._animation.play();
|
||||||
ball.clearRigiState(true);
|
ball.clearRigiState(true);
|
||||||
ball.throwBall(new Vec2(0, this._force));
|
ball.throwBall(new Vec2(0, this._force));
|
||||||
SoundManager.instance.playSfx(this._soundFx);
|
AudioManager.playSfx(this._soundFx);
|
||||||
await Utilities.delay(TimeConfig.DelayCannonDone);
|
await Utilities.delay(TimeConfig.DelayCannonDone);
|
||||||
tween(this._collider.node).to(0.5, { scale: Vec3.ZERO }, { easing: 'backIn' }).start();
|
tween(this._collider.node).to(0.5, { scale: Vec3.ZERO }, { easing: 'backIn' }).start();
|
||||||
EventHandler.emitEvents(this.onDone, ball);
|
EventHandler.emitEvents(this.onDone, ball);
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
import {
|
import {
|
||||||
_decorator,
|
_decorator,
|
||||||
|
AudioClip,
|
||||||
CCFloat,
|
CCFloat,
|
||||||
CCInteger,
|
CCInteger,
|
||||||
|
Collider2D,
|
||||||
Component,
|
Component,
|
||||||
|
Contact2DType,
|
||||||
geometry,
|
geometry,
|
||||||
math,
|
math,
|
||||||
Node,
|
Node,
|
||||||
Vec3,
|
|
||||||
tween,
|
|
||||||
Collider2D,
|
|
||||||
Sprite,
|
Sprite,
|
||||||
Contact2DType,
|
tween,
|
||||||
AudioClip,
|
|
||||||
Tween,
|
Tween,
|
||||||
|
Vec3,
|
||||||
} from 'cc';
|
} from 'cc';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import ScoreType from '../Enum/ScoreType';
|
|
||||||
import GameState from '../Enum/GameState';
|
import GameState from '../Enum/GameState';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
import ScoreType from '../Enum/ScoreType';
|
||||||
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
|
import { EventManger } from '../Manager/EventManger';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('Enemy')
|
@ccclass('Enemy')
|
||||||
|
@ -107,7 +107,7 @@ export class Enemy extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
private onBeginContact(self: Collider2D, other: Collider2D) {
|
private onBeginContact(self: Collider2D, other: Collider2D) {
|
||||||
SoundManager.instance.playSfx(this._hitSound);
|
AudioManager.playSfx(this._hitSound);
|
||||||
Tween.stopAllByTarget(this._sprite.node.scale);
|
Tween.stopAllByTarget(this._sprite.node.scale);
|
||||||
tween(this._sprite.node.scale)
|
tween(this._sprite.node.scale)
|
||||||
.set(Vec3.ONE)
|
.set(Vec3.ONE)
|
||||||
|
|
|
@ -11,10 +11,7 @@ import {
|
||||||
} from 'cc';
|
} from 'cc';
|
||||||
import TimeConfig from '../Enum/TimeConfig';
|
import TimeConfig from '../Enum/TimeConfig';
|
||||||
import { CameraController } from '../Environments/CameraController';
|
import { CameraController } from '../Environments/CameraController';
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import { EventManger } from '../Manager/EventManger';
|
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
import { Ball } from './Ball';
|
import { Ball } from './Ball';
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { _decorator, AudioClip, Collider2D, Component, Contact2DType, Node, ParticleSystem, Prefab, Vec2 } from 'cc';
|
import { _decorator, AudioClip, Collider2D, Component, Contact2DType, Node, ParticleSystem, Prefab, Vec2 } from 'cc';
|
||||||
import TimeConfig from '../Enum/TimeConfig';
|
import TimeConfig from '../Enum/TimeConfig';
|
||||||
import { CameraController } from '../Environments/CameraController';
|
import { CameraController } from '../Environments/CameraController';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
import { Ball } from './Ball';
|
import { Ball } from './Ball';
|
||||||
|
@ -63,7 +63,7 @@ export class MultiBall extends Component {
|
||||||
const pos = this.node.getWorldPosition();
|
const pos = this.node.getWorldPosition();
|
||||||
pos.z = 10;
|
pos.z = 10;
|
||||||
fx.node.setWorldPosition(pos);
|
fx.node.setWorldPosition(pos);
|
||||||
SoundManager.instance.playSfx(this._soundFX);
|
AudioManager.playSfx(this._soundFX);
|
||||||
await Utilities.delay(TimeConfig.DelayMultiBall);
|
await Utilities.delay(TimeConfig.DelayMultiBall);
|
||||||
this._enabled = true;
|
this._enabled = true;
|
||||||
await Utilities.waitUntil(() => fx.isStopped);
|
await Utilities.waitUntil(() => fx.isStopped);
|
||||||
|
|
|
@ -24,8 +24,8 @@ import {
|
||||||
import PhysicsGroup from '../Enum/PhysicGroup';
|
import PhysicsGroup from '../Enum/PhysicGroup';
|
||||||
import { SequenceSound } from '../Environments/SequenceSound';
|
import { SequenceSound } from '../Environments/SequenceSound';
|
||||||
import GameEvent from '../Events/GameEvent';
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import IPoolable from '../Pool/IPoolable';
|
import IPoolable from '../Pool/IPoolable';
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
|
@ -166,7 +166,7 @@ export class Ball extends Component implements IPoolable {
|
||||||
}
|
}
|
||||||
const hitFx = this._impactPool.get(ParticleSystem, this.node.parent);
|
const hitFx = this._impactPool.get(ParticleSystem, this.node.parent);
|
||||||
hitFx.node.setWorldPosition(new Vec3(hitPoint.x, hitPoint.y, 10));
|
hitFx.node.setWorldPosition(new Vec3(hitPoint.x, hitPoint.y, 10));
|
||||||
SoundManager.instance.playSfx(
|
AudioManager.playSfx(
|
||||||
otherCollider.group == PhysicsGroup.FLIPPER ? this._impactFlipperSound : this._impactSound,
|
otherCollider.group == PhysicsGroup.FLIPPER ? this._impactFlipperSound : this._impactSound,
|
||||||
);
|
);
|
||||||
await Utilities.waitUntil(() => hitFx.isStopped, 0.1);
|
await Utilities.waitUntil(() => hitFx.isStopped, 0.1);
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
import {
|
import {
|
||||||
_decorator,
|
_decorator,
|
||||||
|
Animation,
|
||||||
|
AudioClip,
|
||||||
|
CCFloat,
|
||||||
Component,
|
Component,
|
||||||
|
EventKeyboard,
|
||||||
HingeJoint2D,
|
HingeJoint2D,
|
||||||
input,
|
input,
|
||||||
CCFloat,
|
|
||||||
Input,
|
Input,
|
||||||
EventKeyboard,
|
|
||||||
KeyCode,
|
KeyCode,
|
||||||
Animation,
|
|
||||||
Vec3,
|
Vec3,
|
||||||
AudioClip,
|
|
||||||
} from 'cc';
|
} from 'cc';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import TimeConfig from '../Enum/TimeConfig';
|
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
import ControllerSide from '../Enum/ControllerSide';
|
import ControllerSide from '../Enum/ControllerSide';
|
||||||
|
import TimeConfig from '../Enum/TimeConfig';
|
||||||
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
|
import { EventManger } from '../Manager/EventManger';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('Flipper')
|
@ccclass('Flipper')
|
||||||
|
@ -116,7 +116,7 @@ export class Flipper extends Component {
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
private activeFlipper(): void {
|
private activeFlipper(): void {
|
||||||
SoundManager.instance.playSfx(this._activeSound, { volume: 0.5 });
|
AudioManager.playSfx(this._activeSound, { volume: 0.5 });
|
||||||
this._hingeJoint.motorSpeed = this._motorSpeedActive;
|
this._hingeJoint.motorSpeed = this._motorSpeedActive;
|
||||||
}
|
}
|
||||||
private deActiveFlipper(): void {
|
private deActiveFlipper(): void {
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
import { _decorator, AudioClip, AudioSource, sys } from 'cc';
|
||||||
|
import 'howler';
|
||||||
|
|
||||||
|
export class SfxSource {
|
||||||
|
private _source: AudioSource;
|
||||||
|
|
||||||
|
public get playing() {
|
||||||
|
return this._source.playing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get loop() {
|
||||||
|
return this._source.loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set loop(value: boolean) {
|
||||||
|
this._source.loop = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _volume = 1;
|
||||||
|
public get volume() {
|
||||||
|
return this._volume;
|
||||||
|
}
|
||||||
|
public set volume(value: number) {
|
||||||
|
this._volume = value;
|
||||||
|
if (!this.mute) {
|
||||||
|
this._source.volume = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _mute = false;
|
||||||
|
public get mute() {
|
||||||
|
return this._mute;
|
||||||
|
}
|
||||||
|
public set mute(value: boolean) {
|
||||||
|
if (value) {
|
||||||
|
this._source.volume = 0;
|
||||||
|
} else {
|
||||||
|
this._source.volume = this.volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._mute = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(audioClip: AudioClip) {
|
||||||
|
this._source = new AudioSource();
|
||||||
|
this._source.playOnAwake = false;
|
||||||
|
this._source.clip = audioClip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public play() {
|
||||||
|
if (!this.loop) {
|
||||||
|
if (this.playing) {
|
||||||
|
this._source.playOneShot(this._source.clip, this.mute ? 0 : this.volume);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._source.play();
|
||||||
|
} else {
|
||||||
|
if (!this.playing) this._source.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public stop() {
|
||||||
|
this._source.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class AudioManager {
|
||||||
|
private static _audioSourcesSfx: Map<AudioClip, SfxSource> = new Map();
|
||||||
|
private static _audioSourceBgm: Howl;
|
||||||
|
private static _isMute: boolean = false;
|
||||||
|
|
||||||
|
public static get mute() {
|
||||||
|
return this._isMute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static toggleMute(): boolean {
|
||||||
|
this._isMute = !this._isMute;
|
||||||
|
this.setMute(this._isMute);
|
||||||
|
return this._isMute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static setMute(mute: boolean) {
|
||||||
|
this._isMute = mute;
|
||||||
|
this._audioSourceBgm.mute(this._isMute);
|
||||||
|
this._audioSourcesSfx.forEach((source) => {
|
||||||
|
source.mute = this._isMute;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static playBGM(audio: AudioClip, opts?: { volume?: number; loop?: boolean; rate?: number }) {
|
||||||
|
this._audioSourceBgm?.stop();
|
||||||
|
this._audioSourceBgm = new Howl({
|
||||||
|
src: audio.nativeUrl,
|
||||||
|
loop: true,
|
||||||
|
mute: this._isMute,
|
||||||
|
...opts,
|
||||||
|
});
|
||||||
|
this._audioSourceBgm.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static setPlayRateBGM(rate: number) {
|
||||||
|
this._audioSourceBgm.rate(rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static playSfx(audioClip: AudioClip, opts?: { volume?: number; loop?: boolean }) {
|
||||||
|
let soundSource = this._audioSourcesSfx.get(audioClip);
|
||||||
|
const config = {
|
||||||
|
volume: 1,
|
||||||
|
loop: false,
|
||||||
|
...opts,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (soundSource) {
|
||||||
|
soundSource.volume = config.volume;
|
||||||
|
soundSource.loop = config.loop;
|
||||||
|
soundSource.mute = this._isMute;
|
||||||
|
soundSource.play();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
soundSource = new SfxSource(audioClip);
|
||||||
|
soundSource.loop = config.loop;
|
||||||
|
soundSource.volume = config.volume;
|
||||||
|
soundSource.mute = this._isMute;
|
||||||
|
this._audioSourcesSfx.set(audioClip, soundSource);
|
||||||
|
soundSource.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static stopBgm() {
|
||||||
|
this._audioSourceBgm.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static stopSfx(audioClip: AudioClip) {
|
||||||
|
this._audioSourcesSfx.get(audioClip).stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static stopAllSfxLoop() {
|
||||||
|
this._audioSourcesSfx.forEach((sfx) => sfx.stop());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static findAudioSourcesSfx(audioClip: AudioClip): SfxSource {
|
||||||
|
return this._audioSourcesSfx.get(audioClip);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"ver": "4.0.23",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "acb93341-6e50-4b28-bb35-5403f1340145",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
|
@ -1,31 +1,32 @@
|
||||||
import {
|
import {
|
||||||
_decorator,
|
_decorator,
|
||||||
|
AudioClip,
|
||||||
|
CCInteger,
|
||||||
|
Color,
|
||||||
|
EPhysics2DDrawFlags,
|
||||||
Node,
|
Node,
|
||||||
|
PhysicsSystem2D,
|
||||||
Prefab,
|
Prefab,
|
||||||
|
Quat,
|
||||||
|
randomRangeInt,
|
||||||
|
SpriteFrame,
|
||||||
Vec2,
|
Vec2,
|
||||||
Vec3,
|
Vec3,
|
||||||
randomRangeInt,
|
|
||||||
CCInteger,
|
|
||||||
AudioClip,
|
|
||||||
Quat,
|
|
||||||
EPhysics2DDrawFlags,
|
|
||||||
PhysicsSystem2D,
|
|
||||||
SpriteFrame,
|
|
||||||
Color,
|
|
||||||
} from 'cc';
|
} from 'cc';
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
|
||||||
import { Ball } from '../GamePlay/Ball';
|
|
||||||
import Utilities from '../Utilities';
|
|
||||||
import GameState from '../Enum/GameState';
|
|
||||||
import { EventManger } from './EventManger';
|
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import ScoreType from '../Enum/ScoreType';
|
|
||||||
import { FloatingText } from '../Environments/FloatingText';
|
|
||||||
import { SoundManager } from './SoundManager';
|
|
||||||
import TimeConfig from '../Enum/TimeConfig';
|
|
||||||
import BEConnector from '../API/BEConnector';
|
import BEConnector from '../API/BEConnector';
|
||||||
|
import Timer, { TimerType } from '../Base/Timer';
|
||||||
import BoosterType from '../Enum/BoosterType';
|
import BoosterType from '../Enum/BoosterType';
|
||||||
|
import GameState from '../Enum/GameState';
|
||||||
|
import ScoreType from '../Enum/ScoreType';
|
||||||
|
import TimeConfig from '../Enum/TimeConfig';
|
||||||
|
import { FloatingText } from '../Environments/FloatingText';
|
||||||
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import { Ball } from '../GamePlay/Ball';
|
||||||
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Singleton from '../Singleton';
|
import Singleton from '../Singleton';
|
||||||
|
import Utilities from '../Utilities';
|
||||||
|
import AudioManager from './AudioManager';
|
||||||
|
import { EventManger } from './EventManger';
|
||||||
import { StickerManager } from './StickerManager';
|
import { StickerManager } from './StickerManager';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
private _ballPool: ObjectPool;
|
private _ballPool: ObjectPool;
|
||||||
private _FloatingScorePool: ObjectPool;
|
private _FloatingScorePool: ObjectPool;
|
||||||
private _gameState: GameState;
|
private _gameState: GameState;
|
||||||
private _timer: number;
|
private _timer: Timer = new Timer(TimerType.countDown);
|
||||||
private _boostersActive: Booster[] = [];
|
private _boostersActive: Booster[] = [];
|
||||||
|
|
||||||
private _score = 0;
|
private _score = 0;
|
||||||
|
@ -136,7 +137,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
if (booster.runningTime >= booster.time) {
|
if (booster.runningTime >= booster.time) {
|
||||||
this._boostersActive.splice(i, 1);
|
this._boostersActive.splice(i, 1);
|
||||||
if (this._boostersActive.length == 0) {
|
if (this._boostersActive.length == 0) {
|
||||||
SoundManager.instance.setPlayRateBGM(1);
|
AudioManager.setPlayRateBGM(1);
|
||||||
}
|
}
|
||||||
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
|
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
|
||||||
}
|
}
|
||||||
|
@ -206,16 +207,16 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
|
|
||||||
private async countTime() {
|
private async countTime() {
|
||||||
while (this._gameState == GameState.Playing) {
|
while (this._gameState == GameState.Playing) {
|
||||||
this._timer--;
|
if (this._timer.time <= 0) {
|
||||||
if (this._timer <= 0) {
|
this._timer.time = 0;
|
||||||
this._timer = 0;
|
this._timer.stopCount();
|
||||||
this.gameOver();
|
this.gameOver();
|
||||||
}
|
}
|
||||||
if (!this._warningTime && this._timer <= 10) {
|
if (!this._warningTime && this._timer.time <= 10) {
|
||||||
this._warningTime = true;
|
this._warningTime = true;
|
||||||
EventManger.instance.emit(GameEvent.WarningTime, true);
|
EventManger.instance.emit(GameEvent.WarningTime, true);
|
||||||
}
|
}
|
||||||
EventManger.instance.emit(GameEvent.TimeUpdate, this._timer);
|
EventManger.instance.emit(GameEvent.TimeUpdate, this._timer.timeRound);
|
||||||
await Utilities.delay(1);
|
await Utilities.delay(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,7 +239,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
|
|
||||||
public spawnBall(throwBall: boolean, playStartSound: boolean = true): Ball {
|
public spawnBall(throwBall: boolean, playStartSound: boolean = true): Ball {
|
||||||
if (this._gameState != GameState.Playing) return;
|
if (this._gameState != GameState.Playing) return;
|
||||||
if (playStartSound) SoundManager.instance.playSfx(this._startSound);
|
if (playStartSound) AudioManager.playSfx(this._startSound);
|
||||||
this.setCurrentBallInGame(1);
|
this.setCurrentBallInGame(1);
|
||||||
const ball = this._ballPool.get(Ball, this._ballHolder);
|
const ball = this._ballPool.get(Ball, this._ballHolder);
|
||||||
ball.init(this._boostersActive.length > 0);
|
ball.init(this._boostersActive.length > 0);
|
||||||
|
@ -258,7 +259,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
this.setCurrentBallInGame(-1);
|
this.setCurrentBallInGame(-1);
|
||||||
if (this._currentBallInGame <= 0) {
|
if (this._currentBallInGame <= 0) {
|
||||||
EventManger.instance.emit(GameEvent.BallOut, null);
|
EventManger.instance.emit(GameEvent.BallOut, null);
|
||||||
SoundManager.instance.playSfx(this._ballOutSound);
|
AudioManager.playSfx(this._ballOutSound);
|
||||||
this.DisableAllBooster();
|
this.DisableAllBooster();
|
||||||
await Utilities.delay(TimeConfig.DelayPLay);
|
await Utilities.delay(TimeConfig.DelayPLay);
|
||||||
this.spawnBall(true);
|
this.spawnBall(true);
|
||||||
|
@ -295,18 +296,18 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public addTime(time: number) {
|
public addTime(time: number) {
|
||||||
this._timer += time;
|
this._timer.time += time;
|
||||||
if (this._warningTime && this._timer > 10) {
|
if (this._warningTime && this._timer.time > 10) {
|
||||||
this._warningTime = false;
|
this._warningTime = false;
|
||||||
EventManger.instance.emit(GameEvent.WarningTime, false);
|
EventManger.instance.emit(GameEvent.WarningTime, false);
|
||||||
}
|
}
|
||||||
EventManger.instance.emit(GameEvent.TimeUpdate, this._timer);
|
EventManger.instance.emit(GameEvent.TimeUpdate, this._timer.timeRound);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async gameOver() {
|
public async gameOver() {
|
||||||
this._ballPool.releaseAll();
|
this._ballPool.releaseAll();
|
||||||
this.DisableAllBooster();
|
this.DisableAllBooster();
|
||||||
SoundManager.instance.playBGM(this._gameOverMusic);
|
AudioManager.playBGM(this._gameOverMusic);
|
||||||
StickerManager.instance.showLabel('TIME UP!!!', { color: new Color('#ed3a18'), outLineColor: Color.WHITE });
|
StickerManager.instance.showLabel('TIME UP!!!', { color: new Color('#ed3a18'), outLineColor: Color.WHITE });
|
||||||
BEConnector.gameScore = this.score;
|
BEConnector.gameScore = this.score;
|
||||||
if (this.isReplayed) {
|
if (this.isReplayed) {
|
||||||
|
@ -319,28 +320,30 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ready() {
|
public Ready() {
|
||||||
SoundManager.instance.playBGM(this._backgroundMusic);
|
AudioManager.playBGM(this._backgroundMusic);
|
||||||
this.changeGameState(GameState.Ready);
|
this.changeGameState(GameState.Ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async play() {
|
public async play() {
|
||||||
this._timer = this._timePlay + TimeConfig.DelayPLay;
|
this._timer.time = this._timePlay;
|
||||||
this._score = 0;
|
this._score = 0;
|
||||||
this._currentBallInGame = 0;
|
this._currentBallInGame = 0;
|
||||||
this._isMultiBall = false;
|
this._isMultiBall = false;
|
||||||
this.changeGameState(GameState.Playing);
|
this.changeGameState(GameState.Playing);
|
||||||
await Utilities.delay(TimeConfig.DelayPLay);
|
await Utilities.delay(TimeConfig.DelayPLay);
|
||||||
|
this._timer.startCount();
|
||||||
this.spawnBall(true);
|
this.spawnBall(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async gameRelive() {
|
public async gameRelive() {
|
||||||
this.changeGameState(GameState.Relive);
|
this.changeGameState(GameState.Relive);
|
||||||
this._timer = this._timePlay + TimeConfig.DelayPLay;
|
this._timer.time = this._timePlay;
|
||||||
this._currentBallInGame = 0;
|
this._currentBallInGame = 0;
|
||||||
this._isMultiBall = false;
|
this._isMultiBall = false;
|
||||||
SoundManager.instance.playBGM(this._backgroundMusic);
|
AudioManager.playBGM(this._backgroundMusic);
|
||||||
this.changeGameState(GameState.Playing);
|
this.changeGameState(GameState.Playing);
|
||||||
await Utilities.delay(TimeConfig.DelayPLay);
|
await Utilities.delay(TimeConfig.DelayPLay);
|
||||||
|
this._timer.startCount();
|
||||||
this.spawnBall(true);
|
this.spawnBall(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,7 +353,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
|
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
|
||||||
}
|
}
|
||||||
this._boostersActive = [];
|
this._boostersActive = [];
|
||||||
SoundManager.instance.setPlayRateBGM(1);
|
AudioManager.setPlayRateBGM(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async ActiveBooster(type: BoosterType, time: number, displayName: string) {
|
public async ActiveBooster(type: BoosterType, time: number, displayName: string) {
|
||||||
|
@ -361,7 +364,7 @@ export class GameManager extends Singleton<GameManager>() {
|
||||||
}
|
}
|
||||||
this._boostersActive.push(new Booster(type, time));
|
this._boostersActive.push(new Booster(type, time));
|
||||||
EventManger.instance.emit(GameEvent.BoosterActive, [type, displayName]);
|
EventManger.instance.emit(GameEvent.BoosterActive, [type, displayName]);
|
||||||
SoundManager.instance.playSfx(this._boosterActiveSound);
|
AudioManager.playSfx(this._boosterActiveSound);
|
||||||
SoundManager.instance.setPlayRateBGM(1.25);
|
AudioManager.setPlayRateBGM(1.25);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,120 +0,0 @@
|
||||||
import { _decorator, AudioClip, AudioSource, Component, Node } from 'cc';
|
|
||||||
import Singleton from '../Singleton';
|
|
||||||
import { Howl } from 'howler';
|
|
||||||
const { ccclass, property } = _decorator;
|
|
||||||
|
|
||||||
export class SoundSource {
|
|
||||||
public source: AudioSource;
|
|
||||||
private _volume = 1;
|
|
||||||
public get volume() {
|
|
||||||
return this._volume;
|
|
||||||
}
|
|
||||||
public set volume(value: number) {
|
|
||||||
this._volume = value;
|
|
||||||
if (!this.mute) this.source.volume = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _mute = false;
|
|
||||||
public get mute() {
|
|
||||||
return this._mute;
|
|
||||||
}
|
|
||||||
public set mute(value: boolean) {
|
|
||||||
if (value) {
|
|
||||||
this.source.volume = 0;
|
|
||||||
} else {
|
|
||||||
this.source.volume = this.volume;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._mute = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public play() {
|
|
||||||
if (this.source.playing) {
|
|
||||||
this.source.playOneShot(this.source.clip, this.mute ? 0 : this.volume);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.source.play();
|
|
||||||
}
|
|
||||||
|
|
||||||
public stop() {
|
|
||||||
this.source.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ccclass('SoundManager')
|
|
||||||
export class SoundManager extends Singleton<SoundManager>('SoundManager') {
|
|
||||||
private _audioSourcesSfx: { [key: string]: SoundSource } = {};
|
|
||||||
private _audioSourceBgm: Howl;
|
|
||||||
|
|
||||||
private _isMute = false;
|
|
||||||
|
|
||||||
public toggleMute(): boolean {
|
|
||||||
this._isMute = !this._isMute;
|
|
||||||
this.setMute(this._isMute);
|
|
||||||
return this._isMute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public setMute(mute: boolean) {
|
|
||||||
this._isMute = mute;
|
|
||||||
this._audioSourceBgm.mute(this._isMute);
|
|
||||||
for (const key in this._audioSourcesSfx) {
|
|
||||||
this._audioSourcesSfx[key].mute = this._isMute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public playBGM(audio: AudioClip, opts?: { volume?: number; loop?: boolean; rate?: number }) {
|
|
||||||
this._audioSourceBgm?.stop();
|
|
||||||
this._audioSourceBgm = new globalThis.Howl({
|
|
||||||
src: audio.nativeUrl,
|
|
||||||
volume: opts?.volume || 1,
|
|
||||||
loop: opts?.loop || true,
|
|
||||||
rate: opts?.rate || 1,
|
|
||||||
mute: this._isMute,
|
|
||||||
});
|
|
||||||
this._audioSourceBgm.play();
|
|
||||||
}
|
|
||||||
|
|
||||||
public setPlayRateBGM(rate: number) {
|
|
||||||
this._audioSourceBgm.rate(rate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public playSfx(audioClip: AudioClip, opts?: { volume?: number; loop?: boolean }) {
|
|
||||||
let soundSource = this._audioSourcesSfx[audioClip.uuid];
|
|
||||||
|
|
||||||
if (soundSource) {
|
|
||||||
soundSource.volume = opts?.volume || 1;
|
|
||||||
soundSource.source.loop = !!opts?.loop;
|
|
||||||
if (soundSource.source.playing && !!opts?.loop) return;
|
|
||||||
soundSource.play();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
soundSource = new SoundSource();
|
|
||||||
const audioSource = new AudioSource('audioSourceSfx:' + audioClip.name);
|
|
||||||
soundSource.source = audioSource;
|
|
||||||
soundSource.source.playOnAwake = false;
|
|
||||||
soundSource.source.clip = audioClip;
|
|
||||||
soundSource.source.loop = !!opts?.loop;
|
|
||||||
soundSource.source.volume = opts?.volume || 1;
|
|
||||||
soundSource.mute = this._isMute;
|
|
||||||
this._audioSourcesSfx[audioClip.uuid] = soundSource;
|
|
||||||
soundSource.play();
|
|
||||||
}
|
|
||||||
|
|
||||||
public stopBgm() {
|
|
||||||
this._audioSourceBgm.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
public stopSfx(audioClip: AudioClip) {
|
|
||||||
this._audioSourcesSfx[audioClip.uuid].stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
public stopAllSfxLoop() {
|
|
||||||
for (const key in this._audioSourcesSfx) {
|
|
||||||
this._audioSourcesSfx[key].stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public findAudioSourcesSfx(audioClip: AudioClip): SoundSource {
|
|
||||||
return this._audioSourcesSfx[audioClip.uuid];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,4 @@
|
||||||
import {
|
import { _decorator, CCString, Color, Component, Label, Node, Sprite, SpriteFrame, Tween, tween, Vec3 } from 'cc';
|
||||||
_decorator,
|
|
||||||
CCString,
|
|
||||||
Color,
|
|
||||||
Component,
|
|
||||||
Label,
|
|
||||||
LabelOutline,
|
|
||||||
Node,
|
|
||||||
Sprite,
|
|
||||||
SpriteFrame,
|
|
||||||
Tween,
|
|
||||||
tween,
|
|
||||||
Vec3,
|
|
||||||
} from 'cc';
|
|
||||||
import Singleton from '../Singleton';
|
import Singleton from '../Singleton';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
@ -53,7 +40,7 @@ export class StickerManager extends Singleton<StickerManager>() {
|
||||||
this._label.string = string;
|
this._label.string = string;
|
||||||
this._label.color = opts?.color || new Color('#FFFF00');
|
this._label.color = opts?.color || new Color('#FFFF00');
|
||||||
this._label.node.setPosition(opts?.position || Vec3.ZERO);
|
this._label.node.setPosition(opts?.position || Vec3.ZERO);
|
||||||
this._label.getComponent(LabelOutline).color = opts?.outLineColor || new Color('#FF6600');
|
this._label.outlineColor = opts?.outLineColor || new Color('#FF6600');
|
||||||
|
|
||||||
Tween.stopAllByTarget(this._label.node);
|
Tween.stopAllByTarget(this._label.node);
|
||||||
tween(this._label.node)
|
tween(this._label.node)
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"ver": "1.2.0",
|
|
||||||
"importer": "directory",
|
|
||||||
"imported": true,
|
|
||||||
"uuid": "6ae044bb-dbd0-486b-83a1-ca4fbefbd254",
|
|
||||||
"files": [],
|
|
||||||
"subMetas": {},
|
|
||||||
"userData": {
|
|
||||||
"compressionType": {},
|
|
||||||
"isRemoteBundle": {}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"ver": "4.0.23",
|
|
||||||
"importer": "javascript",
|
|
||||||
"imported": true,
|
|
||||||
"uuid": "8bd3776f-9ce5-4924-b348-3fbada6f0239",
|
|
||||||
"files": [
|
|
||||||
".js"
|
|
||||||
],
|
|
||||||
"subMetas": {},
|
|
||||||
"userData": {
|
|
||||||
"isPlugin": true,
|
|
||||||
"executionScope": "global",
|
|
||||||
"loadPluginInWeb": true,
|
|
||||||
"loadPluginInNative": true,
|
|
||||||
"loadPluginInEditor": true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { _decorator, Button, Component, Node } from 'cc';
|
import { _decorator, Button, Component, Node } from 'cc';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
import AudioManager from '../Manager/AudioManager';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('ButonSound')
|
@ccclass('ButonSound')
|
||||||
|
@ -10,7 +10,7 @@ export class ButonSound extends Component {
|
||||||
private _mute: Node;
|
private _mute: Node;
|
||||||
|
|
||||||
public clickBtn() {
|
public clickBtn() {
|
||||||
const mute = SoundManager.instance.toggleMute();
|
const mute = AudioManager.toggleMute();
|
||||||
this._mute.active = mute;
|
this._mute.active = mute;
|
||||||
this._unMute.active = !mute;
|
this._unMute.active = !mute;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import { _decorator, AudioClip, Component, geometry, Label, Node, Prefab, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, AudioClip, Component, geometry, Label, Node, Prefab, Tween, tween, Vec3 } from 'cc';
|
||||||
import BEConnector from '../API/BEConnector';
|
import BEConnector from '../API/BEConnector';
|
||||||
|
import GameState from '../Enum/GameState';
|
||||||
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import ObjectPool from '../Pool/ObjectPool';
|
import ObjectPool from '../Pool/ObjectPool';
|
||||||
import Utilities from '../Utilities';
|
import Utilities from '../Utilities';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import GameState from '../Enum/GameState';
|
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('GameOverPanel')
|
@ccclass('GameOverPanel')
|
||||||
|
@ -155,13 +155,13 @@ export class GameOverPanel extends Component {
|
||||||
.start();
|
.start();
|
||||||
})
|
})
|
||||||
.start();
|
.start();
|
||||||
SoundManager.instance.playSfx(this._soundCollectCoinFx);
|
AudioManager.playSfx(this._soundCollectCoinFx);
|
||||||
await Utilities.delay(duration / 3);
|
await Utilities.delay(duration / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Utilities.waitUntil(() => this._pool.countActive == 0, 0.1);
|
await Utilities.waitUntil(() => this._pool.countActive == 0, 0.1);
|
||||||
this.yourScore.string = totalScore.toString();
|
this.yourScore.string = totalScore.toString();
|
||||||
SoundManager.instance.playSfx(this._soundScore);
|
AudioManager.playSfx(this._soundScore);
|
||||||
Tween.stopAllByTarget(this.yourScore.node);
|
Tween.stopAllByTarget(this.yourScore.node);
|
||||||
tween(this.yourScore.node)
|
tween(this.yourScore.node)
|
||||||
.set({ scale: Vec3.ONE })
|
.set({ scale: Vec3.ONE })
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { _decorator, AudioClip, clamp01, Color, Component, Label, lerp, Node, Sprite, Tween, tween, Vec3 } from 'cc';
|
import { _decorator, AudioClip, clamp01, Color, Component, Label, lerp, Node, Sprite, Tween, tween, Vec3 } from 'cc';
|
||||||
import { EventManger } from '../Manager/EventManger';
|
|
||||||
import GameEvent from '../Events/GameEvent';
|
|
||||||
import GameState from '../Enum/GameState';
|
import GameState from '../Enum/GameState';
|
||||||
|
import GameEvent from '../Events/GameEvent';
|
||||||
|
import AudioManager from '../Manager/AudioManager';
|
||||||
|
import { EventManger } from '../Manager/EventManger';
|
||||||
import { GameManager } from '../Manager/GameManager';
|
import { GameManager } from '../Manager/GameManager';
|
||||||
import { SoundManager } from '../Manager/SoundManager';
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('TimeUI')
|
@ccclass('TimeUI')
|
||||||
|
@ -41,7 +41,7 @@ export class TimeUI extends Component {
|
||||||
case GameState.Playing:
|
case GameState.Playing:
|
||||||
break;
|
break;
|
||||||
case GameState.GameOver:
|
case GameState.GameOver:
|
||||||
SoundManager.instance.stopSfx(this._countDownSound);
|
AudioManager.stopSfx(this._countDownSound);
|
||||||
break;
|
break;
|
||||||
case GameState.End:
|
case GameState.End:
|
||||||
break;
|
break;
|
||||||
|
@ -57,7 +57,7 @@ export class TimeUI extends Component {
|
||||||
|
|
||||||
private onWarningTime(warning: boolean) {
|
private onWarningTime(warning: boolean) {
|
||||||
if (warning) {
|
if (warning) {
|
||||||
SoundManager.instance.playSfx(this._countDownSound, { loop: true });
|
AudioManager.playSfx(this._countDownSound, { loop: true });
|
||||||
this._fill.color = Color.RED;
|
this._fill.color = Color.RED;
|
||||||
tween(this._timeIcon)
|
tween(this._timeIcon)
|
||||||
.to(0.05, { position: new Vec3(3.117, 3.177) })
|
.to(0.05, { position: new Vec3(3.117, 3.177) })
|
||||||
|
@ -72,7 +72,7 @@ export class TimeUI extends Component {
|
||||||
.start();
|
.start();
|
||||||
this._timeLabel.color = Color.RED;
|
this._timeLabel.color = Color.RED;
|
||||||
} else {
|
} else {
|
||||||
SoundManager.instance.stopSfx(this._countDownSound);
|
AudioManager.stopSfx(this._countDownSound);
|
||||||
Tween.stopAllByTarget(this._timeIcon);
|
Tween.stopAllByTarget(this._timeIcon);
|
||||||
this._fill.color = Color.GREEN;
|
this._fill.color = Color.GREEN;
|
||||||
this._timeLabel.color = Color.WHITE;
|
this._timeLabel.color = Color.WHITE;
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
"": {
|
"": {
|
||||||
"name": "PinBallTCC",
|
"name": "PinBallTCC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"crypto-es": "^2.1.0"
|
"crypto-es": "^2.1.0",
|
||||||
|
"howler": "^2.2.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/howler": "^2.2.11",
|
"@types/howler": "^2.2.11",
|
||||||
|
@ -91,6 +92,11 @@
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/howler": {
|
||||||
|
"version": "2.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz",
|
||||||
|
"integrity": "sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w=="
|
||||||
|
},
|
||||||
"node_modules/human-signals": {
|
"node_modules/human-signals": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
"version": "3.8.2"
|
"version": "3.8.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"crypto-es": "^2.1.0"
|
"crypto-es": "^2.1.0",
|
||||||
|
"howler": "^2.2.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/howler": "^2.2.11",
|
"@types/howler": "^2.2.11",
|
||||||
|
|
Loading…
Reference in New Issue