[fix] HoldButton 點擊事件衝突

This commit is contained in:
2022-05-05 19:19:28 +08:00
parent 4aabd0b866
commit d771dd7593
20 changed files with 3594 additions and 6079 deletions

View File

@@ -114,22 +114,29 @@ export class Badminton extends cc.Component {
protected onLoad(): void {
Badminton._instance = this;
let self: this = this;
new LocalStorageData();
this.config.Init();
this.record.Init();
CoroutineV2.Parallel(
this.Lobby.Show(),
this.ScoreBoard.Show(),
).Start();
if (this.HistoryPanel != null) {
this.HistoryPanel.LoadRecord();
this.HistoryPanel.Hide();
CoroutineV2.Single(this.HistoryPanel.Hide()).Start();
}
// textToSpeech = FindObjectOfType<TextToSpeech>();
let AsyncFunction: () => IterableIterator<any> = function* (): IterableIterator<any> {
yield CoroutineV2.Parallel(
self.config.Init(),
self.record.Init(),
).Start();
CoroutineV2.Parallel(
self.Lobby.Show(),
self.ScoreBoard.Show(),
).Start();
if (self.HistoryPanel != null) {
self.HistoryPanel.LoadRecord();
self.HistoryPanel.Hide();
CoroutineV2.Single(self.HistoryPanel.Hide()).Start();
}
// textToSpeech = FindObjectOfType<TextToSpeech>();
CoroutineV2.Single(self.Show()).Start();
};
CoroutineV2.Single(AsyncFunction()).Start();
}
protected start(): void {
public *Show(): IterableIterator<any> {
CoroutineV2.Single(this.ScoreBoard.Hide()).Start();
this._initUI();
// LoadStatus();
@@ -147,6 +154,7 @@ export class Badminton extends cc.Component {
//#region Custom
private _initUI(): void {
let self: this = this;
this._updateCurSelMember();
// this.toggleItem.gameObject.SetActive(false);
// this.teamItem.gameObject.SetActive(false);
@@ -166,20 +174,17 @@ export class Badminton extends cc.Component {
for (let idx: number = 0; idx < this.TeamMemberList.length; idx++) {
let memberName: string = this.TeamMemberList[idx].Name;
let item: cc.Toggle = parent.ExAddChild(this.toggleItem).getComponent(cc.Toggle);
item.node.getChildByName("Label").getComponent(cc.Label).string = memberName;
item.node.getChildByName("Name").getComponent(cc.Label).string = memberName;
item.node.active = true;
item.node.getChildByName("Btn_Del").on("click", () => { this.OnDelMember(idx); }, this);
let picObj: cc.Node = item.node.getChildByName("Avatar").getChildByName("Pic");
if (picObj != null) {
picObj.getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicById(this.TeamMemberList[idx].AvatarId);
// let EventHandler: cc.Component.EventHandler = new cc.Component.EventHandler();
// EventHandler.target = this.node;
// EventHandler.component = this.name.split("<")[1].split(">")[0];
// EventHandler.handler = "OnChangeAvatar";
// EventHandler.customEventData = idx.toString();
// picObj.getComponent(HoldButton).OnInvoke.push(EventHandler);
picObj.getComponent(HoldButton).OnInvoke.AddListener(() => { this.OnChangeAvatar(idx); });
picObj.on("click", () => { item.isChecked = !item.isChecked; }, this);
picObj.parent.getComponent(HoldButton).OnInvoke.AddListener(() => { this.OnChangeAvatar(idx); });
picObj.parent.on("click", () => {
item.isChecked = !item.isChecked;
self._onChangeSelMember(item);
}, this);
}
this._m_toggleList.push(item);
@@ -239,7 +244,7 @@ export class Badminton extends cc.Component {
this.CurMemberList.Clear();
this._m_toggleList.forEach((member: cc.Toggle) => {
if (member.isChecked) {
this.CurMemberList.push(member.node.getChildByName("Label").getComponent(cc.Label).string);
this.CurMemberList.push(member.node.getChildByName("Name").getComponent(cc.Label).string);
}
});
if (this.TeamMemberList != null && this.TeamMemberList.length > 0) {
@@ -255,7 +260,7 @@ export class Badminton extends cc.Component {
break;
}
for (let j: number = 0; j < 2; j++) {
let memberName: string = team.getChildByName("Member_" + (j + 1) + "/Text").getComponent(cc.Label).string;
let memberName: string = team.getChildByName("Member_" + (j + 1)).getChildByName("Name").getComponent(cc.Label).string;
chkMemberList.push(memberName);
}
}
@@ -268,7 +273,7 @@ export class Badminton extends cc.Component {
}
private _updateTeamShow(chkMemberList: string[]): void {
let teamCount: number = chkMemberList.length / 2;
let teamCount: number = Math.floor(chkMemberList.length / 2);
let maxTeam: number = Math.ceil(chkMemberList.length / 2.0);
while (this._m_teamList.length > maxTeam) {
this._m_teamList[this._m_teamList.length - 1].destroy();
@@ -285,8 +290,8 @@ export class Badminton extends cc.Component {
} else {
obj = this._m_teamList[i];
}
obj.getChildByName("Member_1").getChildByName("Text").getComponent(cc.Label).string = "";
obj.getChildByName("Member_2").getChildByName("Text").getComponent(cc.Label).string = "";
obj.getChildByName("Member_1").getChildByName("Name").getComponent(cc.Label).string = "";
obj.getChildByName("Member_2").getChildByName("Name").getComponent(cc.Label).string = "";
obj.getChildByName("Member_1").getComponent(cc.Sprite).enabled = false;
obj.getChildByName("Member_2").getComponent(cc.Sprite).enabled = false;
obj.active = false;
@@ -309,7 +314,7 @@ export class Badminton extends cc.Component {
chkMemberList.ExRemoveAt(0);
}
team.getChildByName("Member_" + (j + 1) + "/Text").getComponent(cc.Label).string = name;
team.getChildByName("Member_" + (j + 1)).getChildByName("Name").getComponent(cc.Label).string = name;
team.getChildByName("Member_" + (j + 1)).getComponent(cc.Sprite).enabled = name !== this.GetDefaultMemberName();
team.getChildByName("Member_" + (j + 1)).getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicByName(name);
team.active = true;
@@ -319,8 +324,8 @@ export class Badminton extends cc.Component {
let name_1: string = chkMemberList[0];
let name_2: string = this.GetDefaultMemberName();
let team: cc.Node = this._m_teamList[teamCount];
team.getChildByName("Member_1").getChildByName("Text").getComponent(cc.Label).string = name_1;
team.getChildByName("Member_2").getChildByName("Text").getComponent(cc.Label).string = name_2;
team.getChildByName("Member_1").getChildByName("Name").getComponent(cc.Label).string = name_1;
team.getChildByName("Member_2").getChildByName("Name").getComponent(cc.Label).string = name_2;
team.getChildByName("Member_1").getComponent(cc.Sprite).enabled = true;
team.getChildByName("Member_1").getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicByName(name_1);
team.getChildByName("No").getComponent(cc.Label).string = (index + 1).toString();
@@ -347,6 +352,55 @@ export class Badminton extends cc.Component {
// this.AvatarPanel.OpenChange(teamMemberList[index]);
}
public LoadStatus(): void {
// console.log("LoadStatus ======= ");
// try {
// let members: string[] = this.TeamMemberList.map(m => Object.values(m)[0]);
// var str_member = PlayerPrefs.GetString("member", "[]");
// var str_avatar = PlayerPrefs.GetString("avatar", "[]");
// List < string > member_list = ((List<object>)MiniJSON.Json.Deserialize(str_member)).ConvertAll((val) => ((string)val).Trim());
// List < int > avatar_list = ((List<object>)MiniJSON.Json.Deserialize(str_avatar)).ConvertAll((val) => (int)(long)val);
// for (int i = 0; i < member_list.Count; i++)
// {
// string member = member_list[i];
// if (!members.Contains(member)) {
// if (member != GetDefaultMemberName()) {
// teamMemberList.Add(new MemberData() { name = member, avatarId = avatar_list[i] });
// }
// }
// else {
// teamMemberList.Find((m) => m.name == member).avatarId = avatar_list[i];
// }
// }
// curMemberList.Clear();
// foreach(Toggle member in m_toggleList) { member.isOn = false; }
// curMemberList = member_list.ConvertAll(v => v);
// //curMemberList = member_list;
// InitUI();
// for (int i = 0; i < member_list.Count; i++)
// {
// string member = member_list[i];
// int index = members.IndexOf(member);
// if (index != -1) {
// m_toggleList[index].isOn = true;
// }
// else {
// // 那個
// }
// }
// UpdateTeamShow(member_list);
// //updateCurSelMember();
// LoadScoreResult();
// voicePanel.SetProps(MiniJSON.Json.Deserialize(PlayerPrefs.GetString("voice", "null")) as Dictionary<string, object>);
// UpdateGameResult();
// }
// catch (System.Exception err)
// {
// Debug.Log(err);
// }
}
//#endregion
}

View File

@@ -1,7 +1,9 @@
import LocalStorageData from "../Engine/Data/LocalStorageData";
import { CoroutineV2 } from "../Engine/CatanEngine/CoroutineV2/CoroutineV2";
import AvatarSettings from "../Settings/AvatarSettings";
import GameConfig from "../Settings/GameConfig";
import { Badminton } from "./Badminton";
import { AvatarData, AvatarSettings, GameConfig, MemberData } from "./MemberData";
import { AvatarData, MemberData } from "./MemberData";
/** ConfigManager */
export default class ConfigManager {
@@ -24,17 +26,29 @@ export default class ConfigManager {
this.Main = mainControl;
}
public Init(): void {
this.LoadMemberList();
this.LoadAvatarSettings();
public *Init(): IterableIterator<any> {
yield CoroutineV2.Parallel(
this.LoadMemberList(),
this.LoadAvatarSettings()
).Start();
}
public LoadMemberList(): void {
public *LoadMemberList(): IterableIterator<any> {
let teamMemberList: MemberData[] = this.Main.TeamMemberList;
if (teamMemberList == null) {
this.Main.TeamMemberList = teamMemberList = [];
}
let request: GameConfig = (<GameConfig>JSON.parse(LocalStorageData.Instance.GameConfig));
let request: GameConfig;
cc.resources.load("GameConfig", function (err: Error, prefab: cc.Prefab): void {
if (err) {
console.error(`resources.load GameConfig error: ${err}`);
return;
}
request = prefab.data.getComponent(GameConfig);
});
while (!request) {
yield null;
}
if (request != null) {
let members: string[] = teamMemberList.map(m => Object.values(m)[0]);
@@ -43,11 +57,23 @@ export default class ConfigManager {
teamMemberList.push(new MemberData(request.Members[i]));
}
}
this.Main.TeamMemberList = teamMemberList;
}
}
public LoadAvatarSettings(): void {
let request: AvatarSettings = (<AvatarSettings>JSON.parse(LocalStorageData.Instance.AvatarSettings));
public *LoadAvatarSettings(): IterableIterator<any> {
// let request: AvatarSettings = (<AvatarSettings>JSON.parse(LocalStorageData.Instance.AvatarSettings));
let request: AvatarSettings;
cc.resources.load("AvatarSettings", function (err: Error, prefab: cc.Prefab): void {
if (err) {
console.error(`resources.load AvatarSettings error: ${err}`);
return;
}
request = prefab.data.getComponent(AvatarSettings);
});
while (!request) {
yield null;
}
if (request != null) {
this.Avatars = request.Avatars;
}

View File

@@ -1,5 +1,16 @@
const { ccclass, property } = cc._decorator;
//#region Enum
/** AvatarColor */
export enum AvatarColor {
None,
Pink,
Yellow
}
//#endregion
//#region Class
/** 成員資料 */
@@ -21,25 +32,63 @@ export class MemberData {
}
/** AvatarData */
@ccclass("AvatarData")
export class AvatarData {
public ID: number;
@property()
public ID: number = 0;
public Model: number;
@property()
public Model: number = 0;
public Name: string;
@property()
public Name: string = "";
public Desc: string;
@property()
public Desc: string = "";
public Pic: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public Pic: cc.SpriteFrame = null;
public BigPic: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public BigPic: cc.SpriteFrame = null;
public BG: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public BG: cc.SpriteFrame = null;
public color: AvatarColor;
@property({ type: cc.Enum(AvatarColor) })
public color: AvatarColor = AvatarColor.None;
}
// /** AvatarData */
// @ccclass
// export class AvatarData extends cc.Component {
// // @property()
// // public ID: number = 0;
// // @property()
// // public Model: number = 0;
// // @property()
// // public Name: string = "";
// // @property()
// // public Desc: string = "";
// // @property({ type: cc.SpriteFrame })
// // public Pic: cc.SpriteFrame = null;
// // @property({ type: cc.SpriteFrame })
// // public BigPic: cc.SpriteFrame = null;
// // @property({ type: cc.SpriteFrame })
// // public BG: cc.SpriteFrame = null;
// // @property({ type: cc.Enum(AvatarColor) })
// // public color: AvatarColor;
// }
/** 分數結果 */
export class ScoreResult {
@@ -73,29 +122,4 @@ export class GameRecord {
public Score: number[];
}
/** GameConfig */
export class GameConfig {
/** Members */
public Members: string[];
}
/** AvatarSettings */
export class AvatarSettings {
/** Avatars */
public Avatars: AvatarData[];
}
//#endregion
//#region Enum
/** AvatarColor */
export enum AvatarColor {
None,
Pink,
Yellow
}
//#endregion

View File

@@ -19,7 +19,7 @@ export default class RecordManager {
this.Main = badminton;
}
public Init(): any {
public *Init(): IterableIterator<any> {
//
}