const string PRESET_AVATAR_TAB = "PRESET_AVATAR_TAB"; const string MY_AVATAR_TAB = "MY_AVATAR_TAB"; component MyAvatarViewModel { MyAvatarModel m_Model; MyAvatarView m_View; bool m_IsOpenedMyAvatar; string m_CurrentTabIndex; int m_SelectedMyAvatarItemIndex; int m_PresetAvatarID; bool m_IsPortrait; public MyAvatarViewModel() { m_Model = system.Layer_GetComponentByName("mainmenu_mypage_avatar_base"); m_View = new MyAvatarView(); m_IsOpenedMyAvatar = false; m_CurrentTabIndex = ""; m_SelectedMyAvatarItemIndex = -1; m_PresetAvatarID = hel_skyway_get_avatar(); m_IsPortrait = hsCanvasIsPortrait(); } public void OnWindowActivate(bool IsActivate) { if(IsActivate) { if(m_IsOpenedMyAvatar) { // マイアバタータブを再描画する ClickMyAvatarTab(""); } // タブが非アクティブ状態から復帰したときの処理 heliport.v3.api.auths.isLoggedIn(_WindowActivateCallback); } } public void OnResize() { bool PrevState = m_IsPortrait; m_IsPortrait = hsCanvasIsPortrait(); // マイアバターリストを開いている途中に縦横が切り替わったのでリストを再描画する // 縦横で表示数が違う都合上、再描画しないと表示がおかしくなるため if(PrevState != m_IsPortrait) { if(m_IsOpenedMyAvatar) { // マイアバタータブを再描画する ClickMyAvatarTab(""); } } } void _WindowActivateCallback(JsVal val) { ReturnType result = hsLoadReturnType(val); if(!result.IsValid()) return; bool loginValid = result.data.GetBool(); if(!loginValid) { // ログイン から ゲストに変わった時にマイアバターを使用していたらプリセットアバターの0番目に変更する if(!hel_net_get_my_avatar().IsNull()) { m_SelectedMyAvatarItemIndex = -1; int ID = 0; m_PresetAvatarID = ID; m_Model.SelectPresetAvatar(); hel_setText(ETextParamType_ReplaceMyAvatar, "0"); } } } public void UpdateViewDataByAvatars(list AvatarList, int PagerIndex) { if(!m_IsOpenedMyAvatar) { return; } if(!AvatarList.IsEmpty()) { m_View.drawConfigAvatarTileList(AvatarList, PagerIndex); int Index = -1; JsVal avatarInfo = hel_net_get_my_avatar(); if(!avatarInfo.IsNull()) { string uuid = avatarInfo.GetProperty("uuid").GetStr(); for(int i = 0; i < AvatarList.Count; i++) { if(AvatarList[i].GetUUID() == uuid) { Index = i; break; } } } m_View.showMyAvatarSelectmark(Index); } else { m_View.drawMyAvatarUploadButton(); } } public void SetCurrentAvatarItemIndexOnLoaded(int Index) { if(Index != -1) { m_PresetAvatarID = -1; } } public void ClickMyAvatarTab(string param) { m_IsOpenedMyAvatar = true; m_View.showPresetAvatarSelectmark(-1); m_View.closeConfigPresetAvatar(); m_Model.FetchMyAvatarDataList(0); m_CurrentTabIndex = MY_AVATAR_TAB; } public void ClickPresetAvatarTab(string param) { m_IsOpenedMyAvatar = false; m_View.showPresetAvatarSelectmark(m_PresetAvatarID); m_View.closeConfigMyAvatar(); m_View.drawPresetAvatarTileList(); m_Model.Release(); m_CurrentTabIndex = PRESET_AVATAR_TAB; } public void ClickPageBack() { m_Model.UpdatePager(-1); } public void ClickPageNext() { m_Model.UpdatePager(1); } public void Close(string param) { m_View.closeAvatarBase(); m_View.closeConfigMyAvatar(); m_View.closeConfigPresetAvatar(); m_View.showPresetAvatarSelectmark(-1); m_CurrentTabIndex = MY_AVATAR_TAB; m_Model.Release(); m_IsOpenedMyAvatar = false; } public void ShowLoginButtonOnMyAvatar() { m_View.drawLoginButtonOnMyAvatar(); } public void ClickLogin(string param) { heliport.v3.api.auths.login(); } public void ClickSignup(string param) { //heliport.v3.api.profiles.openMyVketUrl("/mypage/profile"); string LoginURL = "https://account.vket.com/auth/login?"; hsWebOpen(LoginURL); } public void ClickAvatarUpload(string param) { //heliport.v3.api.profiles.openMyVketUrl("/mypage/assets/avatar"); string CurrentUrl = GetCurrentUrl(); bool IsTest = (CurrentUrl.IndexOf("test") != -1 || CurrentUrl.IndexOf("localhost") != -1 || CurrentUrl.IndexOf("hikky.dev") != -1); string Domain = (IsTest)? "cloud.hikky.dev" : "cloud.vket.com"; string MyVketURL = "https://%s/my-page/avatars/uploaded" % Domain; hsWebOpen(MyVketURL); } public void ConfirmAvatarSelect(string param) { int ID = hel_skyway_get_avatar(); if(m_CurrentTabIndex == PRESET_AVATAR_TAB) { m_SelectedMyAvatarItemIndex = -1; m_PresetAvatarID = ID; m_Model.SelectPresetAvatar(); // プリセットアバター用のネームプレートアイコンを表示する m_View.DrawPresetNameplateIcon(ID); } else if(m_CurrentTabIndex == MY_AVATAR_TAB) { if(m_SelectedMyAvatarItemIndex >= 0 && m_SelectedMyAvatarItemIndex < m_Model.GetMyAvatarCount()) { m_PresetAvatarID = ID; m_Model.SelectMyAvatar(m_SelectedMyAvatarItemIndex); } } Close(""); } public void DrawProfileNameplateIcon() { // マイアバター用のネームプレートアイコンを表示する LayerBundle layer = hsLayerGet("config_profile"); if(layer !== null) { layer.CallComponentMethod("ProfileMenuViewModel", "DrawProfileNameplateIcon", ""); } } public void SelectMyAvatarFromUUID(string UUID) { m_Model.SelectMyAvatarFromUUID(UUID); } void _ClickGridListItem(int Index) { m_SelectedMyAvatarItemIndex = Index; m_View.showMyAvatarSelectmark(m_SelectedMyAvatarItemIndex); } public void ClickGridListRow(string param) { int Index = param.ToInt(); _ClickGridListItem(Index); } private string GetCurrentUrl() { JsVal val = heliport.v3.api.routers.getCurrentUrl(); ReturnType result = hsLoadReturnType(val); if(!result.IsValid()) return ""; return result.data.GetStr(); } }