mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
提交新手引导
This commit is contained in:
@@ -18,16 +18,17 @@ import JLoaderSystem from "../../extensions/ngame/assets/ngame/system/JLoaderSys
|
||||
import { sp } from "cc";
|
||||
import { SpriteFrame } from "cc";
|
||||
import Loading from "../../extensions/ngame/assets/ngame/util/Loading";
|
||||
import { TB, Tables } from "../resources/config/data/schema";
|
||||
import { Tables } from "../resources/config/data/schema";
|
||||
import { JsonAsset } from "cc";
|
||||
import { GAction } from "./consts/GActionEnum";
|
||||
import { StorageData, StorageEnum } from "./consts/GData";
|
||||
import { JAPI, JAPIConfig } from "../../extensions/ngame/assets/ngame/util/JAPI";
|
||||
import { API } from "./consts/API";
|
||||
import { AppData } from "./AppData";
|
||||
|
||||
let APIPath = `https://api.pet.jisol.cn`
|
||||
let WsPath = `wss://api.pet.jisol.cn/websocket`
|
||||
let APIPath = `http://localhost:8080`
|
||||
let WsPath = `ws://localhost:8080/websocket`
|
||||
// let APIPath = `https://api.pet.jisol.cn`
|
||||
// let WsPath = `wss://api.pet.jisol.cn/websocket`
|
||||
|
||||
//重写UI
|
||||
class JNGLayer extends JNLayer{
|
||||
|
@@ -1,42 +1,32 @@
|
||||
import SystemBase from "../../extensions/ngame/assets/ngame/system/SystemBase";
|
||||
import { app } from "./App";
|
||||
import { API, NewsContext, PlayerInfoOV } from "./consts/API";
|
||||
|
||||
import BaseData from "./data/BaseData";
|
||||
import PlayerData from "./data/PlayerData";
|
||||
import PlayerPetData from "./data/PlayerPetData";
|
||||
|
||||
//数据类 (用于初始化游戏信息)
|
||||
export class AppData extends SystemBase{
|
||||
|
||||
static loading = "AppData";
|
||||
|
||||
//玩家信息
|
||||
static PLAYER_INFO:string = "PLAYER_INFO";
|
||||
|
||||
get loadings():{[key:string]:Function}{
|
||||
return {
|
||||
[AppData.PLAYER_INFO]:API.GetPlayerInfo, //玩家信息
|
||||
}
|
||||
}
|
||||
|
||||
data:{[key:string]:any} = {};
|
||||
loadings:BaseData[] = [
|
||||
PlayerData.getIns(), //玩家信息
|
||||
PlayerPetData.getIns(), //玩家宠物信息
|
||||
];
|
||||
|
||||
async onInit(): Promise<any> {
|
||||
|
||||
app.loading.setCurrent(AppData.loading);
|
||||
|
||||
//加载信息
|
||||
let keys = Object.keys(this.loadings);
|
||||
for (let index = 0; index < keys.length; index++) {
|
||||
this.data[keys[index]] = (await this.loadings[keys[index]]());
|
||||
//初始化所有数据类
|
||||
for (let index = 0; index < this.loadings.length; index++) {
|
||||
const data = this.loadings[index];
|
||||
await data.onInit();
|
||||
}
|
||||
|
||||
app.loading.ok(AppData.loading);
|
||||
|
||||
}
|
||||
|
||||
//获取玩家信息
|
||||
getPlayerInfo():PlayerInfoOV{
|
||||
return this.data[AppData.PLAYER_INFO];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -19,9 +19,7 @@ export class Main extends Component {
|
||||
director.getScene().addChild(instantiate(this.UIPrefab));
|
||||
|
||||
//加载 APP
|
||||
await JNGame.Init(app,[
|
||||
{path:"proto/GDemo"}
|
||||
]);
|
||||
await JNGame.Init(app);
|
||||
|
||||
//发生帧同步开始
|
||||
app.socket.Send(JNSyncAction.NSyncFrameStart);
|
||||
|
@@ -39,7 +39,7 @@ export default class GAttackParabolicRemote implements GAttackBase{
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`播放动画[GAttackParabolicRemote]`,role.nId,enemy.nId)
|
||||
// console.log(`播放动画[GAttackParabolicRemote]`,role.nId,enemy.nId)
|
||||
|
||||
console.log(role.spine,bone);
|
||||
let bullet = GAttackBullet.create(GButtleDefault,{
|
||||
|
@@ -151,7 +151,7 @@ export abstract class GFSMAnimBase extends GFSMBase{
|
||||
|
||||
//播放动画
|
||||
if(!info.track){
|
||||
console.log(`${frame.index} 播放动画-${this.spine.getComponent(GObject).nId}-`,info);
|
||||
// console.log(`${frame.index} 播放动画-${this.spine.getComponent(GObject).nId}-`,info);
|
||||
info.track = this.spine.setAnimation(this.trackIndex,info.animName,!!info.isLoop);
|
||||
this.onStartListener(info.track);
|
||||
}
|
||||
|
@@ -120,7 +120,7 @@ export default class GRoleDefault extends GRoleBase<{}>{
|
||||
//攻击
|
||||
onAttack(){
|
||||
if(!this.fsm.enemy) return;
|
||||
console.log(`播放动画[${this.nId}] onAttack`,this.fsm.enemy.nId)
|
||||
// console.log(`播放动画[${this.nId}] onAttack`,this.fsm.enemy.nId)
|
||||
//敌人扣血
|
||||
let info = TD.TbGRoleAttack.get(this.role.id);
|
||||
(new GAttack[info.attackWay]()).attack(this,info);
|
||||
|
@@ -34,15 +34,25 @@ export interface PlayerInfoOV{
|
||||
playerCreateTime:number, //玩家创建时间
|
||||
novice: false, //是否过引导
|
||||
}
|
||||
export interface PlayerPetOV{
|
||||
petId:number, //宠物唯一Id
|
||||
petPlayerId:number; //宠物的玩家Id
|
||||
petTbId:number; //宠物配置表Id
|
||||
petGrade:number; //宠物等级
|
||||
}
|
||||
|
||||
export const API = {
|
||||
|
||||
UserRegister : async () => RData(await app.api.post(`/user/register`)) as UserVO, //玩家注册
|
||||
UserLogin : async (account:string,password:string) => RData(await app.api.post(`/user/login`,{userId:account,userPass:password})) as UserLoginVO, //玩家登录
|
||||
GetPlayerInfo : async () => RData(await app.api.get(`/game/player/info`),false) as NewsContext, //获取玩家信息
|
||||
GetPlayerInfo : async () => RData(await app.api.get(`/game/player/info`),false) as PlayerInfoOV, //获取玩家信息
|
||||
|
||||
/********** 新手引导接口 *****************/
|
||||
SavePlayerInfo : async (playerName:string,novice:boolean = true) => (await app.api.post(`/game/player/info/save`,{playerName,novice})).data as NewsContext, //保存玩家信息
|
||||
SelectNovicePet: async (petId:number) => RData(await app.api.post(`/game/novice/select/${petId}`),true), //选择新手引导宠物
|
||||
|
||||
|
||||
/********** 宠物接口 ******************/
|
||||
GetPlayerPets: async () => RData(await app.api.get(`/game/pet/list`),false) as PlayerPetOV[], //获取玩家全部宠物
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,9 @@
|
||||
import { sys } from "cc";
|
||||
|
||||
export enum UIPetAnim{
|
||||
std = "std",
|
||||
}
|
||||
|
||||
export enum StorageEnum{
|
||||
|
||||
Token = "Storage_Token", // Token
|
||||
|
9
JisolGameCocos/assets/script/data.meta
Normal file
9
JisolGameCocos/assets/script/data.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "0265ac40-ac86-4146-990a-88283cb5ac58",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
11
JisolGameCocos/assets/script/data/BaseData.ts
Normal file
11
JisolGameCocos/assets/script/data/BaseData.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import Singleton from "../../../extensions/ngame/assets/ngame/util/Singleton";
|
||||
|
||||
|
||||
//数据基类
|
||||
export default abstract class BaseData extends Singleton {
|
||||
|
||||
//初始化
|
||||
abstract onInit();
|
||||
|
||||
}
|
||||
|
9
JisolGameCocos/assets/script/data/BaseData.ts.meta
Normal file
9
JisolGameCocos/assets/script/data/BaseData.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "3cace79b-36b5-4fd4-acfa-88a4b210e3ab",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
21
JisolGameCocos/assets/script/data/PlayerData.ts
Normal file
21
JisolGameCocos/assets/script/data/PlayerData.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { API, PlayerInfoOV } from "../consts/API";
|
||||
import BaseData from "./BaseData";
|
||||
|
||||
|
||||
//玩家数据
|
||||
export default class PlayerData extends BaseData{
|
||||
|
||||
data:PlayerInfoOV;
|
||||
|
||||
async onInit() {
|
||||
console.log("PlayerData",await API.GetPlayerInfo())
|
||||
this.data = (await API.GetPlayerInfo());
|
||||
}
|
||||
|
||||
//获取玩家信息
|
||||
getInfo():PlayerInfoOV{
|
||||
return this.data;
|
||||
}
|
||||
}
|
||||
|
||||
|
9
JisolGameCocos/assets/script/data/PlayerData.ts.meta
Normal file
9
JisolGameCocos/assets/script/data/PlayerData.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "58cb2be1-1279-405e-8c89-17a35ca0cd6d",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
39
JisolGameCocos/assets/script/data/PlayerPetData.ts
Normal file
39
JisolGameCocos/assets/script/data/PlayerPetData.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { API, PlayerInfoOV, PlayerPetOV } from "../consts/API";
|
||||
import BaseData from "./BaseData";
|
||||
|
||||
|
||||
//玩家宠物数据
|
||||
export default class PlayerPetData extends BaseData{
|
||||
|
||||
//玩家宠物列表
|
||||
datas:PlayerPetOV[] = [];
|
||||
|
||||
async onInit() {
|
||||
|
||||
//更新玩家宠物
|
||||
await this.UpdatePlayerPet();
|
||||
|
||||
}
|
||||
|
||||
//获取全部宠物
|
||||
getData(){
|
||||
return this.datas;
|
||||
}
|
||||
|
||||
//更新玩家宠物
|
||||
async UpdatePlayerPet(){
|
||||
//获取全部宠物
|
||||
this.datas = await API.GetPlayerPets();
|
||||
}
|
||||
|
||||
//选择宠物
|
||||
async SelectNovicePet(petId:number){
|
||||
await API.SelectNovicePet(petId);
|
||||
//更新玩家宠物列表
|
||||
await this.UpdatePlayerPet();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
9
JisolGameCocos/assets/script/data/PlayerPetData.ts.meta
Normal file
9
JisolGameCocos/assets/script/data/PlayerPetData.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "405fd125-2ba1-48b5-bc15-7f6e14569271",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
@@ -16,7 +16,6 @@ export class HomeView extends JNGLayerBase {
|
||||
frameText:Label;
|
||||
|
||||
async onLoad(){
|
||||
app.layer.Open(GUI.Tips,{text:(await API.GetPlayerInfo()).msg});
|
||||
}
|
||||
|
||||
update(){
|
||||
|
29
JisolGameCocos/assets/script/ui/Home/MainView.ts
Normal file
29
JisolGameCocos/assets/script/ui/Home/MainView.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { _decorator, Component, Label, Node } from 'cc';
|
||||
import { app, JNGLayerBase } from '../../App';
|
||||
import { sp } from 'cc';
|
||||
import PlayerPetData from '../../data/PlayerPetData';
|
||||
import { GUI } from '../UIConfig';
|
||||
import { UIPetAnim } from '../../consts/GData';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('MainView')
|
||||
export class MainView extends JNGLayerBase {
|
||||
|
||||
//宠物
|
||||
@property(sp.Skeleton)
|
||||
spine:sp.Skeleton;
|
||||
|
||||
onJNLoad(data?: any): void {
|
||||
//显示被选择的宠物
|
||||
this.spine.skeletonData = app.battleRes.roleSpine[PlayerPetData.getIns().getData()[0].petTbId];
|
||||
this.spine.setAnimation(0,UIPetAnim.std,true);
|
||||
}
|
||||
|
||||
//点击回到之前的主页
|
||||
onClickHome(){
|
||||
app.layer.Open(GUI.Home);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
1
JisolGameCocos/assets/script/ui/Home/MainView.ts.meta
Normal file
1
JisolGameCocos/assets/script/ui/Home/MainView.ts.meta
Normal file
@@ -0,0 +1 @@
|
||||
{"ver":"4.0.23","importer":"typescript","imported":true,"uuid":"b51bf2af-b227-4d3c-a05b-162ac0160408","files":[],"subMetas":{},"userData":{}}
|
@@ -35,7 +35,7 @@ export default class LoadingView extends JNGLayerBase {
|
||||
await NoviceManager.getIns().onStart();
|
||||
|
||||
//关闭加载页
|
||||
await app.layer.Open(GUI.Home);
|
||||
await app.layer.Open(GUI.Main);
|
||||
app.layer.Close(GUI.Loading);
|
||||
|
||||
}
|
||||
|
@@ -1,5 +1,7 @@
|
||||
import Singleton from "../../../../extensions/ngame/assets/ngame/util/Singleton";
|
||||
import { app } from "../../App";
|
||||
import PlayerData from "../../data/PlayerData";
|
||||
import PlayerPetData from "../../data/PlayerPetData";
|
||||
import { GUI } from "../UIConfig";
|
||||
|
||||
export default class NoviceManager extends Singleton{
|
||||
@@ -7,11 +9,19 @@ export default class NoviceManager extends Singleton{
|
||||
//新手引导执行
|
||||
async onStart(){
|
||||
|
||||
if(!(app.data.getPlayerInfo().novice)){
|
||||
//获取玩家信息是否引导过
|
||||
if(!(PlayerData.getIns().data.novice)){
|
||||
//如果没有过引导则打开引导页面
|
||||
await app.layer.OpenToClose(GUI.NoviceNamingView);
|
||||
}
|
||||
|
||||
//获取玩家信息是否选择过宠物(有没有宠物)
|
||||
//如果没有宠物则弹出让玩家选择宠物
|
||||
if(PlayerPetData.getIns().getData().length == 0){
|
||||
//没有宠物则弹出选择宠物页面
|
||||
await app.layer.OpenToClose(GUI.NoviceSelectPetView);
|
||||
}
|
||||
|
||||
console.log("新手引导结束");
|
||||
|
||||
}
|
||||
|
@@ -1,9 +1,83 @@
|
||||
import { _decorator, Component, Node } from 'cc';
|
||||
import { JNGLayerBase } from '../../App';
|
||||
import { JNGLayerBase, TD, app } from '../../App';
|
||||
import { TbGGlobalEnum } from '../../../resources/config/TbGGlobalEnum';
|
||||
import { _decorator,Node } from 'cc';
|
||||
import { sp } from 'cc';
|
||||
import { UIPetAnim } from '../../consts/GData';
|
||||
import { Sprite } from 'cc';
|
||||
import { Color } from 'cc';
|
||||
import { API } from '../../consts/API';
|
||||
import { GUI } from '../UIConfig';
|
||||
import PlayerPetData from '../../data/PlayerPetData';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
|
||||
@ccclass('NoviceSelectPetView')
|
||||
export class NoviceSelectPetView extends JNGLayerBase {
|
||||
|
||||
//选择宠物的节点
|
||||
@property([Node])
|
||||
selects:Node[] = [];
|
||||
|
||||
//可选择宠物的列表
|
||||
petIds:number[];
|
||||
//选择index
|
||||
index:number = 0;
|
||||
|
||||
async onJNLoad(data?: any) {
|
||||
|
||||
super.onJNLoad();
|
||||
|
||||
//加载配置表 (找到可选择的宠物Id)
|
||||
let info = TD.TbGGlobal.get(TbGGlobalEnum.SELECT_PET_ID);
|
||||
this.petIds = JSON.parse(info.args);
|
||||
|
||||
//显示宠物
|
||||
this.selects.forEach((item,index) => {
|
||||
//获取Spine组件
|
||||
let spine = item.getComponentInChildren(sp.Skeleton);
|
||||
//设置显示的角色
|
||||
spine.skeletonData = app.battleRes.roleSpine[this.petIds[index]];
|
||||
//全部角色播放等待动画
|
||||
spine.setAnimation(0,UIPetAnim.std,true);
|
||||
})
|
||||
|
||||
this.onUpdateView();
|
||||
|
||||
}
|
||||
|
||||
//更新UI
|
||||
onUpdateView(){
|
||||
|
||||
this.selects.forEach(item => {
|
||||
item.getComponent(Sprite).color = new Color("8D8D8D");
|
||||
})
|
||||
|
||||
//被选择赋黑
|
||||
this.selects[this.index].getComponent(Sprite).color = new Color("#000000");
|
||||
|
||||
}
|
||||
|
||||
//点击选择
|
||||
onClickSelect(e,data){
|
||||
|
||||
let index = parseInt(data);
|
||||
|
||||
this.index = index;
|
||||
|
||||
//更新UI
|
||||
this.onUpdateView();
|
||||
|
||||
}
|
||||
|
||||
//点击确定
|
||||
async onClickOk(){
|
||||
|
||||
//向服务器确认选择
|
||||
console.log(await PlayerPetData.getIns().SelectNovicePet(this.petIds[this.index]));
|
||||
app.layer.Open(GUI.Tips,{text:"选择宠物成功 欢迎来到宠物世界..."});
|
||||
//关闭页面
|
||||
app.layer.CloseNode(this.node);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -18,6 +18,7 @@ export enum GUI{
|
||||
NoviceSelectPetView = "NoviceSelectPetView", //新手引导页面 - 选择宠物
|
||||
|
||||
Home = "Home", //主页面
|
||||
Main = "Main", //主页面2
|
||||
}
|
||||
|
||||
|
||||
@@ -82,6 +83,16 @@ export const UIConfig:{ [key: string]: JNLayerInfo; } = {
|
||||
backInfo:{key:"position",start:v3(0,0,0),end:v3(-720,0,0)}
|
||||
},
|
||||
},
|
||||
[GUI.Main]:{
|
||||
layer:GLayer.View,
|
||||
uri: "prefab/ui/主页/MainView",
|
||||
anims:{
|
||||
front:JNLayerAnim.Enlarge,
|
||||
back:JNLayerAnim.Smaller,
|
||||
frontInfo:{key:"position",start:v3(720,0,0),end:v3(0,0,0)},
|
||||
backInfo:{key:"position",start:v3(0,0,0),end:v3(-720,0,0)}
|
||||
},
|
||||
},
|
||||
...UISystemConfig, //系统页面
|
||||
...UINoviceConfig, //新手引导页面
|
||||
}
|
||||
|
Reference in New Issue
Block a user