123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { Label, Prefab, instantiate, Node, math } from "cc";
- import { Layout_UI_Notify } from "./Layout_UI_Notify";
- import { GameUILayers, gui, ui_base } from "../../core/ui/ui";
- import { ModuleDef } from "../../Scripts/ModuleDef";
- class NotifyInfo {
- private static readonly time: number = 2;
- private static readonly init_y: number = 120;
- private static readonly up_y: number = 80;//上升一格
- private static readonly move_speed: number = 880;//向上移动速度
- private static readonly sc_state0: number = 0.8;//变小大小
- private static readonly sc_state0_time: number = 0.22;
- private static readonly sc_state1: number = 1.2;//变大大小
- private static readonly sc_state1_time: number = 0.41;
- private static readonly sc_state2: number = 1;//正常大小
- private time: number;
- private node: Node;
- private state: number;
- private _state_time: number = 0;
- public constructor(node: Node, parent: Node, txt: string) {
- this.time = NotifyInfo.time;
- this.node = node;
- this.state = 0;
- this._state_time = 0;
- let label = node.getComponentInChildren(Label);
- label.string = txt;
- node.parent = parent;
- node.setPosition(0, NotifyInfo.init_y, 0);
- node.setScale(NotifyInfo.sc_state0, NotifyInfo.sc_state0, NotifyInfo.sc_state0);
- node.active = true;
- }
- public up(): void {
- // this.node.setPosition(this.node.position.x, this.node.position.y + NotifyInfo.up_y, this.node.position.z);
- }
- public run(dt: number): boolean {
- this.time -= dt;
- if (this.time <= 0) {
- this.node.destroy();
- this.node = null;
- return true;
- } else if (this.time < 0.5) {
- // this.node.setPosition(this.node.position.x, this.node.position.y + NotifyInfo.move_speed * dt, this.node.position.z);
- } else {
- if (this.state === 0) {
- this._state_time += dt;
- let ratio = this._state_time / NotifyInfo.sc_state0_time;
- if (ratio >= 1) {
- this.state = 1;
- this._state_time = 0;
- this.node.setScale(NotifyInfo.sc_state1, NotifyInfo.sc_state1, NotifyInfo.sc_state1);
- } else {
- let sc = math.lerp(NotifyInfo.sc_state0, NotifyInfo.sc_state1, ratio);
- this.node.setScale(sc, sc, sc);
- }
- } else if (this.state === 1) {
- this._state_time += dt;
- let ratio = this._state_time / NotifyInfo.sc_state1_time;
- if (ratio >= 1) {
- this.state = 2;
- this._state_time = 0;
- this.node.setScale(NotifyInfo.sc_state2, NotifyInfo.sc_state2, NotifyInfo.sc_state2);
- } else {
- let sc = math.lerp(NotifyInfo.sc_state1, NotifyInfo.sc_state2, ratio);
- this.node.setScale(sc, sc, sc);
- }
- }
- }
- return false;
- }
- }
- export class UINotify extends ui_base {
- constructor() {
- super(ModuleDef.BASIC, 'ui_notify/UI_Notify', GameUILayers.NOTICE, Layout_UI_Notify);
- }
- static async show(msg: string) {
- let ui = gui.get(UINotify);
- if (!ui) ui = await gui.show(UINotify);
- ui.newNotify(msg);
- }
- private _info_prefab: Prefab;
- private notifys: NotifyInfo[] = [];
- protected onCreated(): void {
- let layout = this.getLayout<Layout_UI_Notify>();
- this._info_prefab = layout.info_prefab;
- }
- public newNotify(txt: string) {
- let info = new NotifyInfo(instantiate(this._info_prefab), this.node, txt);
- for (var i = this.notifys.length - 1; i >= 0; i--)this.notifys[i].up();
- this.notifys.push(info);
- }
- protected onUpdate(dt?: number): void {
- for (var i = this.notifys.length - 1; i >= 0; i--)if (this.notifys[i].run(dt)) this.notifys.splice(i, 1);
- }
- dispose(): void {
- this._info_prefab = null;
- }
- }
|