/* * @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(); } }