class EmoteIconParticleView{ int createEmoteCounter; const bool USE_PORTRAIT_FLAG = true; const bool USE_LANDSCAPE_FLAG = false; public EmoteIconParticleView(){ createEmoteCounter = 0; } public void CreateEmoteIcon(string emoteIconURL){ string layerName = "HUD"; string guiName = "emoteIcon_%d" % createEmoteCounter; HSImageModel imageModel = MakeHSImageModel(emoteIconURL); GUIElement laGUIDefaultPos = hsLayerGetLandscape(layerName).GetGUIElement("preview_chat_bg"); float laPosX, laPosY = 0; laGUIDefaultPos.GetPos(laPosX, laPosY); float laSizeW, laSizeH = 0; laGUIDefaultPos.GetSize(laSizeW, laSizeH); laPosX -= hsMathRandom(laSizeW); // 横画面 HSGUIModel laGuiModel = MakeCommonHSGUIMoel(guiName, "image"); laGuiModel.SetImageModel(imageModel); laGuiModel.SetSize(MakeHS2DI(0, 0)); laGuiModel.SetPos(MakeHS2DI(laPosX, laPosY)); laGuiModel.SetZ(2); GUIElement poGUIDefaultPos = hsLayerGetPortrait(layerName).GetGUIElement("preview_chat_bg"); float poPosX, poPosY = 0; poGUIDefaultPos.GetPos(poPosX, poPosY); float poSizeW, poSizeH = 0; poGUIDefaultPos.GetSize(poSizeW, poSizeH); poPosX += poSizeW/2; // po版のpreview_chat_bgのpivotが0.5,1なので生成座標を調整 poPosX -= hsMathRandom(poSizeW); // 縦画面 HSGUIModel poGuiModel = MakeCommonHSGUIMoel(guiName, "image"); poGuiModel.SetImageModel(imageModel); poGuiModel.SetSize(MakeHS2DI(0, 0)); poGuiModel.SetPos(MakeHS2DI(poPosX, poPosY)); poGuiModel.SetZ(2); // 登録 hsCanvasAddGUI("HUD", USE_LANDSCAPE_FLAG, laGuiModel); hsCanvasAddGUI("HUD", USE_PORTRAIT_FLAG, poGuiModel); hsDispatchEvent("addEmoteIcon", "%s:%b:%s" % layerName % USE_LANDSCAPE_FLAG % guiName); hsDispatchEvent("addEmoteIcon", "%s:%b:%s" % layerName % USE_PORTRAIT_FLAG % guiName); ++createEmoteCounter; } // ImageModelの生成 private HSImageModel MakeHSImageModel(string imageFilePath){ HSImageModel imageModel = new HSImageModel(); imageModel.SetURI(imageFilePath); return imageModel; } // TextModelの生成 private HSTextModel MakeHSTextModel(string text, int fontSize){ HSTextModel textModel = new HSTextModel(); textModel.SetFontSize(fontSize); textModel.SetText(text); textModel.SetFontFamily("BIZUDPGothic"); textModel.SetAlignment("CM"); textModel.SetOverflowWrap(true); HSColor fontColor = MakeHSColor(0.9, 0.9, 0.9 ,1); textModel.SetColor(fontColor); return textModel; } // ButtonModelの生成 public HSButtonModel MakeButtonGUIModel(string imageFilePath){ HSButtonModel buttonModel = new HSButtonModel(); buttonModel.SetFileName(imageFilePath); return buttonModel; } // どのタイプの要素でも共通するセットアップ private HSGUIModel MakeCommonHSGUIMoel(string modelName, string modelType){ HSGUIModel model = new HSGUIModel(); model.SetName(modelName); model.SetShow(true); model.SetType(modelType); model.SetRaycastTarget(false); int defaultZ = 1; model.SetZ(defaultZ); HS2D pivot = new HS2D(); pivot.SetXY(0.5, 1.0); model.SetPivot(pivot); model.SetAnchor("CB"); return model; } private HSRectLTRB MakeRectLTRB(int l,int t,int r,int b){ HSRectLTRB ltrb = new HSRectLTRB(); ltrb.SetLTRB(l, t, r, b); return ltrb; } // 座標、サイズ管理用 HS2DI生成関数 private HS2DI MakeHS2DI(int x, int y){ HS2DI hs2di = new HS2DI(); hs2di.SetXY(x, y); return hs2di; } // GUIの色指定用 HSColor生成関数 private HSColor MakeHSColor(float r, float g, float b, float a){ HSColor hsColor = new HSColor(); hsColor.SetRGBA(r, g, b, a); return hsColor; } // UVエリア用 HSRect生成関数 private HSRect MakeHSRect(int x, int y, int w, int h){ HSRect hsrect = new HSRect(); hsrect.SetXYWH(x, y, w, h); return hsrect; } }