/** * @file MapViewScene.ts * @description 地图场景管理器(负责图层持有与场景生命周期) * * 职责: * 1. 持有场景中的各个显示图层引用: * - camera:场景摄像机 * - layer:通用容器层 * - mapLayer:地图背景层(MapLayer) * - floorLayer:地面装饰层 * - entityLayer:实体层(EntityLayer,承载英雄/怪物节点) * - SkillLayer:技能效果层 * 2. 提供 init() 初始化入口和 reset() 清理入口。 * 3. 控制摄像机是否跟随玩家(isFollowPlayer)。 * * 关键设计: * - ratio:2D 到 3D 的位置比例值(预留,用于混合渲染模式)。 * - reset() 清除所有图层子节点,恢复初始状态。 * - onLoad() 时 enabled=false,等待外部 init() 后启动。 * * 依赖: * - EntityLayer —— 实体图层(管理英雄/怪物的排序与清理) * - SkillLayer —— 技能图层 * - MapLayer —— 地图背景图层 */ import { Camera, CCBoolean, Component, EventTouch, Node, screen, Size, Texture2D, UITransform, Vec2, Vec3, view, _decorator } from "cc"; import { oops } from "../../../../../extensions/oops-plugin-framework/assets/core/Oops"; import EntityLayer from "./map/layer/EntityLayer"; import SkillLayer from "./map/layer/SkillLayer"; import MapLayer from "./map/layer/MapLayer"; const { ccclass, property } = _decorator; /** * MapViewScene —— 地图场景管理器 * * 持有场景中所有图层的引用,提供初始化和清理接口。 * 由 MapViewComp 在 start() 时获取引用。 */ @ccclass('MapViewScene') export class MapViewScene extends Component { /** 场景摄像机(可选,用于跟随角色) */ @property(Camera) public camera: Camera | null = null; /** 通用容器图层节点 */ @property(Node) public layer: Node | null = null; /** 地图背景图层(管理背景图片的尺寸和清理) */ @property(MapLayer) public mapLayer: MapLayer | null = null; /** 地面装饰图层节点 */ @property(Node) public floorLayer: Node | null = null; /** 实体图层(HERO / MON 等游戏实体的父容器) */ @property(EntityLayer) public entityLayer: EntityLayer | null = null; /** 技能效果图层 */ @property(SkillLayer) public SkillLayer: SkillLayer | null = null; /** 是否启用摄像机跟随玩家 */ @property(CCBoolean) public isFollowPlayer: boolean = true; /** 2D→3D 位置比例值(预留,混合渲染时使用) */ ratio: Vec2 = new Vec2(); /** 加载时禁用自身,等待 init() 手动启用 */ onLoad() { this.enabled = false; } start() { } /** * 重置场景:清除各图层的子节点和数据。 * 用于关卡切换或任务结束时恢复初始状态。 */ private reset() { this.floorLayer!.removeAllChildren(); // 清除地面显示对象 this.entityLayer!.clear(); // 清除游戏实体对象 this.mapLayer!.clear(); // 清除地图背景 } /** 场景初始化(预留扩展) */ public init() { } /** 帧更新(预留摄像机跟随等逻辑) */ update(dt: number) { } }