import { _decorator, Component, Node, Prefab, instantiate, Vec3, Sprite, SpriteFrame, resources } from 'cc'; import { ConfigManager, WeaponConfig } from './ConfigManager'; const { ccclass, property } = _decorator; /** * 武器方块示例脚本 * 展示如何使用ConfigManager来创建带有武器配置的方块 */ @ccclass('WeaponBlockExample') export class WeaponBlockExample extends Component { @property({ type: Prefab, tooltip: '基础方块预制体' }) public blockPrefab: Prefab = null; @property({ type: Node, tooltip: '方块容器节点' }) public blockContainer: Node = null; private configManager: ConfigManager = null; start() { console.log('WeaponBlockExample start()'); // 获取配置管理器实例 this.configManager = ConfigManager.getInstance(); if (!this.configManager) { console.error('ConfigManager实例获取失败'); return; } // 等待配置加载完成后创建示例方块 this.scheduleOnce(() => { this.createExampleWeaponBlocks(); }, 2.0); // 增加等待时间 } // 创建示例武器方块 private createExampleWeaponBlocks() { console.log('开始创建示例武器方块'); if (!this.configManager) { console.error('配置管理器未初始化'); return; } if (!this.configManager.isConfigLoaded()) { console.warn('配置尚未加载完成,延迟创建'); this.scheduleOnce(() => { this.createExampleWeaponBlocks(); }, 1.0); return; } // 检查必要的组件 if (!this.blockPrefab) { console.error('方块预制体未设置,请在编辑器中设置blockPrefab'); return; } console.log('开始创建武器方块...'); // 创建几个不同稀有度的武器方块 this.createWeaponBlock('common', new Vec3(-200, 0, 0)); this.createWeaponBlock('uncommon', new Vec3(-100, 0, 0)); this.createWeaponBlock('rare', new Vec3(0, 0, 0)); this.createWeaponBlock('epic', new Vec3(100, 0, 0)); // 创建随机武器方块 this.createRandomWeaponBlock(new Vec3(200, 0, 0)); } // 创建指定稀有度的武器方块 private createWeaponBlock(rarity: string, position: Vec3) { const weaponConfig = this.configManager.getRandomWeapon(rarity); if (!weaponConfig) { console.warn(`无法获取稀有度为 ${rarity} 的武器配置`); return; } this.createBlockWithWeapon(weaponConfig, position); } // 创建随机武器方块 private createRandomWeaponBlock(position: Vec3) { const weaponConfig = this.configManager.getRandomWeapon(); if (!weaponConfig) { console.warn('无法获取随机武器配置'); return; } this.createBlockWithWeapon(weaponConfig, position); } // 根据武器配置创建方块 private createBlockWithWeapon(weaponConfig: WeaponConfig, position: Vec3) { if (!this.blockPrefab) { console.error('方块预制体未设置'); return; } // 实例化方块 const blockNode = instantiate(this.blockPrefab); if (!blockNode) { console.error('方块实例化失败'); return; } // 设置位置 blockNode.setPosition(position); // 添加到容器 if (this.blockContainer) { this.blockContainer.addChild(blockNode); } else { this.node.addChild(blockNode); } // 设置方块的武器配置 this.setupBlockWeapon(blockNode, weaponConfig); console.log(`创建武器方块: ${weaponConfig.name} (${weaponConfig.rarity})`); } // 设置方块的武器配置 private setupBlockWeapon(blockNode: Node, weaponConfig: WeaponConfig) { // 暂时不添加WeaponComponent,避免组件重复问题 // 直接在节点上存储武器配置数据 (blockNode as any).weaponConfig = weaponConfig; // 设置方块外观 this.setupBlockVisual(blockNode, weaponConfig); // 设置方块名称 blockNode.name = `WeaponBlock_${weaponConfig.id}`; } // 设置方块外观 private setupBlockVisual(blockNode: Node, weaponConfig: WeaponConfig) { const spriteComponent = blockNode.getComponent(Sprite); if (!spriteComponent) { console.warn('方块节点没有Sprite组件'); return; } // 根据稀有度设置颜色 const rarityColors = { 'common': { r: 255, g: 255, b: 255, a: 255 }, // 白色 'uncommon': { r: 0, g: 255, b: 0, a: 255 }, // 绿色 'rare': { r: 0, g: 100, b: 255, a: 255 }, // 蓝色 'epic': { r: 160, g: 32, b: 240, a: 255 } // 紫色 }; const color = rarityColors[weaponConfig.rarity] || rarityColors['common']; spriteComponent.color = spriteComponent.color.set(color.r, color.g, color.b, color.a); // 尝试加载武器图标 this.loadWeaponSprite(spriteComponent, weaponConfig); } // 加载武器图标 private loadWeaponSprite(spriteComponent: Sprite, weaponConfig: WeaponConfig) { // 默认使用1x1尺寸的图标 const spritePath = weaponConfig.visualConfig.weaponSprites['1x1']; if (!spritePath) { console.warn(`武器 ${weaponConfig.name} 没有1x1尺寸的图标`); return; } // 加载图标资源 resources.load(spritePath, SpriteFrame, (err, spriteFrame) => { if (err) { console.warn(`加载武器图标失败: ${spritePath}`, err); return; } spriteComponent.spriteFrame = spriteFrame; }); } // 获取方块的武器配置(供其他脚本调用) public static getBlockWeaponConfig(blockNode: Node): WeaponConfig | null { return (blockNode as any).weaponConfig || null; } // 创建指定ID的武器方块 public createWeaponBlockById(weaponId: string, position: Vec3): Node | null { const weaponConfig = this.configManager.getWeaponById(weaponId); if (!weaponConfig) { console.warn(`找不到ID为 ${weaponId} 的武器配置`); return null; } this.createBlockWithWeapon(weaponConfig, position); return null; // 实际项目中应该返回创建的节点 } // 获取所有可用的武器ID列表 public getAvailableWeaponIds(): string[] { if (!this.configManager || !this.configManager.isConfigLoaded()) { return []; } return this.configManager.getAllWeapons().map(weapon => weapon.id); } // 获取指定稀有度的武器数量 public getWeaponCountByRarity(rarity: string): number { if (!this.configManager || !this.configManager.isConfigLoaded()) { return 0; } return this.configManager.getWeaponsByRarity(rarity).length; } }