94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
/*
|
||
* @Author: dgflash
|
||
* @Date: 2022-08-04 15:08:35
|
||
* @LastEditors: dgflash
|
||
* @LastEditTime: 2022-08-04 15:26:26
|
||
*/
|
||
import { Color, Component, EventTouch, sp, Vec3, _decorator ,Animation, AnimationClip, AnimationState,} from "cc";
|
||
import { LayerUtil } from "../../../../extensions/oops-plugin-framework/assets/core/utils/LayerUtil";
|
||
import { smc } from "../../../script/game/common/SingletonModuleComp";
|
||
|
||
const { ccclass, property } = _decorator;
|
||
|
||
/**
|
||
* RPG SPINE角色模型
|
||
*/
|
||
@ccclass('HeroSpine')
|
||
export class HeroSpine extends Component {
|
||
@property(Animation)
|
||
animator: Animation = null!;
|
||
idle_clip: AnimationClip = null!;
|
||
atk_clip: AnimationClip = null!;
|
||
move_clip: AnimationClip = null!;
|
||
default_clip:string = "";
|
||
|
||
onLoad() {
|
||
// 角色控制组件
|
||
this.initAnimator();
|
||
LayerUtil.setNodeLayer(LayerUtil.MAP, this.node);
|
||
this.idle_clip = this.animator.clips[0];
|
||
this.atk_clip = this.animator.clips[1];
|
||
this.move_clip = this.animator.clips[2];
|
||
this.default_clip=this.move_clip.name;
|
||
let animation = this.animator.getComponent(Animation);
|
||
animation.on(Animation.EventType.FINISHED, this.onAnimationEvent, this)
|
||
}
|
||
protected start(): void {
|
||
this.move();
|
||
}
|
||
/** 初始化动画 */
|
||
protected initAnimator() {
|
||
this.animator=this.node.getChildByName("anm").getComponent(Animation);
|
||
|
||
// console.log("mon spine init",this.animator);
|
||
}
|
||
in_playing(){
|
||
if(this.animator.getState(this.atk_clip.name).isPlaying) return true;
|
||
if(this.animator.getState(this.idle_clip.name).isPlaying) return true;
|
||
if(this.animator.getState(this.move_clip.name).isPlaying) return true;
|
||
return false;
|
||
}
|
||
onAnimationEvent(type: Animation.EventType, state: AnimationState){
|
||
if(type==Animation.EventType.FINISHED){
|
||
// console.log("animator end",state.name);
|
||
if(state.name==this.atk_clip.name){
|
||
this.default();
|
||
}
|
||
}
|
||
}
|
||
change_default(value:string){
|
||
// console.log("change default",value);
|
||
this.default_clip=value;
|
||
}
|
||
default() {
|
||
if(!this.in_playing()){
|
||
// console.log("do default");
|
||
this.animator.play(this.default_clip);
|
||
}
|
||
|
||
}
|
||
idle(){
|
||
if(!this.in_playing()){
|
||
console.log("do idle");
|
||
this.animator.play(this.idle_clip.name);
|
||
}
|
||
}
|
||
atk() {
|
||
// console.log("do atk");
|
||
this.animator.play(this.atk_clip.name);
|
||
}
|
||
|
||
|
||
|
||
move(){
|
||
if(!this.animator.getState(this.move_clip.name).isPlaying) {
|
||
console.log("doing move");
|
||
this.animator.play(this.move_clip.name);
|
||
}
|
||
}
|
||
onDestroy() {
|
||
this.node.destroy();
|
||
}
|
||
|
||
}
|