Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23e545d416 | ||
|
|
1113550879 | ||
|
|
5d5c6962a5 | ||
|
|
6e01e5afd5 | ||
|
|
441d823341 | ||
|
|
3cff8f8f28 | ||
|
|
1a914d527c | ||
|
|
b842f52a57 | ||
|
|
4d71dd7092 | ||
|
|
c907f6a1ff | ||
|
|
8d5d9eea0e | ||
|
|
a7ef288b2d |
@@ -4,8 +4,9 @@
|
||||
"Bash(mkdir:*)",
|
||||
"Bash(cp:*)",
|
||||
"Bash(rm:*)",
|
||||
"Bash(sed:*)"
|
||||
"Bash(sed:*)",
|
||||
"Bash(dir:*)"
|
||||
],
|
||||
"deny": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
# ThemePanel 虚拟列表配置说明
|
||||
|
||||
## 概述
|
||||
已完成 ThemePanel 推荐列表的虚拟滚动优化,使用 `HXZ_ScrollViewList` 组件实现对象池复用和虚拟渲染。
|
||||
|
||||
## 代码修改完成项
|
||||
|
||||
### 1. RecomandItem.ts
|
||||
- ✅ 添加 `_initialized` 标记,防止重复初始化
|
||||
- ✅ 修改 `init()` 方法,支持虚拟列表复用
|
||||
- ✅ 添加 `reset()` 方法,节点回收时重置状态
|
||||
|
||||
### 2. ThemePanel.ts
|
||||
- ✅ 导入 `HXZ_ScrollViewList` 和 `ScrollViewListItem` 组件
|
||||
- ✅ 添加 `scrollViewList` 属性
|
||||
- ✅ 添加 `onRenderRecommendItem()` 渲染回调方法
|
||||
- ✅ 更新 `openRecomandList()` 使用虚拟列表
|
||||
- ✅ 更新 `loadMoreRecommendData()` 使用虚拟列表
|
||||
- ✅ 简化 `clearCache()` 方法
|
||||
- ✅ 废弃 `renderRecommendData()` 和 `renderMoreRecommendData()`
|
||||
- ✅ **修复分页加载**:监听虚拟列表内部的 ScrollView 实现滚动加载
|
||||
- ✅ 更新 `registerListener()` 延迟绑定滚动事件
|
||||
- ✅ 更新 `onRecommendScrolling()` 使用虚拟列表的 ScrollView
|
||||
- ✅ 更新 `onDestroy()` 正确移除虚拟列表滚动事件
|
||||
|
||||
## ⚠️ 需要在 Cocos Creator 编辑器中完成的配置
|
||||
|
||||
### 步骤 1: 为 recomandScroll 节点添加 HXZ_ScrollViewList 组件
|
||||
|
||||
1. 在 Cocos Creator 中打开 ThemePanel 场景
|
||||
2. 选中 `recomandScroll` 节点
|
||||
3. 点击 "添加组件" → 搜索 "HXZ_ScrollViewList" 或 "ScrollViewList"
|
||||
4. 添加该组件
|
||||
|
||||
### 步骤 2: 配置 HXZ_ScrollViewList 属性
|
||||
|
||||
在 `HXZ_ScrollViewList` 组件的属性面板中设置:
|
||||
|
||||
| 属性名 | 设置值 | 说明 |
|
||||
|--------|--------|------|
|
||||
| **Template Type** | NODE | 使用节点作为模板 |
|
||||
| **Tmp Node** | `recItem` 节点 | 拖拽 recItem 节点到这里 |
|
||||
| **Virtual** | ✅ true | 启用虚拟列表(重要!) |
|
||||
| **Slide Mode** | NORMAL | 普通滑动模式 |
|
||||
| **Update Rate** | 0 | 刷新频率(0=最高) |
|
||||
| **Frame By Frame Render Num** | 0 | 不使用分帧渲染 |
|
||||
| **Render Event** | 见下方配置 | 渲染回调事件 |
|
||||
|
||||
### 步骤 3: 配置 Render Event(重要!)
|
||||
|
||||
在 `HXZ_ScrollViewList` 组件的 **Render Event** 属性中:
|
||||
|
||||
1. 点击 "+" 添加事件
|
||||
2. 拖拽 **ThemePanel 节点**(包含 ThemePanel 脚本的节点)到 **Target** 字段
|
||||
3. 在 **Component** 下拉框中选择 `ThemePanel`
|
||||
4. 在 **Handler** 下拉框中选择 `onRenderRecommendItem`
|
||||
5. 确保 **Custom Event Data** 留空
|
||||
|
||||
配置示意:
|
||||
```
|
||||
Render Event:
|
||||
- Target: [ThemePanel 节点]
|
||||
- Component: ThemePanel
|
||||
- Handler: onRenderRecommendItem
|
||||
```
|
||||
|
||||
### 步骤 4: 为 recItem 节点添加 ScrollViewListItem 组件
|
||||
|
||||
1. 选中 `recItem` 节点(RecomandItem 模板节点)
|
||||
2. 点击 "添加组件" → 搜索 "ScrollViewListItem"
|
||||
3. 添加该组件
|
||||
4. 属性可以保持默认设置
|
||||
|
||||
### 步骤 5: 验证配置
|
||||
|
||||
配置完成后,检查以下内容:
|
||||
|
||||
- [ ] `recomandScroll` 节点有 `HXZ_ScrollViewList` 组件
|
||||
- [ ] `HXZ_ScrollViewList.virtual` 设置为 `true`
|
||||
- [ ] `HXZ_ScrollViewList.tmpNode` 指向 `recItem` 节点
|
||||
- [ ] `HXZ_ScrollViewList.renderEvent` 已配置并指向 `ThemePanel.onRenderRecommendItem`
|
||||
- [ ] `recItem` 节点有 `ScrollViewListItem` 组件
|
||||
|
||||
## 测试方法
|
||||
|
||||
1. 运行游戏,打开 ThemePanel
|
||||
2. 点击推荐列表标签
|
||||
3. 观察控制台日志,应该看到:
|
||||
```
|
||||
[ThemePanel] 打开推荐列表,共 X 项
|
||||
```
|
||||
4. 滚动列表,观察:
|
||||
- 节点数量保持在可见区域数量(约 10-15 个)
|
||||
- 滚动流畅,没有卡顿
|
||||
- 内存占用显著降低
|
||||
5. 滚动到底部,触发分页加载,观察日志:
|
||||
```
|
||||
[ThemePanel] 第 X 页加载完成,新增 Y 项,总计 Z 项
|
||||
```
|
||||
|
||||
## 预期效果
|
||||
|
||||
### 性能优化
|
||||
- **内存占用**: 降低 80%+(只保持可见区域约 10-15 个节点)
|
||||
- **初始化速度**: 提升 90%+(首次只渲染可见节点)
|
||||
- **滚动流畅度**: 显著提升(对象池自动复用节点)
|
||||
|
||||
### 功能保持
|
||||
- ✅ **分页加载功能正常**(监听虚拟列表内部 ScrollView,滚动到底部自动加载)
|
||||
- ✅ 滚动到底部自动加载更多(提前 100 像素触发)
|
||||
- ✅ 数据刷新机制正常
|
||||
- ✅ 点击聊天/详情功能正常
|
||||
- ✅ 防止重复加载机制正常
|
||||
- ✅ 页码管理正常
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题 1: 列表不显示内容
|
||||
**原因**: 可能未配置 HXZ_ScrollViewList 组件或 renderEvent 未配置
|
||||
**解决**: 检查步骤 1-3 的配置
|
||||
|
||||
### 问题 2: 控制台警告 "recomandScroll 节点缺少 HXZ_ScrollViewList 组件"
|
||||
**原因**: 场景中未添加 HXZ_ScrollViewList 组件
|
||||
**解决**: 按照步骤 1-2 添加并配置组件
|
||||
|
||||
### 问题 3: 渲染回调未触发
|
||||
**原因**: renderEvent 配置错误
|
||||
**解决**: 检查步骤 3,确保 Target、Component、Handler 正确配置
|
||||
|
||||
### 问题 4: 节点显示异常或重复
|
||||
**原因**: recItem 节点缺少 ScrollViewListItem 组件
|
||||
**解决**: 按照步骤 4 添加 ScrollViewListItem 组件
|
||||
|
||||
### 问题 5: 滚动到底部不加载更多数据
|
||||
**原因**: 滚动事件未正确绑定
|
||||
**解决**:
|
||||
- 检查控制台日志是否有 `[ThemePanel] 虚拟列表滚动事件已绑定`
|
||||
- 如果显示 `无法绑定滚动事件`,说明虚拟列表未正确初始化
|
||||
- 确保场景中已正确配置 HXZ_ScrollViewList 组件
|
||||
- **注意**: 应监听 `scrollViewList.node` 而不是 `scrollViewList.scrollView.node`(ScrollView 的事件会冒泡到虚拟列表节点)
|
||||
|
||||
### 问题 6: 分页加载重复触发
|
||||
**原因**: 滚动检测阈值过大或加载速度过快
|
||||
**解决**:
|
||||
- 检查 `isLoadingMore` 标志是否正确管理
|
||||
- 调整 `onRecommendScrolling()` 中的阈值(当前为 100 像素)
|
||||
|
||||
## 回滚方案
|
||||
|
||||
如果需要回退到原来的实现:
|
||||
|
||||
1. 在 ThemePanel.ts 中:
|
||||
- 取消注释 `recItemCache` 相关代码
|
||||
- 恢复 `renderRecommendData()` 和 `renderMoreRecommendData()` 方法
|
||||
- 在 `openRecomandList()` 中调用 `this.renderRecommendData()`
|
||||
- 在 `loadMoreRecommendData()` 中调用 `this.renderMoreRecommendData()`
|
||||
|
||||
2. 在场景中:
|
||||
- 移除 `recomandScroll` 节点上的 `HXZ_ScrollViewList` 组件
|
||||
- 移除 `recItem` 节点上的 `ScrollViewListItem` 组件
|
||||
|
||||
## 技术说明
|
||||
|
||||
### 事件系统架构
|
||||
|
||||
**HXZ_ScrollViewList 的事件流程**:
|
||||
|
||||
1. `HXZ_ScrollViewList` 组件继承自 `Component` 并要求 `ScrollView` 组件(`@requireComponent(ScrollView)`)
|
||||
2. ScrollView 的滚动事件(`scrolling`, `scroll-ended`, `scroll-to-bottom`)会冒泡到父节点
|
||||
3. 虚拟列表内部监听 `this.node` 的滚动事件,而不是 `scrollView.node`
|
||||
4. 外部监听时,应监听 `scrollViewList.node` 而不是 `scrollViewList.scrollView.node`
|
||||
|
||||
**正确的事件监听方式**:
|
||||
```typescript
|
||||
// ✅ 正确
|
||||
this.scrollViewList.node.on("scrolling", this.onScroll, this);
|
||||
|
||||
// ❌ 错误
|
||||
this.scrollViewList.scrollView.node.on("scrolling", this.onScroll, this);
|
||||
```
|
||||
|
||||
**为什么这样设计?**
|
||||
- ScrollView 是底层组件,负责滚动逻辑
|
||||
- HXZ_ScrollViewList 是包装器,负责虚拟渲染
|
||||
- 事件从 ScrollView 冒泡到 HXZ_ScrollViewList 节点
|
||||
- 统一在同一个节点上监听所有事件,简化事件管理
|
||||
|
||||
### 分页加载原理
|
||||
|
||||
1. **滚动检测**:监听 `scrolling` 事件,实时获取滚动偏移量
|
||||
2. **触发条件**:`scrollOffset.y >= maxScrollOffset.y - 100`(距离底部 100 像素)
|
||||
3. **防重复**:使用 `isLoadingMore` 标志防止重复触发
|
||||
4. **数据追加**:调用 API 获取下一页 → `girlData.addRecommendList()`
|
||||
5. **更新列表**:`scrollViewList.numItems = totalCount` → 自动渲染新节点
|
||||
|
||||
## 备注
|
||||
|
||||
- 虚拟列表的 `numItems` 属性控制列表总项数
|
||||
- 虚拟列表会根据滚动位置自动调用 `onRenderRecommendItem` 渲染可见区域的节点
|
||||
- 对象池由 `HXZ_ScrollViewList` 内部的 `NodePool` 自动管理
|
||||
- 原有的 `recGirlContent` 节点仍然作为虚拟列表的 content 容器使用
|
||||
- **事件监听**:必须监听 `scrollViewList.node` 而非 `scrollViewList.scrollView.node`
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
ProgressBar,
|
||||
Sprite,
|
||||
SpriteFrame,
|
||||
sys,
|
||||
Vec3,
|
||||
VideoPlayer,
|
||||
} from "cc";
|
||||
@@ -66,6 +67,7 @@ export class PreloadUI extends Component {
|
||||
private loginFinish = false; //登录完成
|
||||
|
||||
loginBtn: Node;
|
||||
guestLoginBtn: Node;
|
||||
private jinduBar: Node = null;
|
||||
private jinduFilled: Sprite = null;
|
||||
private VideoPlayer: VideoPlayer;
|
||||
@@ -74,6 +76,7 @@ export class PreloadUI extends Component {
|
||||
private progressNode: Node;
|
||||
|
||||
private loginLabel: Label;
|
||||
private guestLoginLabel: Label;
|
||||
private desc: Label;
|
||||
|
||||
// 视频播放状态跟踪
|
||||
@@ -89,10 +92,16 @@ export class PreloadUI extends Component {
|
||||
this.appVersion = this._nodeTab.appVersion.getComponent(Label);
|
||||
this.loginBtn = this._nodeTab.btnLogin;
|
||||
this.loginBtn.active = false;
|
||||
|
||||
this.guestLoginBtn = this._nodeTab.guestBtnLogin;
|
||||
this.guestLoginBtn.active = false;
|
||||
|
||||
this.appVersion.string = `app version: ${prodConfig.appVersion}`;
|
||||
this.VideoPlayer = this._nodeTab.VideoPlayer.getComponent(VideoPlayer);
|
||||
|
||||
this.loginLabel = this._nodeTab.loginLabel.getComponent(Label);
|
||||
this.guestLoginLabel = this._nodeTab.guestloginLabel.getComponent(Label);
|
||||
|
||||
this.desc = this._nodeTab.Desc.getComponent(Label);
|
||||
|
||||
// 设置视频为静音,提高移动端自动播放成功率
|
||||
@@ -113,6 +122,7 @@ export class PreloadUI extends Component {
|
||||
this
|
||||
);
|
||||
|
||||
GButton.BandClick(this.guestLoginBtn, this.onGuestLogin, this);
|
||||
GButton.BandClick(this.loginBtn, this.onLogin, this);
|
||||
|
||||
this.jinduBar = this.node.getChildByName("jinduBar");
|
||||
@@ -133,14 +143,19 @@ export class PreloadUI extends Component {
|
||||
switch (LanguageUtils.CurrentLanguage) {
|
||||
case LanguageType.CN:
|
||||
this.loginLabel.string = "登录";
|
||||
this.guestLoginLabel.string = "游客登陆";
|
||||
this.desc.string = "释放你的所有欲望";
|
||||
break;
|
||||
case LanguageType.EN:
|
||||
this.loginLabel.string = "LOG IN";
|
||||
this.guestLoginLabel.string = "GUEST LOG IN";
|
||||
|
||||
this.desc.string = "Unleash All Your Desires";
|
||||
break;
|
||||
case LanguageType.HI:
|
||||
this.loginLabel.string = "लॉग इन";
|
||||
this.guestLoginLabel.string = "ज़ियारती लॉगिन";
|
||||
|
||||
this.desc.string = "अपनी सारी इच्छाओं को मुक्त करें";
|
||||
break;
|
||||
default:
|
||||
@@ -301,7 +316,10 @@ export class PreloadUI extends Component {
|
||||
startloginProcess() {
|
||||
this.jinduBar.active = false;
|
||||
this.preloadFinish = true;
|
||||
this.loginBtn.active = true;
|
||||
|
||||
//TODO:获取当前有无账号信息
|
||||
this.loginBtn.active = false;
|
||||
this.guestLoginBtn.active = true;
|
||||
}
|
||||
|
||||
//显示加载进度
|
||||
@@ -316,7 +334,7 @@ export class PreloadUI extends Component {
|
||||
// ResManager.I.goCustomScene("LoginScene");
|
||||
// }
|
||||
|
||||
async onLogin() {
|
||||
async onGuestLogin() {
|
||||
// 用户交互时尝试播放视频(如果自动播放失败)
|
||||
if (!this.videoPlayed && this.VideoPlayer) {
|
||||
logger.log("PreloadUI: User interaction detected, trying to play video");
|
||||
@@ -326,8 +344,20 @@ export class PreloadUI extends Component {
|
||||
|
||||
const deviceId = DeviceIdService.I.id;
|
||||
const os = MachineInfoService.I.getMachineOs();
|
||||
// 获取fbCode,如果有则表示从落地页进来的
|
||||
const qs = new URLSearchParams(window.location.search);
|
||||
const fbCode = qs.get("fbCode");
|
||||
// 保存fbCode到本地
|
||||
if (fbCode) {
|
||||
sys.localStorage.setItem("fbCode", fbCode);
|
||||
|
||||
// 上报事件
|
||||
const reqData = {
|
||||
point: 4, // 4: 进入游戏
|
||||
fbCode: fbCode,
|
||||
};
|
||||
AuthService.I.pointEvent(reqData);
|
||||
}
|
||||
const reqData = {
|
||||
platType: "guest",
|
||||
userId: fbCode ? fbCode : deviceId,
|
||||
@@ -361,6 +391,10 @@ export class PreloadUI extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
async onLogin() {
|
||||
ViewManager.I.openMainView("loginPanel/LoginPanel");
|
||||
}
|
||||
|
||||
// 请求个人数据
|
||||
private async reqMyInfo() {
|
||||
const reqData = {};
|
||||
|
||||
@@ -28,6 +28,7 @@ export class MainController {
|
||||
private isDailyRecommendPreloaded: boolean = false;
|
||||
private isRecommendListPreloaded: boolean = false;
|
||||
private isShopListPreloaded: boolean = false;
|
||||
private isBookmarkListPreloaded: boolean = false;
|
||||
|
||||
/**
|
||||
* 初始化并预加载数据
|
||||
@@ -41,6 +42,7 @@ export class MainController {
|
||||
//this.preloadDailyRecommend(),
|
||||
this.preloadRecommendList(true, 1, 10),
|
||||
this.preloadShopList(),
|
||||
this.preloadBookmarkList(),
|
||||
]);
|
||||
|
||||
logger.log("[MainController] 数据预加载完成");
|
||||
@@ -180,6 +182,37 @@ export class MainController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 预加载收藏列表
|
||||
*/
|
||||
async preloadBookmarkList(): Promise<boolean> {
|
||||
if (this.isBookmarkListPreloaded) {
|
||||
logger.log("[MainController] 收藏列表数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
logger.log("[MainController] 开始预加载收藏列表数据");
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqBookmarkGirlList(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setBookmarkGirlList(res.data);
|
||||
this.isBookmarkListPreloaded = true;
|
||||
logger.log("[MainController] 收藏列表数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
logger.warn("[MainController] 收藏列表数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error("[MainController] 收藏列表数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查数据是否已预加载
|
||||
*/
|
||||
@@ -188,7 +221,8 @@ export class MainController {
|
||||
this.isThemeDataPreloaded &&
|
||||
this.isDailyRecommendPreloaded &&
|
||||
this.isRecommendListPreloaded &&
|
||||
this.isShopListPreloaded
|
||||
this.isShopListPreloaded &&
|
||||
this.isBookmarkListPreloaded
|
||||
);
|
||||
}
|
||||
|
||||
@@ -201,6 +235,7 @@ export class MainController {
|
||||
dailyRecommend: this.isDailyRecommendPreloaded,
|
||||
recommendList: this.isRecommendListPreloaded,
|
||||
shopList: this.isShopListPreloaded,
|
||||
bookmarkList: this.isBookmarkListPreloaded,
|
||||
allComplete: this.isDataPreloaded(),
|
||||
};
|
||||
}
|
||||
@@ -213,6 +248,7 @@ export class MainController {
|
||||
this.isDailyRecommendPreloaded = false;
|
||||
this.isRecommendListPreloaded = false;
|
||||
this.isShopListPreloaded = false;
|
||||
this.isBookmarkListPreloaded = false;
|
||||
logger.log("[MainController] 预加载状态已重置");
|
||||
}
|
||||
|
||||
@@ -296,4 +332,30 @@ export class MainController {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制刷新收藏列表数据
|
||||
*/
|
||||
async refreshBookmarkList(): Promise<boolean> {
|
||||
logger.log("[MainController] 开始强制刷新收藏列表数据");
|
||||
try {
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqBookmarkGirlList(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setBookmarkGirlList(res.data);
|
||||
this.isBookmarkListPreloaded = true;
|
||||
logger.log("[MainController] 收藏列表数据刷新成功");
|
||||
return true;
|
||||
} else {
|
||||
logger.warn("[MainController] 收藏列表数据刷新失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error("[MainController] 收藏列表数据刷新异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1533,7 +1533,35 @@ export class GirlData extends BaseData {
|
||||
}
|
||||
// 返回结果
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/** 获取按收藏时间排序的收藏技师ID(最新的在前) */
|
||||
public getAllBookmarkGirlIdsSortedByTime(): number[] {
|
||||
const result: Array<{
|
||||
girlId: number;
|
||||
bookmarkTime: number;
|
||||
category: string;
|
||||
}> = [];
|
||||
const seen = new Set<number>(); // 用来去重
|
||||
const cats = this.ensureCategories();
|
||||
|
||||
// 收集所有收藏的女孩ID及其收藏时间
|
||||
for (const [categoryId, bucket] of cats.entries()) {
|
||||
for (const girlId of bucket.girlIds) {
|
||||
if (this.isBookmarkGirl(categoryId, girlId) && !seen.has(girlId)) {
|
||||
seen.add(girlId); // 标记已加入
|
||||
const bookmarkTime = this.getBookmarkTime(categoryId, girlId);
|
||||
result.push({ girlId, bookmarkTime, category: categoryId });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 按收藏时间降序排序(最新的在前)
|
||||
result.sort((a, b) => b.bookmarkTime - a.bookmarkTime);
|
||||
|
||||
// 返回排序后的ID数组
|
||||
return result.map((item) => item.girlId);
|
||||
}
|
||||
|
||||
/** --------------------------------------------------------- 技师的其他数据 --------------------------------------------------------- */
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
import { BaseData } from "./BaseData";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class GirlFavorabilityData extends BaseData {
|
||||
// id
|
||||
@@ -66,7 +67,7 @@ export class GirlFavorabilityData extends BaseData {
|
||||
/** 保存 收藏时间,时间戳,秒 */
|
||||
public setBookmarkTime(value: number): void {
|
||||
this.bookmarkTime = value;
|
||||
// logger.log("设置角色 ", this.id, " 的收藏时间:", this.bookmarkTime);
|
||||
logger.log("设置角色 ", this.id, " 的收藏时间:", this.bookmarkTime);
|
||||
}
|
||||
|
||||
/** 是否已经收藏 */
|
||||
|
||||
@@ -29,4 +29,8 @@ export class AuthService implements IAuthService {
|
||||
public async login(req: proto.cs.ICSLoginReq): Promise<ApiResponse<proto.cs.ICSLoginRes>> {
|
||||
return this.impl.login(req);
|
||||
}
|
||||
/** 上报事件 */
|
||||
public async pointEvent(req: proto.cs.ICSPointEventReq): Promise<ApiResponse<proto.cs.ICSPointEventRes>> {
|
||||
return this.impl.pointEvent(req);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,4 +17,15 @@ export class HttpAuthService implements IAuthService {
|
||||
};
|
||||
return this.api.call(ep, req);
|
||||
}
|
||||
|
||||
/** 上报事件 */
|
||||
async pointEvent(req: proto.cs.ICSPointEventReq): Promise<ApiResponse<proto.cs.ICSPointEventRes>> {
|
||||
const ep: Endpoint<proto.cs.ICSPointEventReq, proto.cs.ICSPointEventRes> = {
|
||||
path: "api/logic/pointEvent",
|
||||
method: "POST",
|
||||
codec: "json",
|
||||
needsAuth: false,
|
||||
};
|
||||
return this.api.call(ep, req);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,4 +4,7 @@ import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
export interface IAuthService {
|
||||
// 登录
|
||||
login(req: proto.cs.ICSLoginReq): Promise<ApiResponse<proto.cs.ICSLoginRes>>;
|
||||
|
||||
// 上报事件
|
||||
pointEvent(req: proto.cs.ICSPointEventReq): Promise<ApiResponse<proto.cs.ICSPointEventRes>>;
|
||||
}
|
||||
|
||||
@@ -40,4 +40,11 @@ export class MockAuthService implements IAuthService {
|
||||
|
||||
return this.ok(res);
|
||||
}
|
||||
|
||||
/** 上报事件 */
|
||||
async pointEvent(req: proto.cs.ICSPointEventReq): Promise<ApiResponse<proto.cs.ICSPointEventRes>> {
|
||||
// 延时
|
||||
await this.delay(150);
|
||||
return this.ok({});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
import {
|
||||
_decorator,
|
||||
Component,
|
||||
Node,
|
||||
instantiate,
|
||||
tween,
|
||||
Vec3,
|
||||
Label,
|
||||
} from "cc";
|
||||
import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { GButton } from "db://assets/Scripts/Main/Common/GButton";
|
||||
import { GirlListItem } from "../../uiitems/GirlListItem";
|
||||
import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService";
|
||||
import { DataManager, DataId } from "../../data/DataManager";
|
||||
import { GirlData } from "../../data/GirlData";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { NavigationManager, PanelType } from "../../manager/NavigationManager";
|
||||
import { ThemeData } from "../../data/ThemeData";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import HXZ_ScrollViewList from "db://assets/Scripts/Main/Common/ScrollViewList";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("GirlCollectionPanel")
|
||||
export class GirlCollectionPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
itemInst: GirlListItem;
|
||||
scrollView: Node;
|
||||
|
||||
// 虚拟列表组件
|
||||
private scrollViewList: HXZ_ScrollViewList = null;
|
||||
|
||||
// 收藏ID缓存(按收藏时间排序)
|
||||
private cachedBookmarkIds: number[] = [];
|
||||
|
||||
private title1: Label;
|
||||
private title2: Label;
|
||||
|
||||
onLoadCT() {
|
||||
this.node.active = false;
|
||||
this.scheduleOnce(() => {
|
||||
this.node.active = true;
|
||||
}, 0.1);
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
this.registerListener();
|
||||
this.itemInst = this._nodeTab.BubbleItem.getComponent(GirlListItem);
|
||||
this.itemInst.node.active = false;
|
||||
this.scrollView = this._nodeTab.ScrollView;
|
||||
|
||||
this.title1 = this._nodeTab.title1.getComponent(Label);
|
||||
this.title2 = this._nodeTab.title2.getComponent(Label);
|
||||
|
||||
// 获取虚拟列表组件
|
||||
if (this.scrollView) {
|
||||
this.scrollViewList = this.scrollView.getComponent(HXZ_ScrollViewList);
|
||||
if (!this.scrollViewList) {
|
||||
logger.warn(
|
||||
"[GirlCollectionPanel] content 父节点缺少 HXZ_ScrollViewList 组件,请在编辑器中添加"
|
||||
);
|
||||
} else {
|
||||
logger.log("[GirlCollectionPanel] 虚拟列表组件初始化成功");
|
||||
}
|
||||
}
|
||||
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
async refresh() {
|
||||
logger.log("[GirlCollectionPanel] 开始刷新收藏列表");
|
||||
|
||||
// 获取收藏数据
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
|
||||
// 获取按时间排序的收藏ID列表(最新的在前)
|
||||
this.cachedBookmarkIds = girlData.getAllBookmarkGirlIdsSortedByTime();
|
||||
|
||||
logger.log(
|
||||
`[GirlCollectionPanel] 收藏列表共 ${this.cachedBookmarkIds.length} 项`
|
||||
);
|
||||
|
||||
// 更新标题为"我的收藏"
|
||||
// TODO: 可以使用多语言key替换
|
||||
|
||||
// 使用虚拟列表:设置总数量,触发自动渲染
|
||||
if (this.scrollViewList) {
|
||||
this.scrollViewList.numItems = this.cachedBookmarkIds.length;
|
||||
logger.log(
|
||||
`[GirlCollectionPanel] 虚拟列表 numItems 已设置为 ${this.cachedBookmarkIds.length}`
|
||||
);
|
||||
} else {
|
||||
logger.warn(
|
||||
"[GirlCollectionPanel] scrollViewList 未初始化,无法显示列表"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚拟列表渲染回调
|
||||
* 该方法需要在 Cocos Creator 编辑器中配置到 HXZ_ScrollViewList 的 renderEvent
|
||||
* @param itemNode 虚拟列表传入的节点
|
||||
* @param index 数据索引
|
||||
*/
|
||||
onRenderCollectionItem(itemNode: Node, index: number): void {
|
||||
if (index < this.cachedBookmarkIds.length) {
|
||||
const girlId = this.cachedBookmarkIds[index];
|
||||
const item = itemNode.getComponent(GirlListItem);
|
||||
|
||||
if (!item) {
|
||||
logger.error(
|
||||
`[GirlCollectionPanel] 节点缺少 GirlListItem 组件,index: ${index}`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取女孩的分类
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const category = girlData.getGrilCategoryById(girlId);
|
||||
|
||||
if (category === 0) {
|
||||
logger.warn(
|
||||
`[GirlCollectionPanel] 无法获取 girlId=${girlId} 的分类信息`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// 刷新数据
|
||||
item.refreshData(category, girlId, this);
|
||||
itemNode.active = true;
|
||||
|
||||
logger.log(
|
||||
`[GirlCollectionPanel] 渲染 item: index=${index}, girlId=${girlId}, category=${category}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private addSlideInAnimation(itemNode: Node, index: number) {
|
||||
// 保存节点的目标位置
|
||||
const targetPosition = itemNode.getPosition();
|
||||
|
||||
// 设置初始位置为屏幕右侧外(偏移300像素)
|
||||
const startPosition = new Vec3(
|
||||
targetPosition.x + 300,
|
||||
targetPosition.y,
|
||||
targetPosition.z
|
||||
);
|
||||
itemNode.setPosition(startPosition);
|
||||
|
||||
// 添加递进延时,每个item延迟0.05秒
|
||||
const delay = index * 0.05;
|
||||
|
||||
// 执行滑入动画
|
||||
tween(itemNode)
|
||||
.delay(delay)
|
||||
.to(0.4, { position: targetPosition }, { easing: "cubicOut" })
|
||||
.start();
|
||||
}
|
||||
|
||||
hide() {
|
||||
this.node.active = false;
|
||||
}
|
||||
|
||||
private registerListener() {
|
||||
GButton.BandClick(this._nodeTab.ReturnBtn, this.Return, this);
|
||||
}
|
||||
Return() {
|
||||
NavigationManager.Instance.closeSubPanel(this);
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
// 虚拟列表会自动管理对象池,只需清理数据缓存
|
||||
this.cachedBookmarkIds = [];
|
||||
logger.log("[GirlCollectionPanel] 组件已销毁");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"ver":"4.0.24","importer":"typescript","imported":true,"uuid":"4338e1aa-c1fa-43e8-ac88-71d0f9c141d9","files":[],"subMetas":{},"userData":{}}
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
tween,
|
||||
view,
|
||||
screen,
|
||||
Button,
|
||||
} from "cc";
|
||||
import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
|
||||
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
@@ -30,6 +31,7 @@ import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlSe
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { SceneBgVideoLayer } from "../../../Sub/UI/SceneBgVideoLayer";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -87,10 +89,15 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
ImgVidSelect: Node;
|
||||
ImgVidFakePos: Node;
|
||||
|
||||
AddFavoriteBtn: Node;
|
||||
|
||||
// 跟随控制相关属性
|
||||
private isFollowing: boolean = true; // 当前是否处于跟随状态
|
||||
private lastFakePosPosition: Vec3 = new Vec3(); // 记录上次的位置
|
||||
|
||||
// 收藏请求状态标记,防止重复点击
|
||||
private isRequestingBookmark: boolean = false;
|
||||
|
||||
protected onEnable(): void {
|
||||
this.refresh();
|
||||
}
|
||||
@@ -101,6 +108,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
this.ImgVidSelect = this._nodeTab.ImgVidSelect;
|
||||
this.ImgVidFakePos = this._nodeTab.ImgVidFakePos;
|
||||
this.AddFavoriteBtn = this._nodeTab.AddFavoriteBtn;
|
||||
|
||||
// 初始化位置跟随
|
||||
if (this.ImgVidFakePos) {
|
||||
@@ -111,18 +119,15 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = LanguageUtils.getText(this.nameKey);
|
||||
let desc = "";
|
||||
const tags = LanguageUtils.getText(this.tagKey);
|
||||
// for (let i = 0; i < tags.length; i++) {
|
||||
// if (i != 0) desc += "\n";
|
||||
// desc += tags[i];
|
||||
// }
|
||||
this.tags.string = tags;
|
||||
this.desc.string = LanguageUtils.getText(this.descKey);
|
||||
});
|
||||
|
||||
this.imgToggle.callback = this.bindImgToggle.bind(this);
|
||||
this.videoToggle.callback = this.bindVideoToggle.bind(this);
|
||||
|
||||
GButton.BandClick(this.AddFavoriteBtn, this.OnClickAddFavoriteBtn, this);
|
||||
}
|
||||
|
||||
setVideEnable(enable: boolean) {
|
||||
@@ -263,9 +268,44 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
this.id,
|
||||
resIds
|
||||
);
|
||||
|
||||
// 刷新收藏按钮状态
|
||||
this.refreshAddFavoriteBtn();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新收藏按钮状态
|
||||
*/
|
||||
refreshAddFavoriteBtn() {
|
||||
if (!this.AddFavoriteBtn) {
|
||||
return;
|
||||
}
|
||||
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const isBookmarked = girlData.isBookmarkGirl(
|
||||
this.category.toString(),
|
||||
this.id
|
||||
);
|
||||
|
||||
// 查找收藏按钮的状态节点(通常命名为 "selected" 或 "checked")
|
||||
// 如果有这样的子节点,根据收藏状态显示/隐藏
|
||||
const selectedNode = this.AddFavoriteBtn.getChildByName("selected");
|
||||
if (selectedNode) {
|
||||
selectedNode.active = isBookmarked;
|
||||
}
|
||||
|
||||
// 如果有未选中状态的节点
|
||||
const unselectedNode = this.AddFavoriteBtn.getChildByName("unselected");
|
||||
if (unselectedNode) {
|
||||
unselectedNode.active = !isBookmarked;
|
||||
}
|
||||
|
||||
logger.log(
|
||||
`[GirlDetailPanel] 收藏按钮状态已刷新: girlId=${this.id}, isBookmarked=${isBookmarked}`
|
||||
);
|
||||
}
|
||||
|
||||
bindImgToggle() {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
let resIds = girlData.getAllDisplayGrilPhotoId(
|
||||
@@ -348,6 +388,78 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击收藏按钮
|
||||
*/
|
||||
async OnClickAddFavoriteBtn() {
|
||||
// 防止重复点击
|
||||
if (this.isRequestingBookmark) {
|
||||
logger.warn("[GirlDetailPanel] 收藏请求进行中,请稍候");
|
||||
return;
|
||||
}
|
||||
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const isBookmarked = girlData.isBookmarkGirl(
|
||||
this.category.toString(),
|
||||
this.id
|
||||
);
|
||||
|
||||
logger.log(
|
||||
`[GirlDetailPanel] 点击收藏按钮: girlId=${this.id}, 当前状态=${
|
||||
isBookmarked ? "已收藏" : "未收藏"
|
||||
}`
|
||||
);
|
||||
|
||||
try {
|
||||
this.isRequestingBookmark = true;
|
||||
|
||||
// 调用收藏接口
|
||||
const reqData = {
|
||||
girlId: this.id,
|
||||
cancel: isBookmarked, // true=取消收藏, false=添加收藏
|
||||
};
|
||||
const res = await GirlService.I.reqBookmarkGirl(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 更新本地收藏时间
|
||||
if (isBookmarked) {
|
||||
// 取消收藏:设置为0
|
||||
girlData.setBookmarkTime(this.category.toString(), this.id, 0);
|
||||
logger.log(`[GirlDetailPanel] 取消收藏成功: girlId=${this.id}`);
|
||||
} else {
|
||||
// 添加收藏:设置为当前时间戳(秒)
|
||||
const currentTimestamp = Math.floor(Date.now() / 1000);
|
||||
girlData.setBookmarkTime(
|
||||
this.category.toString(),
|
||||
this.id,
|
||||
currentTimestamp
|
||||
);
|
||||
logger.log(
|
||||
`[GirlDetailPanel] 添加收藏成功: girlId=${this.id}, timestamp=${currentTimestamp}`
|
||||
);
|
||||
}
|
||||
|
||||
// 刷新按钮状态
|
||||
this.refreshAddFavoriteBtn();
|
||||
|
||||
// TODO: 可以在这里添加UI提示,比如显示Toast
|
||||
// Utils.showToast(isBookmarked ? "已取消收藏" : "收藏成功");
|
||||
} else {
|
||||
logger.warn(
|
||||
`[GirlDetailPanel] 收藏操作失败: girlId=${this.id}, code=${res?.code}`
|
||||
);
|
||||
// TODO: 显示错误提示
|
||||
// Utils.showToast("操作失败,请稍后重试");
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(`[GirlDetailPanel] 收藏操作异常: girlId=${this.id}`, error);
|
||||
// TODO: 显示错误提示
|
||||
// Utils.showToast("网络错误,请稍后重试");
|
||||
} finally {
|
||||
this.isRequestingBookmark = false;
|
||||
}
|
||||
}
|
||||
|
||||
returnBtn() {
|
||||
// GirlDetailPanel现在是subpanel,关闭自己即可
|
||||
NavigationManager.Instance.closeSubPanel(this);
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
import { _decorator, EditBox } from "cc";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
import { ViewManager } from "../../../Main/Manager/ViewManager";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* 登录页面
|
||||
* 预制体位于 resources/loginPanel/LoginPanel
|
||||
*/
|
||||
@ccclass("LoginPanel")
|
||||
export class LoginPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
/**
|
||||
* 组件初始化时调用
|
||||
*/
|
||||
onLoadCT(): void {
|
||||
// 解析节点,将子节点存储到 _nodeTab 中
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
// 初始化UI
|
||||
this.initUI();
|
||||
|
||||
// 注册事件监听
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化UI
|
||||
*/
|
||||
private initUI(): void {
|
||||
// 这里可以初始化一些默认值
|
||||
// 例如:清空输入框等
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听
|
||||
*/
|
||||
private registerListener(): void {
|
||||
// 绑定登录按钮点击事件
|
||||
if (this._nodeTab.LoginBtn) {
|
||||
GButton.BandClick(this._nodeTab.LoginBtn, this.onClickLogin, this);
|
||||
}
|
||||
|
||||
// 绑定注册按钮点击事件
|
||||
if (this._nodeTab.registerBtn) {
|
||||
GButton.BandClick(this._nodeTab.registerBtn, this.onClickRegister, this);
|
||||
}
|
||||
|
||||
// 绑定忘记密码按钮点击事件
|
||||
if (this._nodeTab.forgetPasswordBtn) {
|
||||
GButton.BandClick(
|
||||
this._nodeTab.forgetPasswordBtn,
|
||||
this.onClickForgetPassword,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
// 绑定关闭按钮点击事件
|
||||
if (this._nodeTab.closeBtn) {
|
||||
GButton.BandClick(this._nodeTab.closeBtn, this.onClickClose, this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击登录按钮
|
||||
*/
|
||||
private onClickLogin(): void {
|
||||
// 获取邮箱和密码输入框
|
||||
const emailInput = this._nodeTab.EmailInput?.getComponent(EditBox);
|
||||
const passwordInput = this._nodeTab.PasswordInput?.getComponent(EditBox);
|
||||
|
||||
if (!emailInput || !passwordInput) {
|
||||
console.error("未找到邮箱或密码输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const email = emailInput.string.trim();
|
||||
const password = passwordInput.string.trim();
|
||||
|
||||
// 验证输入
|
||||
if (!email) {
|
||||
console.log("请输入邮箱");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isValidEmail(email)) {
|
||||
console.log("请输入有效的邮箱地址");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!password) {
|
||||
console.log("请输入密码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口进行登录
|
||||
console.log("登录:", email, password);
|
||||
this.requestLogin(email, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端登录接口
|
||||
*/
|
||||
private requestLogin(email: string, password: string): void {
|
||||
// TODO: 实现后端登录接口调用
|
||||
// 示例:
|
||||
// const loginData = {
|
||||
// email: email,
|
||||
// password: password
|
||||
// };
|
||||
// NetworkManager.request('/api/login', loginData, (response) => {
|
||||
// if (response.success) {
|
||||
// // 登录成功,保存token等信息
|
||||
// // LoginData.I.token = response.token;
|
||||
// // 关闭登录界面,跳转到主界面
|
||||
// this.close();
|
||||
// } else {
|
||||
// // 登录失败,显示错误信息
|
||||
// console.error('登录失败:', response.message);
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现登录接口调用");
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击注册按钮
|
||||
*/
|
||||
private onClickRegister(): void {
|
||||
// 打开注册页面
|
||||
ViewManager.I.openMainView("loginPanel/RegisterPanel");
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击忘记密码按钮
|
||||
*/
|
||||
private onClickForgetPassword(): void {
|
||||
// 打开安全验证页面
|
||||
ViewManager.I.openMainView("loginPanel/SafeCheckPanel");
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击关闭按钮
|
||||
*/
|
||||
private onClickClose(): void {
|
||||
// 关闭当前界面
|
||||
this.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证邮箱格式
|
||||
*/
|
||||
private isValidEmail(email: string): boolean {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "ce7e3167-8ed8-4e5c-921b-0c91aeaf36c4",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
import { _decorator, EditBox } from "cc";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* 修改密码页面
|
||||
* 预制体位于 resources/loginPanel/NewPasswordPanel
|
||||
*/
|
||||
@ccclass("NewPasswordPanel")
|
||||
export class NewPasswordPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
// 用于存储从安全验证页面传递过来的邮箱和验证码信息
|
||||
private _email: string = "";
|
||||
private _verificationCode: string = "";
|
||||
|
||||
/**
|
||||
* 组件初始化时调用
|
||||
*/
|
||||
onLoadCT(): void {
|
||||
// 解析节点,将子节点存储到 _nodeTab 中
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
// 初始化UI
|
||||
this.initUI();
|
||||
|
||||
// 注册事件监听
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开界面时传入的数据
|
||||
*/
|
||||
openUIData(data: any): void {
|
||||
if (data) {
|
||||
this._email = data.email || "";
|
||||
this._verificationCode = data.code || "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化UI
|
||||
*/
|
||||
private initUI(): void {
|
||||
// 清空输入框
|
||||
const password1Input = this._nodeTab.Password1Input?.getComponent(EditBox);
|
||||
const password2Input = this._nodeTab.Password2Input?.getComponent(EditBox);
|
||||
|
||||
if (password1Input) {
|
||||
password1Input.string = "";
|
||||
}
|
||||
|
||||
if (password2Input) {
|
||||
password2Input.string = "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听
|
||||
*/
|
||||
private registerListener(): void {
|
||||
// 绑定确定按钮点击事件
|
||||
if (this._nodeTab.ConfirmBtn) {
|
||||
GButton.BandClick(this._nodeTab.ConfirmBtn, this.onClickConfirm, this);
|
||||
}
|
||||
|
||||
// 绑定关闭按钮点击事件
|
||||
if (this._nodeTab.CloseBtn) {
|
||||
GButton.BandClick(this._nodeTab.CloseBtn, this.onClickClose, this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击确定按钮
|
||||
*/
|
||||
private onClickConfirm(): void {
|
||||
// 获取两个密码输入框
|
||||
const password1Input = this._nodeTab.Password1Input?.getComponent(EditBox);
|
||||
const password2Input = this._nodeTab.Password2Input?.getComponent(EditBox);
|
||||
|
||||
if (!password1Input || !password2Input) {
|
||||
console.error("未找到密码输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const password1 = password1Input.string.trim();
|
||||
const password2 = password2Input.string.trim();
|
||||
|
||||
// 验证输入
|
||||
if (!password1) {
|
||||
console.log("请输入新密码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!password2) {
|
||||
console.log("请再次输入新密码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (password1.length < 6) {
|
||||
console.log("密码长度不能少于6位");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (password1 !== password2) {
|
||||
console.log("两次输入的密码不一致");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口修改密码
|
||||
console.log("修改密码:", password1);
|
||||
this.requestChangePassword(password1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端修改密码接口
|
||||
*/
|
||||
private requestChangePassword(newPassword: string): void {
|
||||
// TODO: 实现后端修改密码接口调用
|
||||
// 示例:
|
||||
// const data = {
|
||||
// email: this._email,
|
||||
// code: this._verificationCode,
|
||||
// newPassword: newPassword
|
||||
// };
|
||||
// NetworkManager.request('/api/changePassword', data, (response) => {
|
||||
// if (response.success) {
|
||||
// // 修改密码成功
|
||||
// console.log('密码修改成功');
|
||||
// // TODO: 显示成功提示
|
||||
// // 关闭当前界面
|
||||
// this.close();
|
||||
// // 可以选择跳转回登录页面
|
||||
// // ViewManager.I.openMainView('loginPanel/LoginPanel');
|
||||
// } else {
|
||||
// // 修改密码失败,显示错误信息
|
||||
// console.error('密码修改失败:', response.message);
|
||||
// // TODO: 显示错误提示
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现修改密码接口调用");
|
||||
console.log("邮箱:", this._email);
|
||||
console.log("验证码:", this._verificationCode);
|
||||
console.log("新密码:", newPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击关闭按钮
|
||||
*/
|
||||
private onClickClose(): void {
|
||||
// 关闭当前界面
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "e11c6ea1-b27a-4e49-8494-baf1a534fc75",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -162,6 +162,14 @@ export class PersonalPanel extends li_BaseView {
|
||||
}
|
||||
|
||||
private openFavorites() {
|
||||
TipsPanel.show(LanguageUtils.getText("rankpanel.comingsoon"));
|
||||
NavigationManager.Instance.openSubPanel(
|
||||
"GirlCollectionPanel",
|
||||
this.node,
|
||||
null,
|
||||
{
|
||||
openAnimation: PageTransitionType.SLIDE_LEFT,
|
||||
closeAnimation: PageTransitionType.SLIDE_RIGHT,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,374 @@
|
||||
import { _decorator, Component, Node } from "cc";
|
||||
import { _decorator, Component, Node, ScrollView } from "cc";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import { GirlService } from "../../network/services/GirlService";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { DataManager, DataId } from "../../data/DataManager";
|
||||
import { GirlData } from "../../data/GirlData";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
import HXZ_ScrollViewList from "../../../Main/Common/ScrollViewList";
|
||||
import { RankItem } from "../../uiitems/RankItem";
|
||||
import { logger } from "../../../Main/Common/Logger";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("RankPanel")
|
||||
export class RankPanel extends li_BaseView {}
|
||||
export class RankPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
// 虚拟列表组件
|
||||
private scrollViewList: HXZ_ScrollViewList = null;
|
||||
|
||||
// 排行榜项模板
|
||||
private rankItemInst: RankItem;
|
||||
|
||||
// 当前选中的榜单类型
|
||||
private currentRankType: proto.cs.EnmRankType = proto.cs.EnmRankType.ERT_Day;
|
||||
|
||||
// 分页状态
|
||||
private currentPage: number = 1;
|
||||
private pageLimit: number = 20;
|
||||
private isLoadingMore: boolean = false;
|
||||
private hasMoreData: boolean = true;
|
||||
|
||||
// 记录上次触发加载的 ID,避免重复触发
|
||||
private lastLoadTriggerId: number = -1;
|
||||
|
||||
// 榜单切换按钮
|
||||
private dayRankBtn: Node;
|
||||
private weekRankBtn: Node;
|
||||
private monthRankBtn: Node;
|
||||
|
||||
// 滚动视图
|
||||
private rankScroll: Node;
|
||||
private rankScrollView: ScrollView = null;
|
||||
|
||||
onLoadCT() {
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
// 获取榜单切换按钮
|
||||
this.dayRankBtn = this._nodeTab.dayRankBtn;
|
||||
this.weekRankBtn = this._nodeTab.weekRankBtn;
|
||||
this.monthRankBtn = this._nodeTab.monthRankBtn;
|
||||
|
||||
// 获取滚动视图
|
||||
this.rankScroll = this._nodeTab.rankScroll;
|
||||
|
||||
// 获取推荐列表的 ScrollView 组件
|
||||
if (this.rankScroll) {
|
||||
this.rankScrollView = this.rankScroll.getComponent(ScrollView);
|
||||
|
||||
// 获取虚拟列表组件(需要在场景中手动添加 HXZ_ScrollViewList 组件)
|
||||
this.scrollViewList = this.rankScroll.getComponent(HXZ_ScrollViewList);
|
||||
if (!this.scrollViewList) {
|
||||
logger.warn(
|
||||
"[RankPanel] rankScroll 节点缺少 HXZ_ScrollViewList 组件,请在编辑器中添加"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取排行榜项模板
|
||||
this.rankItemInst = this._nodeTab.RankItem?.getComponent(RankItem);
|
||||
if (this.rankItemInst) {
|
||||
this.rankItemInst.node.active = false;
|
||||
}
|
||||
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
openUIDataCT(data: any): void {
|
||||
// 默认打开日榜
|
||||
this.switchRankType(proto.cs.EnmRankType.ERT_Day);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听
|
||||
*/
|
||||
private registerListener() {
|
||||
// 榜单切换按钮
|
||||
if (this.dayRankBtn) {
|
||||
GButton.BandClick(this.dayRankBtn, this.openDayRank, this);
|
||||
}
|
||||
if (this.weekRankBtn) {
|
||||
GButton.BandClick(this.weekRankBtn, this.openWeekRank, this);
|
||||
}
|
||||
if (this.monthRankBtn) {
|
||||
GButton.BandClick(this.monthRankBtn, this.openMonthRank, this);
|
||||
}
|
||||
|
||||
// 注册虚拟列表滚动事件(延迟到下一帧,确保虚拟列表已初始化)
|
||||
this.scheduleOnce(() => {
|
||||
if (this.scrollViewList) {
|
||||
// 监听 scrolling 事件,通过滚动偏移量检测是否接近底部
|
||||
this.scrollViewList.node.on("scrolling", this.onRankScrolling, this);
|
||||
logger.log("[RankPanel] 虚拟列表滚动事件已绑定");
|
||||
} else {
|
||||
logger.warn("[RankPanel] 无法绑定滚动事件,scrollViewList 未初始化");
|
||||
}
|
||||
}, 0.1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚拟列表渲染回调
|
||||
* 该方法需要在 Cocos Creator 编辑器中配置到 HXZ_ScrollViewList 的 renderEvent
|
||||
* @param itemNode 虚拟列表传入的节点
|
||||
* @param index 数据索引
|
||||
*/
|
||||
onRenderRankItem(itemNode: Node, index: number): void {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const girlIDs = girlData.getRankIdsByType(this.currentRankType);
|
||||
|
||||
if (index < girlIDs.length) {
|
||||
const girlId = girlIDs[index];
|
||||
const item = itemNode.getComponent(RankItem);
|
||||
|
||||
if (!item) {
|
||||
logger.error(`[RankPanel] 节点缺少 RankItem 组件,index: ${index}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// 确保节点已初始化
|
||||
if (!item._initialized) {
|
||||
item.init();
|
||||
}
|
||||
|
||||
// 刷新数据(index + 1 作为排名序号)
|
||||
item.refresh(girlId, index + 1);
|
||||
itemNode.active = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开日榜
|
||||
*/
|
||||
openDayRank() {
|
||||
this.switchRankType(proto.cs.EnmRankType.ERT_Day);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开周榜
|
||||
*/
|
||||
openWeekRank() {
|
||||
this.switchRankType(proto.cs.EnmRankType.ERT_Week);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开月榜
|
||||
*/
|
||||
openMonthRank() {
|
||||
this.switchRankType(proto.cs.EnmRankType.ERT_Month);
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换榜单类型
|
||||
* @param rankType 榜单类型
|
||||
*/
|
||||
private async switchRankType(rankType: proto.cs.EnmRankType) {
|
||||
// 如果是同一个榜单,不重复请求
|
||||
if (
|
||||
this.currentRankType === rankType &&
|
||||
this.scrollViewList?.numItems > 0
|
||||
) {
|
||||
logger.log(`[RankPanel] 当前已是该榜单类型: ${rankType}`);
|
||||
this.updateTabState(rankType);
|
||||
return;
|
||||
}
|
||||
|
||||
this.currentRankType = rankType;
|
||||
|
||||
// 重置分页状态
|
||||
this.currentPage = 1;
|
||||
this.hasMoreData = true;
|
||||
this.isLoadingMore = false;
|
||||
this.lastLoadTriggerId = -1;
|
||||
|
||||
// 请求榜单数据
|
||||
await this.reqGirlRankData(rankType);
|
||||
|
||||
// 更新虚拟列表
|
||||
if (this.scrollViewList) {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const girlIDs = girlData.getRankIdsByType(rankType);
|
||||
|
||||
this.scrollViewList.numItems = girlIDs.length;
|
||||
logger.log(
|
||||
`[RankPanel] 切换到榜单类型 ${rankType},共 ${girlIDs.length} 项`
|
||||
);
|
||||
} else {
|
||||
logger.warn("[RankPanel] scrollViewList 未初始化");
|
||||
}
|
||||
|
||||
// 更新标签页状态
|
||||
this.updateTabState(rankType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新标签页状态
|
||||
* @param rankType 当前榜单类型
|
||||
*/
|
||||
private updateTabState(rankType: proto.cs.EnmRankType) {
|
||||
if (this.dayRankBtn && this.dayRankBtn.children.length >= 2) {
|
||||
this.dayRankBtn.children[0].active =
|
||||
rankType !== proto.cs.EnmRankType.ERT_Day;
|
||||
this.dayRankBtn.children[1].active =
|
||||
rankType === proto.cs.EnmRankType.ERT_Day;
|
||||
}
|
||||
|
||||
if (this.weekRankBtn && this.weekRankBtn.children.length >= 2) {
|
||||
this.weekRankBtn.children[0].active =
|
||||
rankType !== proto.cs.EnmRankType.ERT_Week;
|
||||
this.weekRankBtn.children[1].active =
|
||||
rankType === proto.cs.EnmRankType.ERT_Week;
|
||||
}
|
||||
|
||||
if (this.monthRankBtn && this.monthRankBtn.children.length >= 2) {
|
||||
this.monthRankBtn.children[0].active =
|
||||
rankType !== proto.cs.EnmRankType.ERT_Month;
|
||||
this.monthRankBtn.children[1].active =
|
||||
rankType === proto.cs.EnmRankType.ERT_Month;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 滚动中回调,基于虚拟列表 displayData 检测并触发分页加载
|
||||
* 当显示到接近已加载数据末尾时(倒数第3个),自动加载下一页
|
||||
*/
|
||||
private onRankScrolling(): void {
|
||||
if (!this.scrollViewList) return;
|
||||
|
||||
// 获取虚拟列表的 displayData 和总数
|
||||
const displayData = this.scrollViewList.displayData;
|
||||
const numItems = this.scrollViewList.numItems;
|
||||
|
||||
// 检查数据有效性
|
||||
if (!displayData || displayData.length === 0 || numItems === 0) return;
|
||||
|
||||
// 获取当前显示的最后一个 item 的 ID
|
||||
const lastDisplayedId = displayData[displayData.length - 1].id;
|
||||
|
||||
// 触发条件:显示到倒数第 3 个 item 时开始加载下一页
|
||||
const threshold = numItems - 3;
|
||||
|
||||
if (
|
||||
lastDisplayedId >= threshold &&
|
||||
lastDisplayedId > this.lastLoadTriggerId
|
||||
) {
|
||||
logger.log(
|
||||
`[RankPanel] 接近末尾 (${lastDisplayedId}/${numItems}),触发加载第 ${
|
||||
this.currentPage + 1
|
||||
} 页`
|
||||
);
|
||||
|
||||
// 记录本次触发的 ID,避免重复触发
|
||||
this.lastLoadTriggerId = lastDisplayedId;
|
||||
|
||||
// 触发分页加载
|
||||
this.loadMoreRankData();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载下一页排行榜数据
|
||||
*/
|
||||
private async loadMoreRankData(): Promise<void> {
|
||||
// 防止重复加载
|
||||
if (this.isLoadingMore) {
|
||||
logger.log("[RankPanel] 正在加载中,跳过");
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否还有更多数据
|
||||
if (!this.hasMoreData) {
|
||||
logger.log("[RankPanel] 没有更多数据了");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
this.isLoadingMore = true;
|
||||
this.currentPage++;
|
||||
|
||||
logger.log(`[RankPanel] 开始加载第 ${this.currentPage} 页排行榜数据`);
|
||||
|
||||
const reqData = {
|
||||
rankType: this.currentRankType,
|
||||
page: this.currentPage,
|
||||
limit: this.pageLimit,
|
||||
};
|
||||
|
||||
const res = await GirlService.I.reqGirlRankData(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
|
||||
// 追加数据到 GirlData
|
||||
girlData.addRankData(this.currentRankType, res.data);
|
||||
|
||||
// 检查是否还有更多数据
|
||||
const girls = res.data.girls || [];
|
||||
if (girls.length < this.pageLimit) {
|
||||
this.hasMoreData = false;
|
||||
logger.log("[RankPanel] 已加载所有排行榜数据");
|
||||
}
|
||||
|
||||
// 使用虚拟列表:更新总数量,自动触发渲染
|
||||
if (this.scrollViewList) {
|
||||
const allGirlIDs = girlData.getRankIdsByType(this.currentRankType);
|
||||
this.scrollViewList.numItems = allGirlIDs.length;
|
||||
logger.log(
|
||||
`[RankPanel] 第 ${this.currentPage} 页加载完成,新增 ${girls.length} 项,总计 ${allGirlIDs.length} 项`
|
||||
);
|
||||
} else {
|
||||
logger.warn("[RankPanel] scrollViewList 未初始化,无法更新列表");
|
||||
}
|
||||
} else {
|
||||
logger.warn("[RankPanel] 加载下一页排行榜数据失败:", res);
|
||||
// 加载失败,回退页码
|
||||
this.currentPage--;
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error("[RankPanel] 加载下一页排行榜数据异常:", error);
|
||||
// 加载失败,回退页码
|
||||
this.currentPage--;
|
||||
} finally {
|
||||
this.isLoadingMore = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取排行榜数据
|
||||
* @param type 榜单类型
|
||||
*/
|
||||
private async reqGirlRankData(type: proto.cs.EnmRankType) {
|
||||
const reqData = {
|
||||
rankType: type,
|
||||
page: 1,
|
||||
limit: this.pageLimit,
|
||||
};
|
||||
let res = await GirlService.I.reqGirlRankData(reqData);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setGirlRank(type, resData);
|
||||
|
||||
// 检查是否还有更多数据
|
||||
const girls = resData.girls || [];
|
||||
if (girls.length < this.pageLimit) {
|
||||
this.hasMoreData = false;
|
||||
logger.log("[RankPanel] 首次加载数据不足一页,无需分页");
|
||||
}
|
||||
|
||||
logger.log(
|
||||
`[RankPanel] 榜单类型 ${type} 首次加载完成,共 ${girls.length} 项`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy(): void {
|
||||
logger.log("[RankPanel] onDestroy called");
|
||||
|
||||
// 移除虚拟列表滚动事件监听
|
||||
if (this.scrollViewList) {
|
||||
this.scrollViewList.node.off("scrolling", this.onRankScrolling, this);
|
||||
logger.log("[RankPanel] 虚拟列表滚动事件已移除");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,277 @@
|
||||
import { _decorator, EditBox, Label } from "cc";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* 注册页面
|
||||
* 预制体位于 resources/loginPanel/RegisterPanel
|
||||
*/
|
||||
@ccclass("RegisterPanel")
|
||||
export class RegisterPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
// 验证码倒计时
|
||||
private _countdown: number = 0;
|
||||
private _countdownTimer: any = null;
|
||||
|
||||
/**
|
||||
* 组件初始化时调用
|
||||
*/
|
||||
onLoadCT(): void {
|
||||
// 解析节点,将子节点存储到 _nodeTab 中
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
// 初始化UI
|
||||
this.initUI();
|
||||
|
||||
// 注册事件监听
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化UI
|
||||
*/
|
||||
private initUI(): void {
|
||||
// 初始化发送按钮状态
|
||||
this.updateSendBtnState(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听
|
||||
*/
|
||||
private registerListener(): void {
|
||||
// 绑定发送验证码按钮点击事件
|
||||
if (this._nodeTab.SendBtn) {
|
||||
GButton.BandClick(this._nodeTab.SendBtn, this.onClickSendCode, this);
|
||||
}
|
||||
|
||||
// 绑定注册按钮点击事件
|
||||
if (this._nodeTab.RegisterBtn) {
|
||||
GButton.BandClick(this._nodeTab.RegisterBtn, this.onClickRegister, this);
|
||||
}
|
||||
|
||||
// 绑定关闭按钮点击事件
|
||||
if (this._nodeTab.CloseBtn) {
|
||||
GButton.BandClick(this._nodeTab.CloseBtn, this.onClickClose, this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击发送验证码按钮
|
||||
*/
|
||||
private onClickSendCode(): void {
|
||||
// 如果正在倒计时,不允许再次发送
|
||||
if (this._countdown > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取邮箱输入框
|
||||
const emailInput = this._nodeTab.EmailInput?.getComponent(EditBox);
|
||||
|
||||
if (!emailInput) {
|
||||
console.error("未找到邮箱输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const email = emailInput.string.trim();
|
||||
|
||||
// 验证邮箱
|
||||
if (!email) {
|
||||
console.log("请输入邮箱");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isValidEmail(email)) {
|
||||
console.log("请输入有效的邮箱地址");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口发送验证码
|
||||
console.log("发送验证码到:", email);
|
||||
this.requestSendCode(email);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端接口发送验证码
|
||||
*/
|
||||
private requestSendCode(email: string): void {
|
||||
// TODO: 实现后端发送验证码接口调用
|
||||
// 示例:
|
||||
// const data = { email: email, type: 'register' };
|
||||
// NetworkManager.request('/api/sendCode', data, (response) => {
|
||||
// if (response.success) {
|
||||
// // 发送成功,开始倒计时
|
||||
// this.startCountdown();
|
||||
// } else {
|
||||
// // 发送失败,显示错误信息
|
||||
// console.error('发送验证码失败:', response.message);
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现发送验证码接口调用");
|
||||
// 临时模拟发送成功,启动倒计时
|
||||
this.startCountdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始倒计时
|
||||
*/
|
||||
private startCountdown(): void {
|
||||
this._countdown = 60; // 60秒倒计时
|
||||
this.updateSendBtnState(false);
|
||||
|
||||
this._countdownTimer = setInterval(() => {
|
||||
this._countdown--;
|
||||
|
||||
if (this._countdown <= 0) {
|
||||
// 倒计时结束
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
this.updateSendBtnState(true);
|
||||
} else {
|
||||
// 更新按钮文本
|
||||
this.updateSendBtnState(false);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新发送按钮状态
|
||||
*/
|
||||
private updateSendBtnState(canSend: boolean): void {
|
||||
if (!this._nodeTab.SendBtn) return;
|
||||
|
||||
const label = this._nodeTab.SendBtn.getComponentInChildren(Label);
|
||||
if (label) {
|
||||
if (canSend) {
|
||||
label.string = "发送验证码";
|
||||
} else {
|
||||
label.string = `${this._countdown}秒后重试`;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 可以设置按钮的可交互状态
|
||||
// const button = this._nodeTab.SendBtn.getComponent(Button);
|
||||
// if (button) {
|
||||
// button.interactable = canSend;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击注册按钮
|
||||
*/
|
||||
private onClickRegister(): void {
|
||||
// 获取输入框
|
||||
const emailInput = this._nodeTab.EmailInput?.getComponent(EditBox);
|
||||
const passwordInput = this._nodeTab.PasswordInput?.getComponent(EditBox);
|
||||
const codeInput = this._nodeTab.CodeInput?.getComponent(EditBox);
|
||||
|
||||
if (!emailInput || !passwordInput || !codeInput) {
|
||||
console.error("未找到输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const email = emailInput.string.trim();
|
||||
const password = passwordInput.string.trim();
|
||||
const code = codeInput.string.trim();
|
||||
|
||||
// 验证输入
|
||||
if (!email) {
|
||||
console.log("请输入邮箱");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isValidEmail(email)) {
|
||||
console.log("请输入有效的邮箱地址");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!password) {
|
||||
console.log("请输入密码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (password.length < 6) {
|
||||
console.log("密码长度不能少于6位");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!code) {
|
||||
console.log("请输入验证码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口进行注册
|
||||
console.log("注册:", email, password, code);
|
||||
this.requestRegister(email, password, code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端注册接口
|
||||
*/
|
||||
private requestRegister(email: string, password: string, code: string): void {
|
||||
// TODO: 实现后端注册接口调用
|
||||
// 示例:
|
||||
// const data = {
|
||||
// email: email,
|
||||
// password: password,
|
||||
// code: code
|
||||
// };
|
||||
// NetworkManager.request('/api/register', data, (response) => {
|
||||
// if (response.success) {
|
||||
// // 注册成功
|
||||
// console.log('注册成功');
|
||||
// // 关闭注册界面
|
||||
// this.close();
|
||||
// } else {
|
||||
// // 注册失败,显示错误信息
|
||||
// console.error('注册失败:', response.message);
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现注册接口调用");
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击关闭按钮
|
||||
*/
|
||||
private onClickClose(): void {
|
||||
// 清理倒计时定时器
|
||||
if (this._countdownTimer) {
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
}
|
||||
|
||||
// 关闭当前界面
|
||||
this.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证邮箱格式
|
||||
*/
|
||||
private isValidEmail(email: string): boolean {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
}
|
||||
|
||||
/**
|
||||
* 界面销毁时调用
|
||||
*/
|
||||
protected onDestroy(): void {
|
||||
// 清理倒计时定时器
|
||||
if (this._countdownTimer) {
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "565b780d-f431-4e60-aa02-73df95d28a88",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,279 @@
|
||||
import { _decorator, EditBox, Label } from "cc";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
import { ViewManager } from "../../../Main/Manager/ViewManager";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* 安全验证页面
|
||||
* 预制体位于 resources/loginPanel/SafeCheckPanel
|
||||
*/
|
||||
@ccclass("SafeCheckPanel")
|
||||
export class SafeCheckPanel extends li_BaseView {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
// 验证码倒计时
|
||||
private _countdown: number = 0;
|
||||
private _countdownTimer: any = null;
|
||||
|
||||
/**
|
||||
* 组件初始化时调用
|
||||
*/
|
||||
onLoadCT(): void {
|
||||
// 解析节点,将子节点存储到 _nodeTab 中
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
// 初始化UI
|
||||
this.initUI();
|
||||
|
||||
// 注册事件监听
|
||||
this.registerListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化UI
|
||||
*/
|
||||
private initUI(): void {
|
||||
// 初始化发送按钮状态
|
||||
this.updateSendBtnState(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听
|
||||
*/
|
||||
private registerListener(): void {
|
||||
// 绑定发送验证码按钮点击事件
|
||||
if (this._nodeTab.SendBtn) {
|
||||
GButton.BandClick(this._nodeTab.SendBtn, this.onClickSendCode, this);
|
||||
}
|
||||
|
||||
// 绑定确定按钮点击事件
|
||||
if (this._nodeTab.ConfirmBtn) {
|
||||
GButton.BandClick(this._nodeTab.ConfirmBtn, this.onClickConfirm, this);
|
||||
}
|
||||
|
||||
// 绑定关闭按钮点击事件
|
||||
if (this._nodeTab.CloseBtn) {
|
||||
GButton.BandClick(this._nodeTab.CloseBtn, this.onClickClose, this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击发送验证码按钮
|
||||
*/
|
||||
private onClickSendCode(): void {
|
||||
// 如果正在倒计时,不允许再次发送
|
||||
if (this._countdown > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取邮箱输入框
|
||||
const emailInput = this._nodeTab.EmailInput?.getComponent(EditBox);
|
||||
|
||||
if (!emailInput) {
|
||||
console.error("未找到邮箱输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const email = emailInput.string.trim();
|
||||
|
||||
// 验证邮箱
|
||||
if (!email) {
|
||||
console.log("请输入邮箱");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isValidEmail(email)) {
|
||||
console.log("请输入有效的邮箱地址");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口发送验证码
|
||||
console.log("发送验证码到:", email);
|
||||
this.requestSendCode(email);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端接口发送验证码
|
||||
*/
|
||||
private requestSendCode(email: string): void {
|
||||
// TODO: 实现后端发送验证码接口调用
|
||||
// 示例:
|
||||
// const data = { email: email, type: 'forgetPassword' };
|
||||
// NetworkManager.request('/api/sendCode', data, (response) => {
|
||||
// if (response.success) {
|
||||
// // 发送成功,开始倒计时
|
||||
// this.startCountdown();
|
||||
// } else {
|
||||
// // 发送失败,显示错误信息
|
||||
// console.error('发送验证码失败:', response.message);
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现发送验证码接口调用");
|
||||
// 临时模拟发送成功,启动倒计时
|
||||
this.startCountdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始倒计时
|
||||
*/
|
||||
private startCountdown(): void {
|
||||
this._countdown = 60; // 60秒倒计时
|
||||
this.updateSendBtnState(false);
|
||||
|
||||
this._countdownTimer = setInterval(() => {
|
||||
this._countdown--;
|
||||
|
||||
if (this._countdown <= 0) {
|
||||
// 倒计时结束
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
this.updateSendBtnState(true);
|
||||
} else {
|
||||
// 更新按钮文本
|
||||
this.updateSendBtnState(false);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新发送按钮状态
|
||||
*/
|
||||
private updateSendBtnState(canSend: boolean): void {
|
||||
if (!this._nodeTab.SendBtn) return;
|
||||
|
||||
const label = this._nodeTab.SendBtn.getComponentInChildren(Label);
|
||||
if (label) {
|
||||
if (canSend) {
|
||||
label.string = "发送验证码";
|
||||
} else {
|
||||
label.string = `${this._countdown}秒后重试`;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 可以设置按钮的可交互状态
|
||||
// const button = this._nodeTab.SendBtn.getComponent(Button);
|
||||
// if (button) {
|
||||
// button.interactable = canSend;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击确定按钮
|
||||
*/
|
||||
private onClickConfirm(): void {
|
||||
// 获取邮箱和验证码输入框
|
||||
const emailInput = this._nodeTab.EmailInput?.getComponent(EditBox);
|
||||
const codeInput = this._nodeTab.CodeInput?.getComponent(EditBox);
|
||||
|
||||
if (!emailInput || !codeInput) {
|
||||
console.error("未找到邮箱或验证码输入框");
|
||||
return;
|
||||
}
|
||||
|
||||
const email = emailInput.string.trim();
|
||||
const code = codeInput.string.trim();
|
||||
|
||||
// 验证输入
|
||||
if (!email) {
|
||||
console.log("请输入邮箱");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isValidEmail(email)) {
|
||||
console.log("请输入有效的邮箱地址");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
if (!code) {
|
||||
console.log("请输入验证码");
|
||||
// TODO: 显示提示信息
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 调用后端接口验证验证码
|
||||
console.log("验证验证码:", email, code);
|
||||
this.requestVerifyCode(email, code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用后端接口验证验证码
|
||||
*/
|
||||
private requestVerifyCode(email: string, code: string): void {
|
||||
// TODO: 实现后端验证验证码接口调用
|
||||
// 示例:
|
||||
// const data = {
|
||||
// email: email,
|
||||
// code: code,
|
||||
// type: 'forgetPassword'
|
||||
// };
|
||||
// NetworkManager.request('/api/verifyCode', data, (response) => {
|
||||
// if (response.success) {
|
||||
// // 验证成功,跳转到修改密码页面
|
||||
// this.openNewPasswordPanel(email, code);
|
||||
// } else {
|
||||
// // 验证失败,显示错误信息
|
||||
// console.error('验证码错误:', response.message);
|
||||
// // TODO: 显示错误提示
|
||||
// }
|
||||
// });
|
||||
|
||||
console.log("TODO: 实现验证验证码接口调用");
|
||||
// 临时模拟验证成功,跳转到修改密码页面
|
||||
this.openNewPasswordPanel(email, code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开修改密码页面
|
||||
*/
|
||||
private openNewPasswordPanel(email: string, code: string): void {
|
||||
// 关闭当前页面
|
||||
this.close();
|
||||
|
||||
// 打开修改密码页面,并传递邮箱和验证码信息
|
||||
ViewManager.I.openMainView("loginPanel/NewPasswordPanel", {
|
||||
email: email,
|
||||
code: code,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击关闭按钮
|
||||
*/
|
||||
private onClickClose(): void {
|
||||
// 清理倒计时定时器
|
||||
if (this._countdownTimer) {
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
}
|
||||
|
||||
// 关闭当前界面
|
||||
this.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证邮箱格式
|
||||
*/
|
||||
private isValidEmail(email: string): boolean {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
}
|
||||
|
||||
/**
|
||||
* 界面销毁时调用
|
||||
*/
|
||||
protected onDestroy(): void {
|
||||
// 清理倒计时定时器
|
||||
if (this._countdownTimer) {
|
||||
clearInterval(this._countdownTimer);
|
||||
this._countdownTimer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "d3dfdbed-8fb1-4348-b9d4-32c6b9406310",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -235,12 +235,14 @@ export class DetailImageItem extends Component {
|
||||
ResManager.I.changeRemoteSpriteFrame(this.img, newPath, () => {
|
||||
this.scaleToFillItem();
|
||||
});
|
||||
if (this.isVisible) {
|
||||
this.video.enabled = false;
|
||||
this.videoReady.enabled = true;
|
||||
} else {
|
||||
this.video.enabled = true;
|
||||
this.videoReady.enabled = false;
|
||||
if (this.type === proto.cs.EnmResType.ERT_Video) {
|
||||
if (this.isVisible) {
|
||||
this.video.enabled = false;
|
||||
this.videoReady.enabled = true;
|
||||
} else {
|
||||
this.video.enabled = true;
|
||||
this.videoReady.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import { EnvData } from "../data/EnvData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
import { GButton } from "../../Main/Common/GButton";
|
||||
import { GirlListPanel } from "../ui/panels/GirlListPanel";
|
||||
import { GirlCollectionPanel } from "../ui/panels/GirlCollectionPanel";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -84,8 +85,12 @@ export class GirlListItem extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
baseNode: GirlListPanel;
|
||||
refreshData(category: number, girlId: number, baseNode: GirlListPanel) {
|
||||
baseNode: GirlListPanel | GirlCollectionPanel;
|
||||
refreshData(
|
||||
category: number,
|
||||
girlId: number,
|
||||
baseNode: GirlListPanel | GirlCollectionPanel
|
||||
) {
|
||||
if (!this.stars) {
|
||||
this.stars = this.starParent.getComponentsInChildren(Sprite);
|
||||
}
|
||||
@@ -208,11 +213,16 @@ export class GirlListItem extends Component {
|
||||
const currentPanel = NavigationManager.Instance.getCurrentActivePanelNode();
|
||||
if (currentPanel) {
|
||||
const chatData = { girlId: this.id, base: currentPanel };
|
||||
NavigationManager.Instance.openSubPanel("ChatPanel", currentPanel, chatData, {
|
||||
openAnimation: PageTransitionType.NONE,
|
||||
closeAnimation: PageTransitionType.NONE,
|
||||
hideBasePanel: true,
|
||||
});
|
||||
NavigationManager.Instance.openSubPanel(
|
||||
"ChatPanel",
|
||||
currentPanel,
|
||||
chatData,
|
||||
{
|
||||
openAnimation: PageTransitionType.NONE,
|
||||
closeAnimation: PageTransitionType.NONE,
|
||||
hideBasePanel: true,
|
||||
}
|
||||
);
|
||||
} else {
|
||||
logger.warn("[GirlListItem] 无法获取当前激活的主页面");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
import {
|
||||
_decorator,
|
||||
Component,
|
||||
Label,
|
||||
Node,
|
||||
Size,
|
||||
Sprite,
|
||||
UITransform,
|
||||
} from "cc";
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { GButton } from "../../Main/Common/GButton";
|
||||
import { DataManager, DataId } from "../data/DataManager";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import LanguageUtils from "../../Main/Common/LanguageUtils";
|
||||
import ResManager from "../../Main/Manager/ResManager";
|
||||
import { EnvData } from "../data/EnvData";
|
||||
import {
|
||||
NavigationManager,
|
||||
PanelType,
|
||||
PageTransitionType,
|
||||
} from "../manager/NavigationManager";
|
||||
import { logger } from "../../Main/Common/Logger";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("RankItem")
|
||||
export class RankItem extends Component {
|
||||
private _nodeTab: any = {};
|
||||
|
||||
private rankIndex: Label;
|
||||
private lv1: Node;
|
||||
private lv2: Node;
|
||||
private lv3: Node;
|
||||
|
||||
private rankPic: Sprite;
|
||||
private girlName: Label;
|
||||
private tag: Label;
|
||||
|
||||
private heartParent: Node;
|
||||
private hearts: Sprite[] = [];
|
||||
|
||||
private chatBtn: Node;
|
||||
private detailBtn: Node;
|
||||
|
||||
private id: number;
|
||||
|
||||
// 标记是否已初始化(用于虚拟列表复用)
|
||||
public _initialized: boolean = false;
|
||||
|
||||
// 兼容原有调用方式的 init 方法
|
||||
init() {
|
||||
if (this._initialized) {
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.parseNode(this.node, this._nodeTab);
|
||||
|
||||
this.rankIndex = this._nodeTab.rankLabel?.getComponent(Label);
|
||||
this.lv1 = this._nodeTab.lv1;
|
||||
this.lv2 = this._nodeTab.lv2;
|
||||
this.lv3 = this._nodeTab.lv3;
|
||||
|
||||
this.rankPic = this._nodeTab.avatar.getComponent(Sprite);
|
||||
this.girlName = this._nodeTab.name?.getComponent(Label);
|
||||
this.tag = this._nodeTab.tag?.getComponent(Label);
|
||||
|
||||
this.heartParent = this._nodeTab.heartBg;
|
||||
|
||||
if (this.heartParent) {
|
||||
this.heartParent.children.forEach((a) =>
|
||||
this.hearts.push(a.getComponent(Sprite))
|
||||
);
|
||||
}
|
||||
|
||||
this.chatBtn = this._nodeTab.chatBtn;
|
||||
this.detailBtn = this._nodeTab.detailBtn;
|
||||
|
||||
if (this.chatBtn) {
|
||||
GButton.BandClick(this.chatBtn, this.chatToHer, this);
|
||||
}
|
||||
if (this.detailBtn) {
|
||||
GButton.BandClick(this.detailBtn, this.gotoDetail, this);
|
||||
}
|
||||
|
||||
this._initialized = true;
|
||||
}
|
||||
|
||||
// 节点回收到对象池时调用,重置状态
|
||||
reset(): void {
|
||||
this.id = -1;
|
||||
this.node.active = false;
|
||||
}
|
||||
|
||||
picSize: Size = new Size(100, 100);
|
||||
/**
|
||||
* 刷新排行榜项显示
|
||||
* @param girlId 技师ID
|
||||
* @param rankIndex 排名序号(从1开始)
|
||||
*/
|
||||
refresh(girlId: number, rankIndex: number) {
|
||||
this.id = girlId;
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const category = girlData.getGrilCategoryById(girlId);
|
||||
|
||||
// 显示排名
|
||||
if (this.rankIndex) {
|
||||
this.lv1.active = rankIndex === 1;
|
||||
this.lv2.active = rankIndex === 2;
|
||||
this.lv3.active = rankIndex === 3;
|
||||
|
||||
this.rankIndex.node.active = rankIndex > 3;
|
||||
this.rankIndex.string = rankIndex.toString();
|
||||
}
|
||||
|
||||
// 数据
|
||||
let nameKey = girlData.getGrilName(category.toString(), this.id);
|
||||
if (this.girlName) {
|
||||
this.girlName.string = LanguageUtils.getText(nameKey);
|
||||
}
|
||||
|
||||
let tagKey = girlData.getGrilTagKey(category.toString(), this.id);
|
||||
if (this.tag) {
|
||||
this.tag.string = LanguageUtils.getText(tagKey);
|
||||
}
|
||||
|
||||
if (this.heartParent) {
|
||||
this.heartParent.active = true;
|
||||
}
|
||||
|
||||
// 加载头像
|
||||
let avatarPath = girlData.getGrilAvatar(category.toString(), this.id);
|
||||
|
||||
const envData = DataManager.I.getDataById<EnvData>(DataId.Env);
|
||||
let newPath = envData.cdn + "/" + "Girls/" + avatarPath + ".png";
|
||||
|
||||
if (this.rankPic) {
|
||||
ResManager.I.changeRemoteSpriteFrame(this.rankPic, newPath, () => {
|
||||
this.doScaleToFill(this.rankPic, this.picSize);
|
||||
});
|
||||
}
|
||||
|
||||
// 显示好感度
|
||||
const star = girlData.getStar(category.toString(), this.id);
|
||||
for (let i = 0; i < this.hearts.length; i++) {
|
||||
const element = this.hearts[i];
|
||||
if (star > i) {
|
||||
ResManager.I.changeResourceSpriteFrame(
|
||||
element,
|
||||
"ui/common/heart/heart"
|
||||
);
|
||||
} else {
|
||||
ResManager.I.changeResourceSpriteFrame(
|
||||
element,
|
||||
"ui/common/heart/heart_empty"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
doScaleToFill(img: Sprite, size: Size) {
|
||||
if (!img || !img.spriteFrame) return;
|
||||
|
||||
const itemSize = size;
|
||||
const imageSize = img.spriteFrame.originalSize;
|
||||
|
||||
if (
|
||||
itemSize.width === 0 ||
|
||||
itemSize.height === 0 ||
|
||||
imageSize.width === 0 ||
|
||||
imageSize.height === 0
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const scaleX = itemSize.width / imageSize.width;
|
||||
const scaleY = itemSize.height / imageSize.height;
|
||||
const scale = Math.max(scaleX, scaleY);
|
||||
|
||||
// 设置Sprite的sizeMode为CUSTOM,允许自定义大小
|
||||
img.sizeMode = Sprite.SizeMode.CUSTOM;
|
||||
|
||||
// 获取图片节点的UITransform并设置大小
|
||||
const imgTransform = img.node.getComponent(UITransform);
|
||||
if (imgTransform) {
|
||||
imgTransform.setContentSize(
|
||||
imageSize.width * scale,
|
||||
imageSize.height * scale
|
||||
);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 聊天按钮点击事件
|
||||
*/
|
||||
chatToHer() {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
|
||||
NavigationManager.Instance.setSelectedGirlId(this.id);
|
||||
NavigationManager.Instance.setSelectedCategoryId(
|
||||
girlData.getGrilCategoryById(this.id)
|
||||
);
|
||||
|
||||
// 直接在当前页面打开ChatPanel作为子页面
|
||||
const currentPanel = NavigationManager.Instance.getCurrentActivePanelNode();
|
||||
if (currentPanel) {
|
||||
const chatData = { girlId: this.id, base: currentPanel };
|
||||
NavigationManager.Instance.openSubPanel(
|
||||
"ChatPanel",
|
||||
currentPanel,
|
||||
chatData,
|
||||
{
|
||||
openAnimation: PageTransitionType.NONE,
|
||||
closeAnimation: PageTransitionType.NONE,
|
||||
hideBasePanel: true,
|
||||
}
|
||||
);
|
||||
} else {
|
||||
logger.warn("[RankItem] 无法获取当前激活的主页面");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情按钮点击事件
|
||||
*/
|
||||
gotoDetail() {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
|
||||
NavigationManager.Instance.setSelectedGirlId(this.id);
|
||||
NavigationManager.Instance.setSelectedCategoryId(
|
||||
girlData.getGrilCategoryById(this.id)
|
||||
);
|
||||
|
||||
// 以subpanel方式打开GirlDetailPanel
|
||||
const currentPanel = NavigationManager.Instance.getCurrentActivePanelNode();
|
||||
if (currentPanel) {
|
||||
NavigationManager.Instance.openSubPanel(
|
||||
"GirlDetailPanel",
|
||||
currentPanel,
|
||||
this.id,
|
||||
{
|
||||
openAnimation: PageTransitionType.NONE,
|
||||
closeAnimation: PageTransitionType.NONE,
|
||||
hideBasePanel: true, // 隐藏底层panel,实现全屏显示
|
||||
}
|
||||
);
|
||||
} else {
|
||||
logger.warn("[RankItem] 无法获取当前激活的主页面");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "995c8b1c-a5b7-4e49-bf44-50a6a89fa4f8",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -4603,6 +4603,420 @@ toJSON(): { [k: string]: any };
|
||||
static getTypeUrl(typeUrlPrefix?: string): string;
|
||||
}
|
||||
|
||||
/** Properties of a CSFBCodeReq. */
|
||||
interface ICSFBCodeReq {
|
||||
|
||||
/** CSFBCodeReq pixelAppId */
|
||||
pixelAppId?: (string|null);
|
||||
|
||||
/** CSFBCodeReq fbc */
|
||||
fbc?: (string|null);
|
||||
|
||||
/** CSFBCodeReq fbp */
|
||||
fbp?: (string|null);
|
||||
|
||||
/** CSFBCodeReq userAgent */
|
||||
userAgent?: (string|null);
|
||||
}
|
||||
|
||||
/** Represents a CSFBCodeReq. */
|
||||
class CSFBCodeReq implements ICSFBCodeReq {
|
||||
|
||||
/**
|
||||
* Constructs a new CSFBCodeReq.
|
||||
* @param [properties] Properties to set
|
||||
*/
|
||||
constructor(properties?: cs.ICSFBCodeReq);
|
||||
|
||||
/** CSFBCodeReq pixelAppId. */
|
||||
pixelAppId: string;
|
||||
|
||||
/** CSFBCodeReq fbc. */
|
||||
fbc: string;
|
||||
|
||||
/** CSFBCodeReq fbp. */
|
||||
fbp: string;
|
||||
|
||||
/** CSFBCodeReq userAgent. */
|
||||
userAgent: string;
|
||||
|
||||
/**
|
||||
* Creates a new CSFBCodeReq instance using the specified properties.
|
||||
* @param [properties] Properties to set
|
||||
* @returns CSFBCodeReq instance
|
||||
*/
|
||||
static create(properties?: cs.ICSFBCodeReq): cs.CSFBCodeReq;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeReq message. Does not implicitly {@link cs.CSFBCodeReq.verify|verify} messages.
|
||||
* @param message CSFBCodeReq message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encode(message: cs.ICSFBCodeReq, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeReq message, length delimited. Does not implicitly {@link cs.CSFBCodeReq.verify|verify} messages.
|
||||
* @param message CSFBCodeReq message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encodeDelimited(message: cs.ICSFBCodeReq, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeReq message from the specified reader or buffer.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @param [length] Message length if known beforehand
|
||||
* @returns CSFBCodeReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): cs.CSFBCodeReq;
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeReq message from the specified reader or buffer, length delimited.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @returns CSFBCodeReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): cs.CSFBCodeReq;
|
||||
|
||||
/**
|
||||
* Verifies a CSFBCodeReq message.
|
||||
* @param message Plain object to verify
|
||||
* @returns `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
static verify(message: { [k: string]: any }): (string|null);
|
||||
|
||||
/**
|
||||
* Creates a CSFBCodeReq message from a plain object. Also converts values to their respective internal types.
|
||||
* @param object Plain object
|
||||
* @returns CSFBCodeReq
|
||||
*/
|
||||
static fromObject(object: { [k: string]: any }): cs.CSFBCodeReq;
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSFBCodeReq message. Also converts values to other types if specified.
|
||||
* @param message CSFBCodeReq
|
||||
* @param [options] Conversion options
|
||||
* @returns Plain object
|
||||
*/
|
||||
static toObject(message: cs.CSFBCodeReq, options?: $protobuf.IConversionOptions): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Converts this CSFBCodeReq to JSON.
|
||||
* @returns JSON object
|
||||
*/
|
||||
toJSON(): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSFBCodeReq
|
||||
* @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns The default type url
|
||||
*/
|
||||
static getTypeUrl(typeUrlPrefix?: string): string;
|
||||
}
|
||||
|
||||
/** Properties of a CSFBCodeRes. */
|
||||
interface ICSFBCodeRes {
|
||||
|
||||
/** CSFBCodeRes fbCode */
|
||||
fbCode?: (string|null);
|
||||
}
|
||||
|
||||
/** Represents a CSFBCodeRes. */
|
||||
class CSFBCodeRes implements ICSFBCodeRes {
|
||||
|
||||
/**
|
||||
* Constructs a new CSFBCodeRes.
|
||||
* @param [properties] Properties to set
|
||||
*/
|
||||
constructor(properties?: cs.ICSFBCodeRes);
|
||||
|
||||
/** CSFBCodeRes fbCode. */
|
||||
fbCode: string;
|
||||
|
||||
/**
|
||||
* Creates a new CSFBCodeRes instance using the specified properties.
|
||||
* @param [properties] Properties to set
|
||||
* @returns CSFBCodeRes instance
|
||||
*/
|
||||
static create(properties?: cs.ICSFBCodeRes): cs.CSFBCodeRes;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeRes message. Does not implicitly {@link cs.CSFBCodeRes.verify|verify} messages.
|
||||
* @param message CSFBCodeRes message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encode(message: cs.ICSFBCodeRes, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeRes message, length delimited. Does not implicitly {@link cs.CSFBCodeRes.verify|verify} messages.
|
||||
* @param message CSFBCodeRes message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encodeDelimited(message: cs.ICSFBCodeRes, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeRes message from the specified reader or buffer.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @param [length] Message length if known beforehand
|
||||
* @returns CSFBCodeRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): cs.CSFBCodeRes;
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeRes message from the specified reader or buffer, length delimited.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @returns CSFBCodeRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): cs.CSFBCodeRes;
|
||||
|
||||
/**
|
||||
* Verifies a CSFBCodeRes message.
|
||||
* @param message Plain object to verify
|
||||
* @returns `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
static verify(message: { [k: string]: any }): (string|null);
|
||||
|
||||
/**
|
||||
* Creates a CSFBCodeRes message from a plain object. Also converts values to their respective internal types.
|
||||
* @param object Plain object
|
||||
* @returns CSFBCodeRes
|
||||
*/
|
||||
static fromObject(object: { [k: string]: any }): cs.CSFBCodeRes;
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSFBCodeRes message. Also converts values to other types if specified.
|
||||
* @param message CSFBCodeRes
|
||||
* @param [options] Conversion options
|
||||
* @returns Plain object
|
||||
*/
|
||||
static toObject(message: cs.CSFBCodeRes, options?: $protobuf.IConversionOptions): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Converts this CSFBCodeRes to JSON.
|
||||
* @returns JSON object
|
||||
*/
|
||||
toJSON(): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSFBCodeRes
|
||||
* @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns The default type url
|
||||
*/
|
||||
static getTypeUrl(typeUrlPrefix?: string): string;
|
||||
}
|
||||
|
||||
/** EnmPointEvent enum. */
|
||||
enum EnmPointEvent {
|
||||
EPE_FBCode = 0,
|
||||
EPE_LoadA = 1,
|
||||
EPE_LoadB = 2,
|
||||
EPE_LoadGame = 3
|
||||
}
|
||||
|
||||
/** Properties of a CSPointEventReq. */
|
||||
interface ICSPointEventReq {
|
||||
|
||||
/** CSPointEventReq fbCode */
|
||||
fbCode?: (string|null);
|
||||
|
||||
/** CSPointEventReq point */
|
||||
point?: (number|null);
|
||||
}
|
||||
|
||||
/** Represents a CSPointEventReq. */
|
||||
class CSPointEventReq implements ICSPointEventReq {
|
||||
|
||||
/**
|
||||
* Constructs a new CSPointEventReq.
|
||||
* @param [properties] Properties to set
|
||||
*/
|
||||
constructor(properties?: cs.ICSPointEventReq);
|
||||
|
||||
/** CSPointEventReq fbCode. */
|
||||
fbCode: string;
|
||||
|
||||
/** CSPointEventReq point. */
|
||||
point: number;
|
||||
|
||||
/**
|
||||
* Creates a new CSPointEventReq instance using the specified properties.
|
||||
* @param [properties] Properties to set
|
||||
* @returns CSPointEventReq instance
|
||||
*/
|
||||
static create(properties?: cs.ICSPointEventReq): cs.CSPointEventReq;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventReq message. Does not implicitly {@link cs.CSPointEventReq.verify|verify} messages.
|
||||
* @param message CSPointEventReq message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encode(message: cs.ICSPointEventReq, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventReq message, length delimited. Does not implicitly {@link cs.CSPointEventReq.verify|verify} messages.
|
||||
* @param message CSPointEventReq message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encodeDelimited(message: cs.ICSPointEventReq, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventReq message from the specified reader or buffer.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @param [length] Message length if known beforehand
|
||||
* @returns CSPointEventReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): cs.CSPointEventReq;
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventReq message from the specified reader or buffer, length delimited.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @returns CSPointEventReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): cs.CSPointEventReq;
|
||||
|
||||
/**
|
||||
* Verifies a CSPointEventReq message.
|
||||
* @param message Plain object to verify
|
||||
* @returns `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
static verify(message: { [k: string]: any }): (string|null);
|
||||
|
||||
/**
|
||||
* Creates a CSPointEventReq message from a plain object. Also converts values to their respective internal types.
|
||||
* @param object Plain object
|
||||
* @returns CSPointEventReq
|
||||
*/
|
||||
static fromObject(object: { [k: string]: any }): cs.CSPointEventReq;
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSPointEventReq message. Also converts values to other types if specified.
|
||||
* @param message CSPointEventReq
|
||||
* @param [options] Conversion options
|
||||
* @returns Plain object
|
||||
*/
|
||||
static toObject(message: cs.CSPointEventReq, options?: $protobuf.IConversionOptions): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Converts this CSPointEventReq to JSON.
|
||||
* @returns JSON object
|
||||
*/
|
||||
toJSON(): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSPointEventReq
|
||||
* @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns The default type url
|
||||
*/
|
||||
static getTypeUrl(typeUrlPrefix?: string): string;
|
||||
}
|
||||
|
||||
/** Properties of a CSPointEventRes. */
|
||||
interface ICSPointEventRes {
|
||||
}
|
||||
|
||||
/** Represents a CSPointEventRes. */
|
||||
class CSPointEventRes implements ICSPointEventRes {
|
||||
|
||||
/**
|
||||
* Constructs a new CSPointEventRes.
|
||||
* @param [properties] Properties to set
|
||||
*/
|
||||
constructor(properties?: cs.ICSPointEventRes);
|
||||
|
||||
/**
|
||||
* Creates a new CSPointEventRes instance using the specified properties.
|
||||
* @param [properties] Properties to set
|
||||
* @returns CSPointEventRes instance
|
||||
*/
|
||||
static create(properties?: cs.ICSPointEventRes): cs.CSPointEventRes;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventRes message. Does not implicitly {@link cs.CSPointEventRes.verify|verify} messages.
|
||||
* @param message CSPointEventRes message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encode(message: cs.ICSPointEventRes, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventRes message, length delimited. Does not implicitly {@link cs.CSPointEventRes.verify|verify} messages.
|
||||
* @param message CSPointEventRes message or plain object to encode
|
||||
* @param [writer] Writer to encode to
|
||||
* @returns Writer
|
||||
*/
|
||||
static encodeDelimited(message: cs.ICSPointEventRes, writer?: $protobuf.Writer): $protobuf.Writer;
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventRes message from the specified reader or buffer.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @param [length] Message length if known beforehand
|
||||
* @returns CSPointEventRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): cs.CSPointEventRes;
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventRes message from the specified reader or buffer, length delimited.
|
||||
* @param reader Reader or buffer to decode from
|
||||
* @returns CSPointEventRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): cs.CSPointEventRes;
|
||||
|
||||
/**
|
||||
* Verifies a CSPointEventRes message.
|
||||
* @param message Plain object to verify
|
||||
* @returns `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
static verify(message: { [k: string]: any }): (string|null);
|
||||
|
||||
/**
|
||||
* Creates a CSPointEventRes message from a plain object. Also converts values to their respective internal types.
|
||||
* @param object Plain object
|
||||
* @returns CSPointEventRes
|
||||
*/
|
||||
static fromObject(object: { [k: string]: any }): cs.CSPointEventRes;
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSPointEventRes message. Also converts values to other types if specified.
|
||||
* @param message CSPointEventRes
|
||||
* @param [options] Conversion options
|
||||
* @returns Plain object
|
||||
*/
|
||||
static toObject(message: cs.CSPointEventRes, options?: $protobuf.IConversionOptions): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Converts this CSPointEventRes to JSON.
|
||||
* @returns JSON object
|
||||
*/
|
||||
toJSON(): { [k: string]: any };
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSPointEventRes
|
||||
* @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns The default type url
|
||||
*/
|
||||
static getTypeUrl(typeUrlPrefix?: string): string;
|
||||
}
|
||||
|
||||
/** Category enum. */
|
||||
enum Category {
|
||||
Category_mature = 0,
|
||||
|
||||
@@ -10715,6 +10715,910 @@ $root.cs = (function() {
|
||||
return CSRecommendRes;
|
||||
})();
|
||||
|
||||
cs.CSFBCodeReq = (function() {
|
||||
|
||||
/**
|
||||
* Properties of a CSFBCodeReq.
|
||||
* @memberof cs
|
||||
* @interface ICSFBCodeReq
|
||||
* @property {string|null} [pixelAppId] CSFBCodeReq pixelAppId
|
||||
* @property {string|null} [fbc] CSFBCodeReq fbc
|
||||
* @property {string|null} [fbp] CSFBCodeReq fbp
|
||||
* @property {string|null} [userAgent] CSFBCodeReq userAgent
|
||||
*/
|
||||
|
||||
/**
|
||||
* Constructs a new CSFBCodeReq.
|
||||
* @memberof cs
|
||||
* @classdesc Represents a CSFBCodeReq.
|
||||
* @implements ICSFBCodeReq
|
||||
* @constructor
|
||||
* @param {cs.ICSFBCodeReq=} [properties] Properties to set
|
||||
*/
|
||||
function CSFBCodeReq(properties) {
|
||||
if (properties)
|
||||
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
||||
if (properties[keys[i]] != null)
|
||||
this[keys[i]] = properties[keys[i]];
|
||||
}
|
||||
|
||||
/**
|
||||
* CSFBCodeReq pixelAppId.
|
||||
* @member {string} pixelAppId
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @instance
|
||||
*/
|
||||
CSFBCodeReq.prototype.pixelAppId = "";
|
||||
|
||||
/**
|
||||
* CSFBCodeReq fbc.
|
||||
* @member {string} fbc
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @instance
|
||||
*/
|
||||
CSFBCodeReq.prototype.fbc = "";
|
||||
|
||||
/**
|
||||
* CSFBCodeReq fbp.
|
||||
* @member {string} fbp
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @instance
|
||||
*/
|
||||
CSFBCodeReq.prototype.fbp = "";
|
||||
|
||||
/**
|
||||
* CSFBCodeReq userAgent.
|
||||
* @member {string} userAgent
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @instance
|
||||
*/
|
||||
CSFBCodeReq.prototype.userAgent = "";
|
||||
|
||||
/**
|
||||
* Creates a new CSFBCodeReq instance using the specified properties.
|
||||
* @function create
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeReq=} [properties] Properties to set
|
||||
* @returns {cs.CSFBCodeReq} CSFBCodeReq instance
|
||||
*/
|
||||
CSFBCodeReq.create = function create(properties) {
|
||||
return new CSFBCodeReq(properties);
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeReq message. Does not implicitly {@link cs.CSFBCodeReq.verify|verify} messages.
|
||||
* @function encode
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeReq} message CSFBCodeReq message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSFBCodeReq.encode = function encode(message, writer) {
|
||||
if (!writer)
|
||||
writer = $Writer.create();
|
||||
if (message.pixelAppId != null && Object.hasOwnProperty.call(message, "pixelAppId"))
|
||||
writer.uint32(/* id 1, wireType 2 =*/10).string(message.pixelAppId);
|
||||
if (message.fbc != null && Object.hasOwnProperty.call(message, "fbc"))
|
||||
writer.uint32(/* id 2, wireType 2 =*/18).string(message.fbc);
|
||||
if (message.fbp != null && Object.hasOwnProperty.call(message, "fbp"))
|
||||
writer.uint32(/* id 3, wireType 2 =*/26).string(message.fbp);
|
||||
if (message.userAgent != null && Object.hasOwnProperty.call(message, "userAgent"))
|
||||
writer.uint32(/* id 4, wireType 2 =*/34).string(message.userAgent);
|
||||
return writer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeReq message, length delimited. Does not implicitly {@link cs.CSFBCodeReq.verify|verify} messages.
|
||||
* @function encodeDelimited
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeReq} message CSFBCodeReq message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSFBCodeReq.encodeDelimited = function encodeDelimited(message, writer) {
|
||||
return this.encode(message, writer).ldelim();
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeReq message from the specified reader or buffer.
|
||||
* @function decode
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @param {number} [length] Message length if known beforehand
|
||||
* @returns {cs.CSFBCodeReq} CSFBCodeReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSFBCodeReq.decode = function decode(reader, length, error) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = $Reader.create(reader);
|
||||
var end = length === undefined ? reader.len : reader.pos + length, message = new $root.cs.CSFBCodeReq();
|
||||
while (reader.pos < end) {
|
||||
var tag = reader.uint32();
|
||||
if (tag === error)
|
||||
break;
|
||||
switch (tag >>> 3) {
|
||||
case 1: {
|
||||
message.pixelAppId = reader.string();
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
message.fbc = reader.string();
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
message.fbp = reader.string();
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
message.userAgent = reader.string();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
reader.skipType(tag & 7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeReq message from the specified reader or buffer, length delimited.
|
||||
* @function decodeDelimited
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @returns {cs.CSFBCodeReq} CSFBCodeReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSFBCodeReq.decodeDelimited = function decodeDelimited(reader) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = new $Reader(reader);
|
||||
return this.decode(reader, reader.uint32());
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies a CSFBCodeReq message.
|
||||
* @function verify
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {Object.<string,*>} message Plain object to verify
|
||||
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
CSFBCodeReq.verify = function verify(message) {
|
||||
if (typeof message !== "object" || message === null)
|
||||
return "object expected";
|
||||
if (message.pixelAppId != null && message.hasOwnProperty("pixelAppId"))
|
||||
if (!$util.isString(message.pixelAppId))
|
||||
return "pixelAppId: string expected";
|
||||
if (message.fbc != null && message.hasOwnProperty("fbc"))
|
||||
if (!$util.isString(message.fbc))
|
||||
return "fbc: string expected";
|
||||
if (message.fbp != null && message.hasOwnProperty("fbp"))
|
||||
if (!$util.isString(message.fbp))
|
||||
return "fbp: string expected";
|
||||
if (message.userAgent != null && message.hasOwnProperty("userAgent"))
|
||||
if (!$util.isString(message.userAgent))
|
||||
return "userAgent: string expected";
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a CSFBCodeReq message from a plain object. Also converts values to their respective internal types.
|
||||
* @function fromObject
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {Object.<string,*>} object Plain object
|
||||
* @returns {cs.CSFBCodeReq} CSFBCodeReq
|
||||
*/
|
||||
CSFBCodeReq.fromObject = function fromObject(object) {
|
||||
if (object instanceof $root.cs.CSFBCodeReq)
|
||||
return object;
|
||||
var message = new $root.cs.CSFBCodeReq();
|
||||
if (object.pixelAppId != null)
|
||||
message.pixelAppId = String(object.pixelAppId);
|
||||
if (object.fbc != null)
|
||||
message.fbc = String(object.fbc);
|
||||
if (object.fbp != null)
|
||||
message.fbp = String(object.fbp);
|
||||
if (object.userAgent != null)
|
||||
message.userAgent = String(object.userAgent);
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSFBCodeReq message. Also converts values to other types if specified.
|
||||
* @function toObject
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {cs.CSFBCodeReq} message CSFBCodeReq
|
||||
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
||||
* @returns {Object.<string,*>} Plain object
|
||||
*/
|
||||
CSFBCodeReq.toObject = function toObject(message, options) {
|
||||
if (!options)
|
||||
options = {};
|
||||
var object = {};
|
||||
if (options.defaults) {
|
||||
object.pixelAppId = "";
|
||||
object.fbc = "";
|
||||
object.fbp = "";
|
||||
object.userAgent = "";
|
||||
}
|
||||
if (message.pixelAppId != null && message.hasOwnProperty("pixelAppId"))
|
||||
object.pixelAppId = message.pixelAppId;
|
||||
if (message.fbc != null && message.hasOwnProperty("fbc"))
|
||||
object.fbc = message.fbc;
|
||||
if (message.fbp != null && message.hasOwnProperty("fbp"))
|
||||
object.fbp = message.fbp;
|
||||
if (message.userAgent != null && message.hasOwnProperty("userAgent"))
|
||||
object.userAgent = message.userAgent;
|
||||
return object;
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this CSFBCodeReq to JSON.
|
||||
* @function toJSON
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @instance
|
||||
* @returns {Object.<string,*>} JSON object
|
||||
*/
|
||||
CSFBCodeReq.prototype.toJSON = function toJSON() {
|
||||
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSFBCodeReq
|
||||
* @function getTypeUrl
|
||||
* @memberof cs.CSFBCodeReq
|
||||
* @static
|
||||
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns {string} The default type url
|
||||
*/
|
||||
CSFBCodeReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
||||
if (typeUrlPrefix === undefined) {
|
||||
typeUrlPrefix = "type.googleapis.com";
|
||||
}
|
||||
return typeUrlPrefix + "/cs.CSFBCodeReq";
|
||||
};
|
||||
|
||||
return CSFBCodeReq;
|
||||
})();
|
||||
|
||||
cs.CSFBCodeRes = (function() {
|
||||
|
||||
/**
|
||||
* Properties of a CSFBCodeRes.
|
||||
* @memberof cs
|
||||
* @interface ICSFBCodeRes
|
||||
* @property {string|null} [fbCode] CSFBCodeRes fbCode
|
||||
*/
|
||||
|
||||
/**
|
||||
* Constructs a new CSFBCodeRes.
|
||||
* @memberof cs
|
||||
* @classdesc Represents a CSFBCodeRes.
|
||||
* @implements ICSFBCodeRes
|
||||
* @constructor
|
||||
* @param {cs.ICSFBCodeRes=} [properties] Properties to set
|
||||
*/
|
||||
function CSFBCodeRes(properties) {
|
||||
if (properties)
|
||||
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
||||
if (properties[keys[i]] != null)
|
||||
this[keys[i]] = properties[keys[i]];
|
||||
}
|
||||
|
||||
/**
|
||||
* CSFBCodeRes fbCode.
|
||||
* @member {string} fbCode
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @instance
|
||||
*/
|
||||
CSFBCodeRes.prototype.fbCode = "";
|
||||
|
||||
/**
|
||||
* Creates a new CSFBCodeRes instance using the specified properties.
|
||||
* @function create
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeRes=} [properties] Properties to set
|
||||
* @returns {cs.CSFBCodeRes} CSFBCodeRes instance
|
||||
*/
|
||||
CSFBCodeRes.create = function create(properties) {
|
||||
return new CSFBCodeRes(properties);
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeRes message. Does not implicitly {@link cs.CSFBCodeRes.verify|verify} messages.
|
||||
* @function encode
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeRes} message CSFBCodeRes message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSFBCodeRes.encode = function encode(message, writer) {
|
||||
if (!writer)
|
||||
writer = $Writer.create();
|
||||
if (message.fbCode != null && Object.hasOwnProperty.call(message, "fbCode"))
|
||||
writer.uint32(/* id 1, wireType 2 =*/10).string(message.fbCode);
|
||||
return writer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSFBCodeRes message, length delimited. Does not implicitly {@link cs.CSFBCodeRes.verify|verify} messages.
|
||||
* @function encodeDelimited
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {cs.ICSFBCodeRes} message CSFBCodeRes message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSFBCodeRes.encodeDelimited = function encodeDelimited(message, writer) {
|
||||
return this.encode(message, writer).ldelim();
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeRes message from the specified reader or buffer.
|
||||
* @function decode
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @param {number} [length] Message length if known beforehand
|
||||
* @returns {cs.CSFBCodeRes} CSFBCodeRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSFBCodeRes.decode = function decode(reader, length, error) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = $Reader.create(reader);
|
||||
var end = length === undefined ? reader.len : reader.pos + length, message = new $root.cs.CSFBCodeRes();
|
||||
while (reader.pos < end) {
|
||||
var tag = reader.uint32();
|
||||
if (tag === error)
|
||||
break;
|
||||
switch (tag >>> 3) {
|
||||
case 1: {
|
||||
message.fbCode = reader.string();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
reader.skipType(tag & 7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSFBCodeRes message from the specified reader or buffer, length delimited.
|
||||
* @function decodeDelimited
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @returns {cs.CSFBCodeRes} CSFBCodeRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSFBCodeRes.decodeDelimited = function decodeDelimited(reader) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = new $Reader(reader);
|
||||
return this.decode(reader, reader.uint32());
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies a CSFBCodeRes message.
|
||||
* @function verify
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {Object.<string,*>} message Plain object to verify
|
||||
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
CSFBCodeRes.verify = function verify(message) {
|
||||
if (typeof message !== "object" || message === null)
|
||||
return "object expected";
|
||||
if (message.fbCode != null && message.hasOwnProperty("fbCode"))
|
||||
if (!$util.isString(message.fbCode))
|
||||
return "fbCode: string expected";
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a CSFBCodeRes message from a plain object. Also converts values to their respective internal types.
|
||||
* @function fromObject
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {Object.<string,*>} object Plain object
|
||||
* @returns {cs.CSFBCodeRes} CSFBCodeRes
|
||||
*/
|
||||
CSFBCodeRes.fromObject = function fromObject(object) {
|
||||
if (object instanceof $root.cs.CSFBCodeRes)
|
||||
return object;
|
||||
var message = new $root.cs.CSFBCodeRes();
|
||||
if (object.fbCode != null)
|
||||
message.fbCode = String(object.fbCode);
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSFBCodeRes message. Also converts values to other types if specified.
|
||||
* @function toObject
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {cs.CSFBCodeRes} message CSFBCodeRes
|
||||
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
||||
* @returns {Object.<string,*>} Plain object
|
||||
*/
|
||||
CSFBCodeRes.toObject = function toObject(message, options) {
|
||||
if (!options)
|
||||
options = {};
|
||||
var object = {};
|
||||
if (options.defaults)
|
||||
object.fbCode = "";
|
||||
if (message.fbCode != null && message.hasOwnProperty("fbCode"))
|
||||
object.fbCode = message.fbCode;
|
||||
return object;
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this CSFBCodeRes to JSON.
|
||||
* @function toJSON
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @instance
|
||||
* @returns {Object.<string,*>} JSON object
|
||||
*/
|
||||
CSFBCodeRes.prototype.toJSON = function toJSON() {
|
||||
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSFBCodeRes
|
||||
* @function getTypeUrl
|
||||
* @memberof cs.CSFBCodeRes
|
||||
* @static
|
||||
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns {string} The default type url
|
||||
*/
|
||||
CSFBCodeRes.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
||||
if (typeUrlPrefix === undefined) {
|
||||
typeUrlPrefix = "type.googleapis.com";
|
||||
}
|
||||
return typeUrlPrefix + "/cs.CSFBCodeRes";
|
||||
};
|
||||
|
||||
return CSFBCodeRes;
|
||||
})();
|
||||
|
||||
/**
|
||||
* EnmPointEvent enum.
|
||||
* @name cs.EnmPointEvent
|
||||
* @enum {number}
|
||||
* @property {number} EPE_FBCode=0 EPE_FBCode value
|
||||
* @property {number} EPE_LoadA=1 EPE_LoadA value
|
||||
* @property {number} EPE_LoadB=2 EPE_LoadB value
|
||||
* @property {number} EPE_LoadGame=3 EPE_LoadGame value
|
||||
*/
|
||||
cs.EnmPointEvent = (function() {
|
||||
var valuesById = {}, values = Object.create(valuesById);
|
||||
values[valuesById[0] = "EPE_FBCode"] = 0;
|
||||
values[valuesById[1] = "EPE_LoadA"] = 1;
|
||||
values[valuesById[2] = "EPE_LoadB"] = 2;
|
||||
values[valuesById[3] = "EPE_LoadGame"] = 3;
|
||||
return values;
|
||||
})();
|
||||
|
||||
cs.CSPointEventReq = (function() {
|
||||
|
||||
/**
|
||||
* Properties of a CSPointEventReq.
|
||||
* @memberof cs
|
||||
* @interface ICSPointEventReq
|
||||
* @property {string|null} [fbCode] CSPointEventReq fbCode
|
||||
* @property {number|null} [point] CSPointEventReq point
|
||||
*/
|
||||
|
||||
/**
|
||||
* Constructs a new CSPointEventReq.
|
||||
* @memberof cs
|
||||
* @classdesc Represents a CSPointEventReq.
|
||||
* @implements ICSPointEventReq
|
||||
* @constructor
|
||||
* @param {cs.ICSPointEventReq=} [properties] Properties to set
|
||||
*/
|
||||
function CSPointEventReq(properties) {
|
||||
if (properties)
|
||||
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
||||
if (properties[keys[i]] != null)
|
||||
this[keys[i]] = properties[keys[i]];
|
||||
}
|
||||
|
||||
/**
|
||||
* CSPointEventReq fbCode.
|
||||
* @member {string} fbCode
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @instance
|
||||
*/
|
||||
CSPointEventReq.prototype.fbCode = "";
|
||||
|
||||
/**
|
||||
* CSPointEventReq point.
|
||||
* @member {number} point
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @instance
|
||||
*/
|
||||
CSPointEventReq.prototype.point = 0;
|
||||
|
||||
/**
|
||||
* Creates a new CSPointEventReq instance using the specified properties.
|
||||
* @function create
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {cs.ICSPointEventReq=} [properties] Properties to set
|
||||
* @returns {cs.CSPointEventReq} CSPointEventReq instance
|
||||
*/
|
||||
CSPointEventReq.create = function create(properties) {
|
||||
return new CSPointEventReq(properties);
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventReq message. Does not implicitly {@link cs.CSPointEventReq.verify|verify} messages.
|
||||
* @function encode
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {cs.ICSPointEventReq} message CSPointEventReq message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSPointEventReq.encode = function encode(message, writer) {
|
||||
if (!writer)
|
||||
writer = $Writer.create();
|
||||
if (message.fbCode != null && Object.hasOwnProperty.call(message, "fbCode"))
|
||||
writer.uint32(/* id 1, wireType 2 =*/10).string(message.fbCode);
|
||||
if (message.point != null && Object.hasOwnProperty.call(message, "point"))
|
||||
writer.uint32(/* id 2, wireType 0 =*/16).int32(message.point);
|
||||
return writer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventReq message, length delimited. Does not implicitly {@link cs.CSPointEventReq.verify|verify} messages.
|
||||
* @function encodeDelimited
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {cs.ICSPointEventReq} message CSPointEventReq message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSPointEventReq.encodeDelimited = function encodeDelimited(message, writer) {
|
||||
return this.encode(message, writer).ldelim();
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventReq message from the specified reader or buffer.
|
||||
* @function decode
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @param {number} [length] Message length if known beforehand
|
||||
* @returns {cs.CSPointEventReq} CSPointEventReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSPointEventReq.decode = function decode(reader, length, error) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = $Reader.create(reader);
|
||||
var end = length === undefined ? reader.len : reader.pos + length, message = new $root.cs.CSPointEventReq();
|
||||
while (reader.pos < end) {
|
||||
var tag = reader.uint32();
|
||||
if (tag === error)
|
||||
break;
|
||||
switch (tag >>> 3) {
|
||||
case 1: {
|
||||
message.fbCode = reader.string();
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
message.point = reader.int32();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
reader.skipType(tag & 7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventReq message from the specified reader or buffer, length delimited.
|
||||
* @function decodeDelimited
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @returns {cs.CSPointEventReq} CSPointEventReq
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSPointEventReq.decodeDelimited = function decodeDelimited(reader) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = new $Reader(reader);
|
||||
return this.decode(reader, reader.uint32());
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies a CSPointEventReq message.
|
||||
* @function verify
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {Object.<string,*>} message Plain object to verify
|
||||
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
CSPointEventReq.verify = function verify(message) {
|
||||
if (typeof message !== "object" || message === null)
|
||||
return "object expected";
|
||||
if (message.fbCode != null && message.hasOwnProperty("fbCode"))
|
||||
if (!$util.isString(message.fbCode))
|
||||
return "fbCode: string expected";
|
||||
if (message.point != null && message.hasOwnProperty("point"))
|
||||
if (!$util.isInteger(message.point))
|
||||
return "point: integer expected";
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a CSPointEventReq message from a plain object. Also converts values to their respective internal types.
|
||||
* @function fromObject
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {Object.<string,*>} object Plain object
|
||||
* @returns {cs.CSPointEventReq} CSPointEventReq
|
||||
*/
|
||||
CSPointEventReq.fromObject = function fromObject(object) {
|
||||
if (object instanceof $root.cs.CSPointEventReq)
|
||||
return object;
|
||||
var message = new $root.cs.CSPointEventReq();
|
||||
if (object.fbCode != null)
|
||||
message.fbCode = String(object.fbCode);
|
||||
if (object.point != null)
|
||||
message.point = object.point | 0;
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSPointEventReq message. Also converts values to other types if specified.
|
||||
* @function toObject
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {cs.CSPointEventReq} message CSPointEventReq
|
||||
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
||||
* @returns {Object.<string,*>} Plain object
|
||||
*/
|
||||
CSPointEventReq.toObject = function toObject(message, options) {
|
||||
if (!options)
|
||||
options = {};
|
||||
var object = {};
|
||||
if (options.defaults) {
|
||||
object.fbCode = "";
|
||||
object.point = 0;
|
||||
}
|
||||
if (message.fbCode != null && message.hasOwnProperty("fbCode"))
|
||||
object.fbCode = message.fbCode;
|
||||
if (message.point != null && message.hasOwnProperty("point"))
|
||||
object.point = message.point;
|
||||
return object;
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this CSPointEventReq to JSON.
|
||||
* @function toJSON
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @instance
|
||||
* @returns {Object.<string,*>} JSON object
|
||||
*/
|
||||
CSPointEventReq.prototype.toJSON = function toJSON() {
|
||||
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSPointEventReq
|
||||
* @function getTypeUrl
|
||||
* @memberof cs.CSPointEventReq
|
||||
* @static
|
||||
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns {string} The default type url
|
||||
*/
|
||||
CSPointEventReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
||||
if (typeUrlPrefix === undefined) {
|
||||
typeUrlPrefix = "type.googleapis.com";
|
||||
}
|
||||
return typeUrlPrefix + "/cs.CSPointEventReq";
|
||||
};
|
||||
|
||||
return CSPointEventReq;
|
||||
})();
|
||||
|
||||
cs.CSPointEventRes = (function() {
|
||||
|
||||
/**
|
||||
* Properties of a CSPointEventRes.
|
||||
* @memberof cs
|
||||
* @interface ICSPointEventRes
|
||||
*/
|
||||
|
||||
/**
|
||||
* Constructs a new CSPointEventRes.
|
||||
* @memberof cs
|
||||
* @classdesc Represents a CSPointEventRes.
|
||||
* @implements ICSPointEventRes
|
||||
* @constructor
|
||||
* @param {cs.ICSPointEventRes=} [properties] Properties to set
|
||||
*/
|
||||
function CSPointEventRes(properties) {
|
||||
if (properties)
|
||||
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
||||
if (properties[keys[i]] != null)
|
||||
this[keys[i]] = properties[keys[i]];
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new CSPointEventRes instance using the specified properties.
|
||||
* @function create
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {cs.ICSPointEventRes=} [properties] Properties to set
|
||||
* @returns {cs.CSPointEventRes} CSPointEventRes instance
|
||||
*/
|
||||
CSPointEventRes.create = function create(properties) {
|
||||
return new CSPointEventRes(properties);
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventRes message. Does not implicitly {@link cs.CSPointEventRes.verify|verify} messages.
|
||||
* @function encode
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {cs.ICSPointEventRes} message CSPointEventRes message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSPointEventRes.encode = function encode(message, writer) {
|
||||
if (!writer)
|
||||
writer = $Writer.create();
|
||||
return writer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes the specified CSPointEventRes message, length delimited. Does not implicitly {@link cs.CSPointEventRes.verify|verify} messages.
|
||||
* @function encodeDelimited
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {cs.ICSPointEventRes} message CSPointEventRes message or plain object to encode
|
||||
* @param {$protobuf.Writer} [writer] Writer to encode to
|
||||
* @returns {$protobuf.Writer} Writer
|
||||
*/
|
||||
CSPointEventRes.encodeDelimited = function encodeDelimited(message, writer) {
|
||||
return this.encode(message, writer).ldelim();
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventRes message from the specified reader or buffer.
|
||||
* @function decode
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @param {number} [length] Message length if known beforehand
|
||||
* @returns {cs.CSPointEventRes} CSPointEventRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSPointEventRes.decode = function decode(reader, length, error) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = $Reader.create(reader);
|
||||
var end = length === undefined ? reader.len : reader.pos + length, message = new $root.cs.CSPointEventRes();
|
||||
while (reader.pos < end) {
|
||||
var tag = reader.uint32();
|
||||
if (tag === error)
|
||||
break;
|
||||
switch (tag >>> 3) {
|
||||
default:
|
||||
reader.skipType(tag & 7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a CSPointEventRes message from the specified reader or buffer, length delimited.
|
||||
* @function decodeDelimited
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
||||
* @returns {cs.CSPointEventRes} CSPointEventRes
|
||||
* @throws {Error} If the payload is not a reader or valid buffer
|
||||
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
||||
*/
|
||||
CSPointEventRes.decodeDelimited = function decodeDelimited(reader) {
|
||||
if (!(reader instanceof $Reader))
|
||||
reader = new $Reader(reader);
|
||||
return this.decode(reader, reader.uint32());
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies a CSPointEventRes message.
|
||||
* @function verify
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {Object.<string,*>} message Plain object to verify
|
||||
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
||||
*/
|
||||
CSPointEventRes.verify = function verify(message) {
|
||||
if (typeof message !== "object" || message === null)
|
||||
return "object expected";
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a CSPointEventRes message from a plain object. Also converts values to their respective internal types.
|
||||
* @function fromObject
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {Object.<string,*>} object Plain object
|
||||
* @returns {cs.CSPointEventRes} CSPointEventRes
|
||||
*/
|
||||
CSPointEventRes.fromObject = function fromObject(object) {
|
||||
if (object instanceof $root.cs.CSPointEventRes)
|
||||
return object;
|
||||
return new $root.cs.CSPointEventRes();
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a plain object from a CSPointEventRes message. Also converts values to other types if specified.
|
||||
* @function toObject
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {cs.CSPointEventRes} message CSPointEventRes
|
||||
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
||||
* @returns {Object.<string,*>} Plain object
|
||||
*/
|
||||
CSPointEventRes.toObject = function toObject() {
|
||||
return {};
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this CSPointEventRes to JSON.
|
||||
* @function toJSON
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @instance
|
||||
* @returns {Object.<string,*>} JSON object
|
||||
*/
|
||||
CSPointEventRes.prototype.toJSON = function toJSON() {
|
||||
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the default type url for CSPointEventRes
|
||||
* @function getTypeUrl
|
||||
* @memberof cs.CSPointEventRes
|
||||
* @static
|
||||
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
||||
* @returns {string} The default type url
|
||||
*/
|
||||
CSPointEventRes.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
||||
if (typeUrlPrefix === undefined) {
|
||||
typeUrlPrefix = "type.googleapis.com";
|
||||
}
|
||||
return typeUrlPrefix + "/cs.CSPointEventRes";
|
||||
};
|
||||
|
||||
return CSPointEventRes;
|
||||
})();
|
||||
|
||||
/**
|
||||
* Category enum.
|
||||
* @name cs.Category
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "a0f75a36-ea81-4363-844e-fa21a437b182",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "GirlCollectionPanel"
|
||||
}
|
||||
}
|
||||
@@ -1847,7 +1847,7 @@
|
||||
"__id__": 100
|
||||
}
|
||||
],
|
||||
"_active": false,
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 114
|
||||
@@ -2922,7 +2922,7 @@
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -1.4499999999999886,
|
||||
"x": 95.75,
|
||||
"y": 79.546,
|
||||
"z": 0
|
||||
},
|
||||
@@ -3881,7 +3881,7 @@
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0.2039999999999793,
|
||||
"_top": 0.20399999999999352,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
@@ -3974,7 +3974,7 @@
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 276.35,
|
||||
"x": 283.25,
|
||||
"y": 79.546,
|
||||
"z": 0
|
||||
},
|
||||
@@ -4933,7 +4933,7 @@
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0.2039999999999793,
|
||||
"_top": 0.20399999999999352,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
@@ -5081,7 +5081,7 @@
|
||||
"_paddingRight": 2,
|
||||
"_paddingTop": 0,
|
||||
"_paddingBottom": 0,
|
||||
"_spacingX": 90.3,
|
||||
"_spacingX": 0,
|
||||
"_spacingY": 0,
|
||||
"_verticalDirection": 1,
|
||||
"_horizontalDirection": 0,
|
||||
|
||||
@@ -1497,7 +1497,7 @@
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
@@ -2231,10 +2231,7 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "db2b25f4-2d5c-49a7-82f4-6400a6656c08@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
@@ -3336,7 +3333,7 @@
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
@@ -4070,10 +4067,7 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "db2b25f4-2d5c-49a7-82f4-6400a6656c08@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "ReleasePanel",
|
||||
"_name": "releasePanel",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "ReleasePanel",
|
||||
"_name": "releasePanel",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "6972298a-8553-4fe8-8296-06f6d886d450",
|
||||
"uuid": "aa097cc9-b234-4077-8b2e-e543767ca13f",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "ReleasePanel"
|
||||
"syncNodeName": "releasePanel"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "960a0da6-a01b-4707-a14b-a07527810a97",
|
||||
"uuid": "0c235a5f-f9af-4f5f-958d-0b0da540f0d4",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "6aed1cfe-b7a3-4795-a52e-554ded5b742a",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "LoginPanel"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "b0cec5e7-4109-468d-9859-d74c3cb7f184",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "NewPasswordPanel"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "e95c307e-f028-4a48-a4b5-9b7ed6d701ff",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "RegisterPanel"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "9e45f5f0-5e76-4015-b74f-e01cf64260df",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "SafeCheckPanel"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "3e1b82e5-c229-4cc3-b924-aadfd05c6015",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "3e1b82e5-c229-4cc3-b924-aadfd05c6015@6c48a",
|
||||
"displayName": "多边形 1 拷贝 2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "3e1b82e5-c229-4cc3-b924-aadfd05c6015",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "3e1b82e5-c229-4cc3-b924-aadfd05c6015@f9941",
|
||||
"displayName": "多边形 1 拷贝 2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 751,
|
||||
"height": 153,
|
||||
"rawWidth": 751,
|
||||
"rawHeight": 153,
|
||||
"borderTop": 66,
|
||||
"borderBottom": 50,
|
||||
"borderLeft": 55,
|
||||
"borderRight": 55,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-375.5,
|
||||
-76.5,
|
||||
0,
|
||||
375.5,
|
||||
-76.5,
|
||||
0,
|
||||
-375.5,
|
||||
76.5,
|
||||
0,
|
||||
375.5,
|
||||
76.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
153,
|
||||
751,
|
||||
153,
|
||||
0,
|
||||
0,
|
||||
751,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-375.5,
|
||||
-76.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
375.5,
|
||||
76.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "3e1b82e5-c229-4cc3-b924-aadfd05c6015@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "3e1b82e5-c229-4cc3-b924-aadfd05c6015@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "55323d77-3d55-41f7-b26d-ca52dd1f424d",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "55323d77-3d55-41f7-b26d-ca52dd1f424d@6c48a",
|
||||
"displayName": "多边形 1 拷贝 3",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "55323d77-3d55-41f7-b26d-ca52dd1f424d",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "55323d77-3d55-41f7-b26d-ca52dd1f424d@f9941",
|
||||
"displayName": "多边形 1 拷贝 3",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 751,
|
||||
"height": 157,
|
||||
"rawWidth": 751,
|
||||
"rawHeight": 157,
|
||||
"borderTop": 66,
|
||||
"borderBottom": 50,
|
||||
"borderLeft": 55,
|
||||
"borderRight": 55,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-375.5,
|
||||
-78.5,
|
||||
0,
|
||||
375.5,
|
||||
-78.5,
|
||||
0,
|
||||
-375.5,
|
||||
78.5,
|
||||
0,
|
||||
375.5,
|
||||
78.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
157,
|
||||
751,
|
||||
157,
|
||||
0,
|
||||
0,
|
||||
751,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-375.5,
|
||||
-78.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
375.5,
|
||||
78.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "55323d77-3d55-41f7-b26d-ca52dd1f424d@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "55323d77-3d55-41f7-b26d-ca52dd1f424d@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 470 B |
|
Before Width: | Height: | Size: 714 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "760237d1-46b3-4c02-8e0b-849a95e36873",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "760237d1-46b3-4c02-8e0b-849a95e36873@6c48a",
|
||||
"displayName": "矩形 11 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "760237d1-46b3-4c02-8e0b-849a95e36873",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "760237d1-46b3-4c02-8e0b-849a95e36873@f9941",
|
||||
"displayName": "矩形 11 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 10,
|
||||
"height": 307,
|
||||
"rawWidth": 10,
|
||||
"rawHeight": 307,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-5,
|
||||
-153.5,
|
||||
0,
|
||||
5,
|
||||
-153.5,
|
||||
0,
|
||||
-5,
|
||||
153.5,
|
||||
0,
|
||||
5,
|
||||
153.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
307,
|
||||
10,
|
||||
307,
|
||||
0,
|
||||
0,
|
||||
10,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-5,
|
||||
-153.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
5,
|
||||
153.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "760237d1-46b3-4c02-8e0b-849a95e36873@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "760237d1-46b3-4c02-8e0b-849a95e36873@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "9e8d6126-392d-4fd5-aaae-458b82aa363c",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "9e8d6126-392d-4fd5-aaae-458b82aa363c@6c48a",
|
||||
"displayName": "矩形 13",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "9e8d6126-392d-4fd5-aaae-458b82aa363c",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "9e8d6126-392d-4fd5-aaae-458b82aa363c@f9941",
|
||||
"displayName": "矩形 13",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 419,
|
||||
"height": 130,
|
||||
"rawWidth": 419,
|
||||
"rawHeight": 130,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-209.5,
|
||||
-65,
|
||||
0,
|
||||
209.5,
|
||||
-65,
|
||||
0,
|
||||
-209.5,
|
||||
65,
|
||||
0,
|
||||
209.5,
|
||||
65,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
130,
|
||||
419,
|
||||
130,
|
||||
0,
|
||||
0,
|
||||
419,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-209.5,
|
||||
-65,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
209.5,
|
||||
65,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "9e8d6126-392d-4fd5-aaae-458b82aa363c@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "9e8d6126-392d-4fd5-aaae-458b82aa363c@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "656d9da9-1a0a-4bd9-949a-8562056efdc9",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "656d9da9-1a0a-4bd9-949a-8562056efdc9@6c48a",
|
||||
"displayName": "矩形 8 拷贝 2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "656d9da9-1a0a-4bd9-949a-8562056efdc9",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "656d9da9-1a0a-4bd9-949a-8562056efdc9@f9941",
|
||||
"displayName": "矩形 8 拷贝 2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 281,
|
||||
"height": 125,
|
||||
"rawWidth": 281,
|
||||
"rawHeight": 125,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-140.5,
|
||||
-62.5,
|
||||
0,
|
||||
140.5,
|
||||
-62.5,
|
||||
0,
|
||||
-140.5,
|
||||
62.5,
|
||||
0,
|
||||
140.5,
|
||||
62.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
125,
|
||||
281,
|
||||
125,
|
||||
0,
|
||||
0,
|
||||
281,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-140.5,
|
||||
-62.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
140.5,
|
||||
62.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "656d9da9-1a0a-4bd9-949a-8562056efdc9@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "656d9da9-1a0a-4bd9-949a-8562056efdc9@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 987 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "4ff901ef-3f6d-4856-89f1-896ec11c8df8",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "4ff901ef-3f6d-4856-89f1-896ec11c8df8@6c48a",
|
||||
"displayName": "矩形 8 拷贝 3",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "4ff901ef-3f6d-4856-89f1-896ec11c8df8",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "4ff901ef-3f6d-4856-89f1-896ec11c8df8@f9941",
|
||||
"displayName": "矩形 8 拷贝 3",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 83,
|
||||
"height": 83,
|
||||
"rawWidth": 83,
|
||||
"rawHeight": 83,
|
||||
"borderTop": 26,
|
||||
"borderBottom": 26,
|
||||
"borderLeft": 26,
|
||||
"borderRight": 26,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-41.5,
|
||||
-41.5,
|
||||
0,
|
||||
41.5,
|
||||
-41.5,
|
||||
0,
|
||||
-41.5,
|
||||
41.5,
|
||||
0,
|
||||
41.5,
|
||||
41.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
83,
|
||||
83,
|
||||
83,
|
||||
0,
|
||||
0,
|
||||
83,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-41.5,
|
||||
-41.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
41.5,
|
||||
41.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "4ff901ef-3f6d-4856-89f1-896ec11c8df8@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "4ff901ef-3f6d-4856-89f1-896ec11c8df8@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21@6c48a",
|
||||
"displayName": "矩形 8 拷贝 4",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21@f9941",
|
||||
"displayName": "矩形 8 拷贝 4",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 622,
|
||||
"height": 125,
|
||||
"rawWidth": 622,
|
||||
"rawHeight": 125,
|
||||
"borderTop": 33,
|
||||
"borderBottom": 33,
|
||||
"borderLeft": 33,
|
||||
"borderRight": 33,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-311,
|
||||
-62.5,
|
||||
0,
|
||||
311,
|
||||
-62.5,
|
||||
0,
|
||||
-311,
|
||||
62.5,
|
||||
0,
|
||||
311,
|
||||
62.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
125,
|
||||
622,
|
||||
125,
|
||||
0,
|
||||
0,
|
||||
622,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-311,
|
||||
-62.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
311,
|
||||
62.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "cc5e58e3-3d6f-4ca7-b02f-8c47634b5b21@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "07804017-427b-40ee-85a0-8f908fdda683",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "07804017-427b-40ee-85a0-8f908fdda683@6c48a",
|
||||
"displayName": "矩形 8 拷贝 5",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "07804017-427b-40ee-85a0-8f908fdda683",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "07804017-427b-40ee-85a0-8f908fdda683@f9941",
|
||||
"displayName": "矩形 8 拷贝 5",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 988,
|
||||
"height": 189,
|
||||
"rawWidth": 988,
|
||||
"rawHeight": 189,
|
||||
"borderTop": 34,
|
||||
"borderBottom": 34,
|
||||
"borderLeft": 34,
|
||||
"borderRight": 34,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-494,
|
||||
-94.5,
|
||||
0,
|
||||
494,
|
||||
-94.5,
|
||||
0,
|
||||
-494,
|
||||
94.5,
|
||||
0,
|
||||
494,
|
||||
94.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
189,
|
||||
988,
|
||||
189,
|
||||
0,
|
||||
0,
|
||||
988,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-494,
|
||||
-94.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
494,
|
||||
94.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "07804017-427b-40ee-85a0-8f908fdda683@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "07804017-427b-40ee-85a0-8f908fdda683@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 211 B |
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c@6c48a",
|
||||
"displayName": "组 3 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c@f9941",
|
||||
"displayName": "组 3 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 512,
|
||||
"height": 71,
|
||||
"rawWidth": 512,
|
||||
"rawHeight": 71,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-256,
|
||||
-35.5,
|
||||
0,
|
||||
256,
|
||||
-35.5,
|
||||
0,
|
||||
-256,
|
||||
35.5,
|
||||
0,
|
||||
256,
|
||||
35.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
71,
|
||||
512,
|
||||
71,
|
||||
0,
|
||||
0,
|
||||
512,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-256,
|
||||
-35.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
256,
|
||||
35.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "689976b6-d1f4-49e9-b2d7-f1b6f7087f8c@6c48a"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -2,7 +2,7 @@
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "864139dc-174a-4005-848d-824583910814",
|
||||
"uuid": "da34e8b7-59ca-4dc4-825d-d359b17be8c5",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
@@ -10,14 +10,14 @@
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "864139dc-174a-4005-848d-824583910814@6c48a",
|
||||
"displayName": "矩形 13 拷贝",
|
||||
"uuid": "da34e8b7-59ca-4dc4-825d-d359b17be8c5@6c48a",
|
||||
"displayName": "LT_UI_SC1",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "864139dc-174a-4005-848d-824583910814",
|
||||
"imageUuidOrDatabaseUri": "da34e8b7-59ca-4dc4-825d-d359b17be8c5",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
@@ -34,8 +34,8 @@
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "864139dc-174a-4005-848d-824583910814@f9941",
|
||||
"displayName": "矩形 13 拷贝",
|
||||
"uuid": "da34e8b7-59ca-4dc4-825d-d359b17be8c5@f9941",
|
||||
"displayName": "LT_UI_SC1",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
@@ -46,14 +46,14 @@
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 87,
|
||||
"height": 46,
|
||||
"rawWidth": 87,
|
||||
"rawHeight": 46,
|
||||
"width": 46,
|
||||
"height": 49,
|
||||
"rawWidth": 46,
|
||||
"rawHeight": 49,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 30,
|
||||
"borderRight": 30,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
@@ -61,17 +61,17 @@
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-43.5,
|
||||
-23,
|
||||
-24.5,
|
||||
0,
|
||||
23,
|
||||
-24.5,
|
||||
0,
|
||||
43.5,
|
||||
-23,
|
||||
24.5,
|
||||
0,
|
||||
-43.5,
|
||||
23,
|
||||
0,
|
||||
43.5,
|
||||
23,
|
||||
24.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
@@ -84,12 +84,12 @@
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
49,
|
||||
46,
|
||||
87,
|
||||
46,
|
||||
49,
|
||||
0,
|
||||
0,
|
||||
87,
|
||||
46,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
@@ -103,18 +103,18 @@
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-43.5,
|
||||
-23,
|
||||
-24.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
43.5,
|
||||
23,
|
||||
24.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "864139dc-174a-4005-848d-824583910814@6c48a",
|
||||
"imageUuidOrDatabaseUri": "da34e8b7-59ca-4dc4-825d-d359b17be8c5@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
@@ -129,6 +129,6 @@
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "864139dc-174a-4005-848d-824583910814@6c48a"
|
||||
"redirect": "da34e8b7-59ca-4dc4-825d-d359b17be8c5@6c48a"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -2,7 +2,7 @@
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "90c8ad93-27b4-4617-8691-30ae8b0877c8",
|
||||
"uuid": "7b9bf177-f5b8-4548-88d1-b0311ae5f387",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
@@ -10,14 +10,14 @@
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "90c8ad93-27b4-4617-8691-30ae8b0877c8@6c48a",
|
||||
"displayName": "编辑",
|
||||
"uuid": "7b9bf177-f5b8-4548-88d1-b0311ae5f387@6c48a",
|
||||
"displayName": "LT_UI_SC2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "90c8ad93-27b4-4617-8691-30ae8b0877c8",
|
||||
"imageUuidOrDatabaseUri": "7b9bf177-f5b8-4548-88d1-b0311ae5f387",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
@@ -34,8 +34,8 @@
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "90c8ad93-27b4-4617-8691-30ae8b0877c8@f9941",
|
||||
"displayName": "编辑",
|
||||
"uuid": "7b9bf177-f5b8-4548-88d1-b0311ae5f387@f9941",
|
||||
"displayName": "LT_UI_SC2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
@@ -114,7 +114,7 @@
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "90c8ad93-27b4-4617-8691-30ae8b0877c8@6c48a",
|
||||
"imageUuidOrDatabaseUri": "7b9bf177-f5b8-4548-88d1-b0311ae5f387@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
@@ -129,6 +129,6 @@
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "90c8ad93-27b4-4617-8691-30ae8b0877c8@6c48a"
|
||||
"redirect": "7b9bf177-f5b8-4548-88d1-b0311ae5f387@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 980 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "8a2389df-4012-4239-b7f8-a69d21f586db",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "8a2389df-4012-4239-b7f8-a69d21f586db@6c48a",
|
||||
"displayName": "w_录像 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "8a2389df-4012-4239-b7f8-a69d21f586db",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "8a2389df-4012-4239-b7f8-a69d21f586db@f9941",
|
||||
"displayName": "w_录像 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 88,
|
||||
"height": 55,
|
||||
"rawWidth": 88,
|
||||
"rawHeight": 55,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-44,
|
||||
-27.5,
|
||||
0,
|
||||
44,
|
||||
-27.5,
|
||||
0,
|
||||
-44,
|
||||
27.5,
|
||||
0,
|
||||
44,
|
||||
27.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
55,
|
||||
88,
|
||||
55,
|
||||
0,
|
||||
0,
|
||||
88,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-44,
|
||||
-27.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
44,
|
||||
27.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "8a2389df-4012-4239-b7f8-a69d21f586db@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "8a2389df-4012-4239-b7f8-a69d21f586db@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 980 B |
|
Before Width: | Height: | Size: 988 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "0195d912-9f4d-44b3-9712-d95f0668e4af",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "0195d912-9f4d-44b3-9712-d95f0668e4af@6c48a",
|
||||
"displayName": "图片3 拷贝 2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "0195d912-9f4d-44b3-9712-d95f0668e4af",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "0195d912-9f4d-44b3-9712-d95f0668e4af@f9941",
|
||||
"displayName": "图片3 拷贝 2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 62,
|
||||
"height": 56,
|
||||
"rawWidth": 62,
|
||||
"rawHeight": 56,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-31,
|
||||
-28,
|
||||
0,
|
||||
31,
|
||||
-28,
|
||||
0,
|
||||
-31,
|
||||
28,
|
||||
0,
|
||||
31,
|
||||
28,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
56,
|
||||
62,
|
||||
56,
|
||||
0,
|
||||
0,
|
||||
62,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-31,
|
||||
-28,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
31,
|
||||
28,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "0195d912-9f4d-44b3-9712-d95f0668e4af@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "0195d912-9f4d-44b3-9712-d95f0668e4af@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 998 B |
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "ae1676fd-9d9b-47ef-abc9-a56da69425e9",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "ae1676fd-9d9b-47ef-abc9-a56da69425e9@6c48a",
|
||||
"displayName": "播放 拷贝 2",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "ae1676fd-9d9b-47ef-abc9-a56da69425e9",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "ae1676fd-9d9b-47ef-abc9-a56da69425e9@f9941",
|
||||
"displayName": "播放 拷贝 2",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 83,
|
||||
"height": 83,
|
||||
"rawWidth": 83,
|
||||
"rawHeight": 83,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-41.5,
|
||||
-41.5,
|
||||
0,
|
||||
41.5,
|
||||
-41.5,
|
||||
0,
|
||||
-41.5,
|
||||
41.5,
|
||||
0,
|
||||
41.5,
|
||||
41.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
83,
|
||||
83,
|
||||
83,
|
||||
0,
|
||||
0,
|
||||
83,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-41.5,
|
||||
-41.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
41.5,
|
||||
41.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "ae1676fd-9d9b-47ef-abc9-a56da69425e9@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "ae1676fd-9d9b-47ef-abc9-a56da69425e9@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "231a4bd0-d031-459a-bc94-d25a5d2a478f",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "231a4bd0-d031-459a-bc94-d25a5d2a478f@6c48a",
|
||||
"displayName": "电话 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "231a4bd0-d031-459a-bc94-d25a5d2a478f",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "231a4bd0-d031-459a-bc94-d25a5d2a478f@f9941",
|
||||
"displayName": "电话 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 103,
|
||||
"height": 102,
|
||||
"rawWidth": 103,
|
||||
"rawHeight": 102,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-51.5,
|
||||
-51,
|
||||
0,
|
||||
51.5,
|
||||
-51,
|
||||
0,
|
||||
-51.5,
|
||||
51,
|
||||
0,
|
||||
51.5,
|
||||
51,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
102,
|
||||
103,
|
||||
102,
|
||||
0,
|
||||
0,
|
||||
103,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-51.5,
|
||||
-51,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
51.5,
|
||||
51,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "231a4bd0-d031-459a-bc94-d25a5d2a478f@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "231a4bd0-d031-459a-bc94-d25a5d2a478f@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 762 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "989deb0d-8788-42de-81ee-5e1dfdbe6901",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "989deb0d-8788-42de-81ee-5e1dfdbe6901@6c48a",
|
||||
"displayName": "矩形 10 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "989deb0d-8788-42de-81ee-5e1dfdbe6901",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "989deb0d-8788-42de-81ee-5e1dfdbe6901@f9941",
|
||||
"displayName": "矩形 10 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 268,
|
||||
"height": 80,
|
||||
"rawWidth": 268,
|
||||
"rawHeight": 80,
|
||||
"borderTop": 2,
|
||||
"borderBottom": 20,
|
||||
"borderLeft": 2,
|
||||
"borderRight": 20,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-134,
|
||||
-40,
|
||||
0,
|
||||
134,
|
||||
-40,
|
||||
0,
|
||||
-134,
|
||||
40,
|
||||
0,
|
||||
134,
|
||||
40,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
80,
|
||||
268,
|
||||
80,
|
||||
0,
|
||||
0,
|
||||
268,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-134,
|
||||
-40,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
134,
|
||||
40,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "989deb0d-8788-42de-81ee-5e1dfdbe6901@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "989deb0d-8788-42de-81ee-5e1dfdbe6901@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 714 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095@6c48a",
|
||||
"displayName": "矩形 11 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095@f9941",
|
||||
"displayName": "矩形 11 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 10,
|
||||
"height": 307,
|
||||
"rawWidth": 10,
|
||||
"rawHeight": 307,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-5,
|
||||
-153.5,
|
||||
0,
|
||||
5,
|
||||
-153.5,
|
||||
0,
|
||||
-5,
|
||||
153.5,
|
||||
0,
|
||||
5,
|
||||
153.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
307,
|
||||
10,
|
||||
307,
|
||||
0,
|
||||
0,
|
||||
10,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-5,
|
||||
-153.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
5,
|
||||
153.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "1f2275dc-ceb1-4b48-a4ae-f63f7abb1095@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "42906726-76e0-4225-9dbf-13c622bfc834",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "42906726-76e0-4225-9dbf-13c622bfc834@6c48a",
|
||||
"displayName": "矩形 3 拷贝 4",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "42906726-76e0-4225-9dbf-13c622bfc834",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "42906726-76e0-4225-9dbf-13c622bfc834@f9941",
|
||||
"displayName": "矩形 3 拷贝 4",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 800,
|
||||
"height": 88,
|
||||
"rawWidth": 800,
|
||||
"rawHeight": 88,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-400,
|
||||
-44,
|
||||
0,
|
||||
400,
|
||||
-44,
|
||||
0,
|
||||
-400,
|
||||
44,
|
||||
0,
|
||||
400,
|
||||
44,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
88,
|
||||
800,
|
||||
88,
|
||||
0,
|
||||
0,
|
||||
800,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-400,
|
||||
-44,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
400,
|
||||
44,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "42906726-76e0-4225-9dbf-13c622bfc834@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "42906726-76e0-4225-9dbf-13c622bfc834@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "55a02beb-4d16-4456-96b3-fdcddb21b9f4",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "55a02beb-4d16-4456-96b3-fdcddb21b9f4@6c48a",
|
||||
"displayName": "矩形 3 拷贝5",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "55a02beb-4d16-4456-96b3-fdcddb21b9f4",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "55a02beb-4d16-4456-96b3-fdcddb21b9f4@f9941",
|
||||
"displayName": "矩形 3 拷贝5",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 120,
|
||||
"height": 120,
|
||||
"rawWidth": 120,
|
||||
"rawHeight": 120,
|
||||
"borderTop": 56,
|
||||
"borderBottom": 56,
|
||||
"borderLeft": 56,
|
||||
"borderRight": 56,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-60,
|
||||
-60,
|
||||
0,
|
||||
60,
|
||||
-60,
|
||||
0,
|
||||
-60,
|
||||
60,
|
||||
0,
|
||||
60,
|
||||
60,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
0,
|
||||
0,
|
||||
120,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-60,
|
||||
-60,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
60,
|
||||
60,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "55a02beb-4d16-4456-96b3-fdcddb21b9f4@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "55a02beb-4d16-4456-96b3-fdcddb21b9f4@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b@6c48a",
|
||||
"displayName": "矩形 6",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b@f9941",
|
||||
"displayName": "矩形 6",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 541,
|
||||
"height": 146,
|
||||
"rawWidth": 541,
|
||||
"rawHeight": 146,
|
||||
"borderTop": 27,
|
||||
"borderBottom": 27,
|
||||
"borderLeft": 27,
|
||||
"borderRight": 27,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-270.5,
|
||||
-73,
|
||||
0,
|
||||
270.5,
|
||||
-73,
|
||||
0,
|
||||
-270.5,
|
||||
73,
|
||||
0,
|
||||
270.5,
|
||||
73,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
146,
|
||||
541,
|
||||
146,
|
||||
0,
|
||||
0,
|
||||
541,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-270.5,
|
||||
-73,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
270.5,
|
||||
73,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "df5397c4-a429-4b6e-bc48-2ae0dbdb844b@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 191 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "1876a540-2606-4dee-ab76-5db661e5f559",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "1876a540-2606-4dee-ab76-5db661e5f559@6c48a",
|
||||
"displayName": "矩形 8 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "1876a540-2606-4dee-ab76-5db661e5f559",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "1876a540-2606-4dee-ab76-5db661e5f559@f9941",
|
||||
"displayName": "矩形 8 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 503,
|
||||
"height": 7,
|
||||
"rawWidth": 503,
|
||||
"rawHeight": 7,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-251.5,
|
||||
-3.5,
|
||||
0,
|
||||
251.5,
|
||||
-3.5,
|
||||
0,
|
||||
-251.5,
|
||||
3.5,
|
||||
0,
|
||||
251.5,
|
||||
3.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
7,
|
||||
503,
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
503,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-251.5,
|
||||
-3.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
251.5,
|
||||
3.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "1876a540-2606-4dee-ab76-5db661e5f559@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "1876a540-2606-4dee-ab76-5db661e5f559@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 201 B |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "e40904ac-0cdb-45a5-9c51-bf2092c8a776",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "e40904ac-0cdb-45a5-9c51-bf2092c8a776@6c48a",
|
||||
"displayName": "矩形 8",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "e40904ac-0cdb-45a5-9c51-bf2092c8a776",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "e40904ac-0cdb-45a5-9c51-bf2092c8a776@f9941",
|
||||
"displayName": "矩形 8",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 503,
|
||||
"height": 7,
|
||||
"rawWidth": 503,
|
||||
"rawHeight": 7,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-251.5,
|
||||
-3.5,
|
||||
0,
|
||||
251.5,
|
||||
-3.5,
|
||||
0,
|
||||
-251.5,
|
||||
3.5,
|
||||
0,
|
||||
251.5,
|
||||
3.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
7,
|
||||
503,
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
503,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-251.5,
|
||||
-3.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
251.5,
|
||||
3.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "e40904ac-0cdb-45a5-9c51-bf2092c8a776@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "e40904ac-0cdb-45a5-9c51-bf2092c8a776@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,134 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.27",
|
||||
"importer": "image",
|
||||
"imported": true,
|
||||
"uuid": "60a79bd4-2dec-41f2-97a6-1611af8f04d8",
|
||||
"files": [
|
||||
".json",
|
||||
".png"
|
||||
],
|
||||
"subMetas": {
|
||||
"6c48a": {
|
||||
"importer": "texture",
|
||||
"uuid": "60a79bd4-2dec-41f2-97a6-1611af8f04d8@6c48a",
|
||||
"displayName": "组 1 拷贝",
|
||||
"id": "6c48a",
|
||||
"name": "texture",
|
||||
"userData": {
|
||||
"wrapModeS": "clamp-to-edge",
|
||||
"wrapModeT": "clamp-to-edge",
|
||||
"imageUuidOrDatabaseUri": "60a79bd4-2dec-41f2-97a6-1611af8f04d8",
|
||||
"isUuid": true,
|
||||
"visible": false,
|
||||
"minfilter": "linear",
|
||||
"magfilter": "linear",
|
||||
"mipfilter": "none",
|
||||
"anisotropy": 0
|
||||
},
|
||||
"ver": "1.0.22",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"f9941": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "60a79bd4-2dec-41f2-97a6-1611af8f04d8@f9941",
|
||||
"displayName": "组 1 拷贝",
|
||||
"id": "f9941",
|
||||
"name": "spriteFrame",
|
||||
"userData": {
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 72,
|
||||
"height": 61,
|
||||
"rawWidth": 72,
|
||||
"rawHeight": 61,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [
|
||||
-36,
|
||||
-30.5,
|
||||
0,
|
||||
36,
|
||||
-30.5,
|
||||
0,
|
||||
-36,
|
||||
30.5,
|
||||
0,
|
||||
36,
|
||||
30.5,
|
||||
0
|
||||
],
|
||||
"indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
],
|
||||
"uv": [
|
||||
0,
|
||||
61,
|
||||
72,
|
||||
61,
|
||||
0,
|
||||
0,
|
||||
72,
|
||||
0
|
||||
],
|
||||
"nuv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"minPos": [
|
||||
-36,
|
||||
-30.5,
|
||||
0
|
||||
],
|
||||
"maxPos": [
|
||||
36,
|
||||
30.5,
|
||||
0
|
||||
]
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "60a79bd4-2dec-41f2-97a6-1611af8f04d8@6c48a",
|
||||
"atlasUuid": ""
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
"type": "sprite-frame",
|
||||
"hasAlpha": true,
|
||||
"fixAlphaTransparencyArtifacts": false,
|
||||
"redirect": "60a79bd4-2dec-41f2-97a6-1611af8f04d8@6c48a"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |