/* * @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 "../common/SingletonModuleComp"; import RoleSpineAnimator from "./RoleSpineAnimator"; const { ccclass, property } = _decorator; /** * RPG SPINE角色模型 */ @ccclass('RoleSpine') export class RoleSpine extends Component { @property({ type: Animation, tooltip: '动画控制器' }) animator: Animation = null!; atk_clip: AnimationClip = null!; idle_clip: AnimationClip = null!; move_clip: AnimationClip = null!; dead_clip: AnimationClip = null!; private spine!: sp.Skeleton; onLoad() { // 角色控制组件 this.initAnimator(); LayerUtil.setNodeLayer(LayerUtil.MAP, this.node); this.atk_clip = this.animator.clips[1]; this.idle_clip = this.animator.clips[0]; this.move_clip = this.animator.clips[2]; this.dead_clip = this.animator.clips[3]; let animation = this.animator.getComponent(Animation); animation.on(Animation.EventType.FINISHED, this.onAnimationEvent, this) } /** 初始化动画 */ protected initAnimator() { this.animator=this.node.getChildByName("hero").getComponent(Animation); console.log("role view comp init",this.animator); } onAnimationEvent(type: Animation.EventType, state: AnimationState){ // console.log("onAnimationEvent",type,state); if(type==Animation.EventType.FINISHED){ if(state.name==this.atk_clip.name){ this.idle(); } } } atk() { if(!this.animator.getState(this.atk_clip.name).isPlaying){ this.animator.play(this.atk_clip.name); } } magic() { } checkTouch(event: EventTouch): boolean { return false; } onDestroy() { this.node.destroy(); } walk() { } idle() { if(!this.animator.getState(this.idle_clip.name).isPlaying){ this.animator.play(this.idle_clip.name); } } }