地图上的地块配置完成

This commit is contained in:
DESKTOP-J7I1C4E\a9350 2024-03-18 20:10:09 +08:00
parent 3b41a3fcd0
commit 1ec2f0afc0
4 changed files with 361 additions and 97 deletions

View File

@ -1,5 +1,5 @@
import { _decorator, Component, Node } from 'cc'; import { _decorator, Component, Node } from 'cc';
import { MapTileType } from './MapTileData'; import { MapTileType, MapTileTypes } from './MapTileData';
import { MapTileNode } from './MapTileNode'; import { MapTileNode } from './MapTileNode';
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@ -15,25 +15,13 @@ export class BoardRoot extends Component {
/// 初始化 地图快 /// 初始化 地图快
initMapTile(){ initMapTile(){
// 从枚举类型 添加所有地块
const types = Object.values(MapTileType);
console.log(types);
types.forEach((a,b) => { // 从枚举类型 添加所有地块
const node = new MapTileNode(b); MapTileTypes.forEach((type) => {
const node = new MapTileNode(type);
this.node.addChild(node); this.node.addChild(node);
}); });
// for( let i = 0; i < types.length ; i++){
// const type = types[i];
// const node = new MapTileNode(type);
// this.node.addChild(node);
// }
// console.log('地图块初始化完成');
// console.log(this.node);
} }
update(deltaTime: number) { update(deltaTime: number) {

View File

@ -30,7 +30,8 @@ export class MapTileController extends Component {
/// 进入选择地下城状态,海上列车选择,决斗场选择 /// 进入选择地下城状态,海上列车选择,决斗场选择
start() { start() {
this.node.setPosition(0,0); const location = this._tileData.location;
this.node.setPosition(location.x,location.y);
} }
update(deltaTime: number) {} update(deltaTime: number) {}

View File

@ -1,10 +1,9 @@
import { Vec2, v2 } from "cc"; import { Vec2, v2 } from "cc";
import { NpkImage } from "../Tool/NPKImage"; import { NpkImage } from "../Tool/NPKImage";
/// 地块类型 /// 地块类型
export enum MapTileType { export enum MapTileType {
/// 赫顿玛尔 /// 赫顿玛尔
HeDunMaEr, HeDunMaEr = 0,
/// 时间广场 /// 时间广场
ShiJianGuangChang, ShiJianGuangChang,
/// 兽人峡谷 /// 兽人峡谷
@ -18,14 +17,14 @@ export enum MapTileType {
/// 月光酒馆 /// 月光酒馆
YueGuangJiuGuan, YueGuangJiuGuan,
/// 哈林的命运硬币(左边)
HaLinMingYunYinBi,
/// 亡命杀阵 /// 亡命杀阵
WangMingShaZhen, WangMingShaZhen,
/// 皇家娱乐 /// 皇家娱乐
HuangJaiYuLe, HuangJaiYuLe,
/// 黑暗都市 /// 黑暗都市
AnHeiDuShi, HeiAnDuShi,
/// 哈林的命运硬币(左边)
HaLinMingYunYinBi,
/// 第九隔离区 /// 第九隔离区
DiJiuGeLiQu, DiJiuGeLiQu,
@ -44,18 +43,72 @@ export enum MapTileType {
/// 海上列车 /// 海上列车
HaiShangLieChe, HaiShangLieChe,
/// 切斯特小镇的命运硬币(右边)
XiaoZhenMingYunYinBi,
/// 暗黑神殿 /// 暗黑神殿
AnHeiShenDian, AnHeiShenDian,
/// 痛苦地下城 /// 痛苦地下城
TongKuDiXiaChen, TongKuDiXiaChen,
/// 无底坑道 /// 无底坑道
WuDiKenDao, WuDiKenDao,
/// 切斯特小镇的命运硬币(右边)
XiaoZhenMingYunYinBi,
/// 记忆之地 /// 记忆之地
JiYiZhiDi, JiYiZhiDi,
} }
export const MapTileTypes = [
/// 赫顿玛尔
MapTileType.HeDunMaEr,
/// 时间广场
MapTileType.ShiJianGuangChang,
/// 兽人峡谷
MapTileType.ShouRenXiaGu,
/// 超时空漩涡
MapTileType.ChaoShiKongXuanWo,
/// 恐怖的栖息地
MapTileType.KongBuDeQiXiDi,
/// 红色魔女之森
MapTileType.HongSeMoNvZhiSen,
/// 月光酒馆
MapTileType.YueGuangJiuGuan,
/// 亡命杀阵
MapTileType.WangMingShaZhen,
/// 皇家娱乐
MapTileType.HuangJaiYuLe,
/// 黑暗都市
MapTileType.HeiAnDuShi,
/// 哈林的命运硬币(左边)
MapTileType.HaLinMingYunYinBi,
/// 第九隔离区
MapTileType.DiJiuGeLiQu,
/// 决斗场
MapTileType.JueDouChang,
/// 腐坏街道
MapTileType.FuHuaiJieDao,
/// 溢血的地下城
MapTileType.YiXueDeDiXiaChen,
/// 普雷·伊西斯
MapTileType.PuLeiYiXiSi,
/// 沉重的礼拜堂
MapTileType.ChenZhongDeLiBaiTang,
/// 螺旋王国
MapTileType.LuoXuanWangGuo,
/// 海上列车
MapTileType.HaiShangLieChe,
/// 暗黑神殿
MapTileType.AnHeiShenDian,
/// 痛苦地下城
MapTileType.TongKuDiXiaChen,
/// 无底坑道
MapTileType.WuDiKenDao,
/// 切斯特小镇的命运硬币(右边)
MapTileType.XiaoZhenMingYunYinBi,
/// 记忆之地
MapTileType.JiYiZhiDi,
];
/// 地块方向 /// 地块方向
export enum MapTileDirection { export enum MapTileDirection {
/// 横 /// 横
@ -74,8 +127,6 @@ export class MapTileData {
npkPath: NpkImage; npkPath: NpkImage;
/// 地块背景index /// 地块背景index
backgroundIndex: number; backgroundIndex: number;
/// 地块名称图片index
nameIndex: number;
/// 地块方向 /// 地块方向
direction: MapTileDirection; direction: MapTileDirection;
/// 怪物相关数据 /// 怪物相关数据
@ -87,87 +138,272 @@ export class MapTileData {
/// 占领许可 /// 占领许可
occupyLicense: boolean; occupyLicense: boolean;
constructor({ constructor({
/// 坐标 /// 坐标
location, location,
/// 背景index /// 背景index
backgroundIndex, backgroundIndex,
/// 名称index /// 地块方向
nameIndex, direction,
/// 地块方向 /// 占领许可
direction, occupyLicense,
/// 占领许可 /// 列车选择许可
occupyLicense = true, trainsSelectLicense,
/// 列车选择许可 /// 决斗场选择许可
trainsSelectLicense, duelSelectLicense,
/// 决斗场选择许可 }: {
duelSelectLicense, location: Vec2;
}: { backgroundIndex?: number;
location: Vec2; direction: MapTileDirection;
backgroundIndex?: number; occupyLicense?: boolean;
nameIndex?: number; trainsSelectLicense?: boolean;
direction: MapTileDirection; duelSelectLicense?: boolean;
occupyLicense?: boolean; }) {
trainsSelectLicense: boolean; this.location = location;
duelSelectLicense: boolean; this.npkPath = NpkImage.board;
}) { this.backgroundIndex = backgroundIndex;
this.location = location; this.direction = direction;
this.npkPath = NpkImage.board;
this.backgroundIndex = backgroundIndex;
this.nameIndex = nameIndex;
this.direction = direction;
this.trainsSelectLicense = trainsSelectLicense; this.trainsSelectLicense = trainsSelectLicense ?? true;
this.duelSelectLicense = duelSelectLicense; this.duelSelectLicense = duelSelectLicense ?? true;
this.occupyLicense = occupyLicense; this.occupyLicense = occupyLicense ?? true;
} }
} }
export class MapTileFactory { export class MapTileFactory {
static getData(type: MapTileType): MapTileData{ static getData(type: MapTileType): MapTileData {
// const tts = type as MapTileType;
// const ss = tts == MapTileType.HeDunMaEr;
// const nn = Number(type);
// const aa = +type;
// const tttt: MapTileType = MapTileType.HeDunMaEr;
switch (type) { switch (type) {
/// 赫顿玛尔 /// 赫顿玛尔
case MapTileType.HeDunMaEr: case MapTileType.HeDunMaEr:
console.log(type);
return MapTileFactory.HeDunMaErData; return MapTileFactory.HeDunMaErData;
/// 时间广场 /// 时间广场
case MapTileType.ShiJianGuangChang: case MapTileType.ShiJianGuangChang:
console.log(type); return MapTileFactory.ShiJianGuangChangData;
return MapTileFactory.ShiJianGuangChangData; /// 兽人峡谷
case MapTileType.ShouRenXiaGu:
return MapTileFactory.ShouRenXiaGuData;
/// 超时空漩涡
case MapTileType.ChaoShiKongXuanWo:
return MapTileFactory.ChaoShiKongXuanWoData;
/// 恐怖的栖息地
case MapTileType.KongBuDeQiXiDi:
return MapTileFactory.KongBuDeQiXiDiData;
/// 红色魔女之森
case MapTileType.HongSeMoNvZhiSen:
return MapTileFactory.HongSeMoNvZhiSenData;
/// 月光酒馆
case MapTileType.YueGuangJiuGuan:
return MapTileFactory.YueGuangJiuGuanData;
/// 亡命杀镇子
case MapTileType.WangMingShaZhen:
return MapTileFactory.WangMingShaZhenData;
/// 皇家娱乐
case MapTileType.HuangJaiYuLe:
return MapTileFactory.HuangJaiYuLeData;
/// 黑暗都市
case MapTileType.HeiAnDuShi:
return MapTileFactory.HeiAnDuShiData;
/// 哈林的命运硬币(左边)
case MapTileType.HaLinMingYunYinBi:
return MapTileFactory.HaLinMingYunYinBiData;
/// 第九隔离区
case MapTileType.DiJiuGeLiQu:
return MapTileFactory.DiJiuGeLiQuData;
/// 决斗场
case MapTileType.JueDouChang:
return MapTileFactory.JueDouChangData;
/// 腐坏街道
case MapTileType.FuHuaiJieDao:
return MapTileFactory.FuHuaiJieDaoData;
/// 溢血的地下城
case MapTileType.YiXueDeDiXiaChen:
return MapTileFactory.YiXueDeDiXiaChenData;
/// 普雷·伊西斯
case MapTileType.PuLeiYiXiSi:
return MapTileFactory.PuLeiYiXiSiData;
/// 沉重的礼拜堂
case MapTileType.ChenZhongDeLiBaiTang:
return MapTileFactory.ChenZhongDeLiBaiTangData;
/// 螺旋王国
case MapTileType.LuoXuanWangGuo:
return MapTileFactory.LuoXuanWangGuoData;
/// 海上列车
case MapTileType.HaiShangLieChe:
return MapTileFactory.HaiShangLieCheData;
/// 暗黑神殿
case MapTileType.AnHeiShenDian:
return MapTileFactory.AnHeiShenDianData;
/// 痛苦地下城
case MapTileType.TongKuDiXiaChen:
return MapTileFactory.TongKuDiXiaChenData;
/// 无底坑道
case MapTileType.WuDiKenDao:
return MapTileFactory.WuDiKenDaoData;
/// 切斯特小镇的命运硬币(右边)
case MapTileType.XiaoZhenMingYunYinBi:
return MapTileFactory.XiaoZhenMingYunYinBiData;
/// 记忆之地
case MapTileType.JiYiZhiDi:
return MapTileFactory.JiYiZhiDiData;
} }
console.log(type);
} }
// 赫顿玛尔 // 赫顿玛尔
private static HeDunMaErData = new MapTileData({ private static HeDunMaErData = new MapTileData({
location: v2(507, -500), location: v2(475, -448),
direction: MapTileDirection.nook, direction: MapTileDirection.nook,
trainsSelectLicense: true,
duelSelectLicense: false, duelSelectLicense: false,
occupyLicense: false, occupyLicense: false,
}); });
/// 时间广场 /// 时间广场 (55,34)
private static ShiJianGuangChangData = new MapTileData({ private static ShiJianGuangChangData = new MapTileData({
location: v2(507, -500), location: v2(420, -414),
backgroundIndex: 1,
direction: MapTileDirection.horizontal, direction: MapTileDirection.horizontal,
trainsSelectLicense: true,
duelSelectLicense: true,
occupyLicense: true,
}); });
/// 兽人峡谷 (52,34)
private static ShouRenXiaGuData = new MapTileData({
location: v2(368, -380),
direction: MapTileDirection.horizontal,
});
/// 超时空漩涡 (53,34)
private static ChaoShiKongXuanWoData = new MapTileData({
location: v2(315, -346),
backgroundIndex: 32,
direction: MapTileDirection.horizontal,
});
/// 恐怖的栖息地 (52,34)
private static KongBuDeQiXiDiData = new MapTileData({
location: v2(262, -312),
direction: MapTileDirection.horizontal,
});
/// 红色魔女之森 (52,34)
private static HongSeMoNvZhiSenData = new MapTileData({
location: v2(209, -278),
direction: MapTileDirection.horizontal,
});
// 月光酒馆(69,44)
private static YueGuangJiuGuanData = new MapTileData({
location: v2(140, -234),
direction: MapTileDirection.nook,
duelSelectLicense: false,
occupyLicense: false,
});
/// 亡命杀镇 (53,34)
private static WangMingShaZhenData = new MapTileData({
location: v2(209, -198),
direction: MapTileDirection.vertical,
});
/// 皇家娱乐(53,34)
private static HuangJaiYuLeData = new MapTileData({
location: v2(262, -164),
direction: MapTileDirection.vertical,
});
/// 黑暗都市
private static HeiAnDuShiData = new MapTileData({
location: v2(315, -130),
direction: MapTileDirection.vertical,
});
/// 哈林的命运硬币(左边)
private static HaLinMingYunYinBiData = new MapTileData({
location: v2(368, -96),
backgroundIndex: 34,
direction: MapTileDirection.vertical,
duelSelectLicense: false,
occupyLicense: false,
});
/// 第九隔离区
private static DiJiuGeLiQuData = new MapTileData({
location: v2(421, -62),
direction: MapTileDirection.vertical,
});
// 决斗场(54,44)
private static JueDouChangData = new MapTileData({
location: v2(475, -18),
direction: MapTileDirection.nook,
duelSelectLicense: false,
occupyLicense: false,
});
/// 腐坏街道(53,34)
private static FuHuaiJieDaoData = new MapTileData({
location: v2(544, -62),
direction: MapTileDirection.horizontal,
});
/// 溢血的地下城(53,34)
private static YiXueDeDiXiaChenData = new MapTileData({
location: v2(597, -96),
direction: MapTileDirection.horizontal,
});
/// 普雷·伊西斯
private static PuLeiYiXiSiData = new MapTileData({
location: v2(650, -130),
backgroundIndex: 33,
direction: MapTileDirection.horizontal,
});
/// 沉重的礼拜堂
private static ChenZhongDeLiBaiTangData = new MapTileData({
location: v2(703, -164),
direction: MapTileDirection.horizontal,
});
/// 螺旋王国
private static LuoXuanWangGuoData = new MapTileData({
location: v2(756, -198),
direction: MapTileDirection.horizontal,
});
// 海上列车(69,44)
private static HaiShangLieCheData = new MapTileData({
location: v2(808, -234),
direction: MapTileDirection.nook,
trainsSelectLicense: false,
duelSelectLicense: false,
occupyLicense: false,
});
/// 暗黑神殿
private static AnHeiShenDianData = new MapTileData({
location: v2(756, -278),
direction: MapTileDirection.vertical,
});
/// 痛苦地下城
private static TongKuDiXiaChenData = new MapTileData({
location: v2(703, -312),
direction: MapTileDirection.vertical,
});
/// 无底坑道
private static WuDiKenDaoData = new MapTileData({
location: v2(650, -346),
direction: MapTileDirection.vertical,
});
/// 切斯特小镇的命运硬币(右边)
private static XiaoZhenMingYunYinBiData = new MapTileData({
location: v2(597, -380),
backgroundIndex: 34,
direction: MapTileDirection.vertical,
duelSelectLicense: false,
occupyLicense: false,
});
/// 记忆之地
private static JiYiZhiDiData = new MapTileData({
location: v2(544, -414),
direction: MapTileDirection.vertical,
});
} }

View File

@ -27,6 +27,9 @@ export class MapTileNode extends Node {
/// 鼠标操作变化的边框 /// 鼠标操作变化的边框
private borderNode: Node; private borderNode: Node;
/// 禁止选择
private disableNode: Node;
/// 占领图标 /// 占领图标
private occupyIconNode: Node; private occupyIconNode: Node;
@ -45,7 +48,13 @@ export class MapTileNode extends Node {
this.initNode(); this.initNode();
} }
/// 测试使用按钮
initButtons(){
}
initNode() { initNode() {
/// 背景 /// 背景
if (this.controller.tileData.backgroundIndex) { if (this.controller.tileData.backgroundIndex) {
const node = new Node(); const node = new Node();
@ -61,42 +70,72 @@ export class MapTileNode extends Node {
} }
/// 名称 /// 名称
if (this.controller.tileData.nameIndex) { const node = new Node();
const node = new Node(); this.addChild(node);
this.addChild(node);
const bs = node.addComponent(BaseSprite); const bs = node.addComponent(BaseSprite);
bs.updateSpriteFrame(this.controller.tileData.npkPath, this.controller.tileData.nameIndex); bs.updateSpriteFrame(
this.controller.tileData.npkPath,
this.controller.tileType
);
this.nameNode = node; this.nameNode = node;
}
/// 决斗场选择后的红色边框 /// 决斗场选择后的红色边框
// 四角和命运硬币 没有红框 // 四角和命运硬币 没有红框
if ( if (
this.controller.tileData.direction != MapTileDirection.nook || this.controller.tileData.direction != MapTileDirection.nook &&
this.controller.tileType != this.controller.tileType !=
(MapTileType.XiaoZhenMingYunYinBi || MapTileType.HaLinMingYunYinBi) (MapTileType.XiaoZhenMingYunYinBi || MapTileType.HaLinMingYunYinBi)
) { ) {
const node = new Node(); const node = new Node();
// node.active = false; node.active = false;
this.addChild(node); this.addChild(node);
const bs = node.addComponent(BaseSprite);
// 横向地块27 竖向28 // 横向地块27 竖向28
const bs = node.addComponent(BaseSprite);
bs.updateSpriteFrame( bs.updateSpriteFrame(
this.controller.tileData.npkPath, this.controller.tileData.npkPath,
this.controller.tileData.direction == MapTileDirection.horizontal ? 27 : 28 this.controller.tileData.direction == MapTileDirection.horizontal ? 27 : 28
); );
this.nameNode = node; this.fightNode = node;
} }
/// 鼠标选择边框 if (this.controller.tileData.trainsSelectLicense){
const bordeNode = new Node(); // 鼠标选择边框
// bordeNode.active = false; const bordeNode = new Node();
const bordeBS = bordeNode.addComponent(MapTileButtonComponent); this.addChild(bordeNode);
bordeBS.direction = this.controller.tileData.direction; bordeNode.active = false;
this.borderNode = bordeNode; const bordeBC = bordeNode.addComponent(MapTileButtonComponent);
bordeBC.direction = this.controller.tileData.direction;
this.borderNode = bordeNode;
}
/// 禁止选择
const disableNode = new Node();
this.addChild(disableNode);
disableNode.active = false;
const disableBS = disableNode.addComponent(BaseSprite);
disableBS.updateSpriteFrame(this.controller.tileData.npkPath,this.controller.tileData.direction + 5)
this.disableNode = disableNode;
} }
/// 显示海上列车选择
shwTrainsSelect(show: boolean){
if (this.borderNode){
/// 许可选择
if (this.controller.tileData.trainsSelectLicense){
this.borderNode.active = show;
}else{
this.disableNode.active = true;
}
}else{
this.disableNode.active = false;
this.borderNode.active = false;
}
}
} }