| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { Color, Material, MeshRenderer, RenderableComponent, SkeletalAnimation, _decorator } from "cc";
- import { CCComp } from "../../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
- import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
- import { PuppetViewController } from "./PuppetViewController";
- import { Puppet } from "../puppet";
- import { PuppetViewAnimator } from "./PuppetViewAnimator";
- const { ccclass, property } = _decorator;
- /** 关卡显示组件 */
- @ccclass('PuppetViewComp') // 定义为 Cocos Creator 组件
- @ecs.register('PuppetView', false) // 定义为 ECS 组件
- export class PuppetViewComp extends CCComp {
- @property({ type: SkeletalAnimation, tooltip: '角色动画' })
- ske: SkeletalAnimation = null!;
- // /** 角色动画资源管理 */
- // loader: PuppetViewLoader = null!;
- /** 角色动画规则管理 */
- animator: PuppetViewAnimator = null!;
- /** 角色控制器 */
- controller: PuppetViewController = null!;
- /** 视图层逻辑代码分离演示 */
- onLoad() {
- const puppet = this.ent as Puppet;
- // this.loader = this.node.addComponent(PuppetViewLoader);
- // this.node.emit("load", puppet);
- this.animator = this.ske.getComponent(PuppetViewAnimator)!;
- this.animator.puppet = puppet;
- this.controller = this.node.addComponent(PuppetViewController);
- this.controller.puppet = puppet;
- }
- protected lateUpdate(dt: number): void {
- const on = (this.ent as Puppet).PathFind?.canReach
- this.switchOutLine(on)
- }
- switchOutLine(on: boolean) {
- // 获取MeshRenderer组件
- let rendererComponet = this.node.getComponentInChildren(MeshRenderer) as RenderableComponent
- if (rendererComponet) {
- // 获取材质实例
- let materialIns = rendererComponet.material
- if (materialIns) {
- materialIns.setProperty('lineWidth', on ? 20 : 5);
- rendererComponet.material = materialIns
- }
- }
- }
- changeColor(color: string) {
- // return
- // 获取MeshRenderer组件
- let rendererComponet = this.node.getComponentInChildren(MeshRenderer) as RenderableComponent
- if (rendererComponet) {
- // 获取材质实例
- let materialIns = rendererComponet.material
- if (materialIns) {
- // 修改材质实例的颜色
- materialIns.setProperty('mainColor', new Color(color));
- rendererComponet.material = materialIns
- }
- }
- }
- reset() {
- // this.animator.destroy()
- // this.controller.destroy()
- this.node.destroy();
- }
- }
|