新增mvvm示例

This commit is contained in:
YHH
2025-07-08 20:23:19 +08:00
parent 731edf5872
commit 2925ee380d
20 changed files with 4164 additions and 1673 deletions

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "21b8d75a-82be-4b5a-8ecf-765558907857",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,45 @@
import { ViewModel, observable, computed, command } from '@esengine/mvvm-ui-framework';
/**
* 游戏状态视图模型
*/
export class GameStateViewModel extends ViewModel {
public get name(): string {
return 'GameStateViewModel';
}
@observable
currentLevel: number = 1;
@observable
health: number = 100;
@observable
mana: number = 50;
@observable
experience: number = 0;
@computed(['health'])
get healthPercent(): number {
return (this.health / 100) * 100;
}
@computed(['experience', 'currentLevel'])
get experienceToNextLevel(): number {
return (this.currentLevel * 100) - this.experience;
}
@command()
public levelUp(): void {
this.currentLevel += 1;
this.health = 100;
this.mana += 10;
}
@command()
public takeDamage(damage: number): void {
this.health = Math.max(0, this.health - damage);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "8fa14e6f-46cd-4cb4-9ac1-0a1919e260a5",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "2c09b280-bf73-4d95-9b1f-d4d915442980",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,41 @@
import { ViewModel, observable, computed, command } from '@esengine/mvvm-ui-framework';
/**
* 商店视图模型
*/
export class ShopViewModel extends ViewModel {
public get name(): string {
return 'ShopViewModel';
}
@observable
selectedCategory: string = 'weapons';
@observable
playerGold: number = 1000;
@observable
cartItems: any[] = [];
@computed(['cartItems'])
get totalPrice(): number {
return this.cartItems.reduce((total, item) => total + item.price, 0);
}
@computed(['playerGold', 'totalPrice'])
get canPurchase(): boolean {
return this.playerGold >= this.totalPrice;
}
@command()
public addToCart(item: any): void {
this.cartItems.push(item);
}
@command('canPurchase')
public purchase(): void {
this.playerGold -= this.totalPrice;
this.cartItems = [];
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "148fe394-03cd-45a1-9bc0-5cb24440d8db",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "62abfd02-b9f5-41d2-9822-2c777af21e27",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,33 @@
import { ViewModel, observable, computed, command } from '@esengine/mvvm-ui-framework';
/**
* 用户配置文件视图模型
*/
export class UserProfileViewModel extends ViewModel {
public get name(): string {
return 'UserProfileViewModel';
}
@observable
avatar: string = '';
@observable
nickname: string = '';
@observable
email: string = '';
@observable
phone: string = '';
@computed(['nickname', 'email'])
get displayInfo(): string {
return `${this.nickname} (${this.email})`;
}
@command()
public updateProfile(): void {
console.log('更新用户配置文件');
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "05648650-5963-4847-8789-7bdc6ea7f43c",
"files": [],
"subMetas": {},
"userData": {}
}