85 lines
2.6 KiB
TypeScript

import { Action } from "./Action";
import { ActionWithType } from "./ActionWithType";
import { ActionWithType2 } from "./ActionWithType2";
const {ccclass, property} = cc._decorator;
enum CustomType {
Ex1, Ex2
}
class CustomEvent extends ActionWithType<CustomType, number> {}
class CustomEvent2 extends ActionWithType2<CustomType, number> {}
@ccclass
export default class NewClass extends cc.Component {
callback: Action<number> = new Action<number>();
customCallback: CustomEvent = new CustomEvent();
customCallback2: CustomEvent2 = new CustomEvent2();
private num: number = 0;
start () {
this.callback.AddCallback(this.CB, this);
this.callback.AddCallbackOnce(this.OnceCB, this);
this.customCallback.AddCallback(CustomType.Ex1, this.CBType, this);
this.customCallback.AddCallbackOnce(CustomType.Ex2, this.OnceCBType, this);
this.customCallback2.AddCallback(CustomType.Ex2, this.CBTypeAllin1, this);
this.customCallback2.AddCallbackOnce(CustomType.Ex1, this.CBTypeAllin1, this);
}
DispatchClick() {
this.num++;
this.callback.DispatchCallback(this.num);
this.customCallback.DispatchCallback(CustomType.Ex1, this.num);
this.customCallback.DispatchCallback(CustomType.Ex2, this.num);
this.customCallback2.DispatchCallback(CustomType.Ex1, this.num);
this.customCallback2.DispatchCallback(CustomType.Ex2, this.num);
}
RemoveEventClick() {
this.callback.RemoveByCallback(this.CB);
// this.callback.RemoveByCallback(this.OnceCB);
// this.callback.RemoveByBindTarget(this);
// this.callback.RemoveAll();
// this.callbackWithType.RemoveByCallback(this.CBType);
// this.callbackWithType.RemoveByCallback(this.OnceCBType);
this.customCallback.RemoveByType(CustomType.Ex1);
// this.callbackWithType.RemoveByType(CustomType.Ex2);
// this.callbackWithType.RemoveByBindTarget(this);
// this.callbackWithType.RemoveAll();
}
OnceCB(x: number) {
cc.log(`OnceCB [${this.num}]`);
}
CB(x: number) {
cc.log(`CB [${this.num}]`);
}
OnceCBType(x: number) {
cc.log(`OnceCBType [${this.num}]`);
}
CBType(x: number) {
cc.log(`CBType [${this.num}]`);
}
CBTypeAllin1(type: CustomType,x: number) {
// switch (type) {
// case CustomType.Ex1:
// break;
// case CustomType.Ex2:
// break;
// }
cc.log(`CBTypeAllin1 [${CustomType[type]}][${this.num}]`);
}
}