import { Color, MeshRenderer, RenderableComponent, SkeletalAnimation, _decorator } from "cc"; import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { CCComp } from "../../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { Subway } from "../Subway"; import { SubwayViewAnimator } from "./SubwayViewAnimator"; import { SubwayViewController } from "./SubwayViewController"; import { smc } from "../../common/SingletonModuleComp"; import { Puppet } from "../../puppet/puppet"; import { PuppetModelComp } from "../../puppet/model/PuppetModelComp"; import { PuppetAnimatorType } from "../../puppet/model/PuppetEnum"; const { ccclass, property } = _decorator; /** 地铁显示组件 */ @ccclass('SubwayViewComp') // 定义为 Cocos Creator 组件 @ecs.register('SubwayView', false) // 定义为 ECS 组件 export class SubwayViewComp extends CCComp { @property({ type: SkeletalAnimation, tooltip: '角色动画' }) ske: SkeletalAnimation = null!; /** 地铁动画规则管理 */ animator: SubwayViewAnimator = null!; /** 地铁控制器 */ controller: SubwayViewController = null!; /** 视图层逻辑代码分离演示 */ onLoad() { const subway = this.ent as Subway; this.animator = this.ske.getComponent(SubwayViewAnimator)!; this.animator.subway = subway; this.controller = this.node.addComponent(SubwayViewController); this.controller.subway = subway; } createPuppet() { const v = this.ent as Subway; const account = smc.initialize.account const puppet = ecs.getEntity(Puppet) const puppetModel = puppet.get(PuppetModelComp) puppetModel.color = v.SubwayModel.color puppetModel.withColider = true puppet.load(this.node, v.SubwayModel.color, this.node.position.clone(),account.AccountModel.skin); v.addChild(puppet) puppet.PuppetView.animator.toRight() puppet.PuppetView.animator.playAni(PuppetAnimatorType.Run) puppet.PuppetView.animator.scale() } reset() { this.node.destroy(); } }