public KsmGuiIcon(KsmGuiBase parent, Texture2D texture, string tooltipText = null, int width = 16, int height = 16) : base(parent) { // we use a child gameobject because KsmGuiIcon can be used as a button (we need it as a child in this case) // we directly set its size trough anchors / sizeDelta instead of using layout components, this way it can be used // both standalone or as a button without having to mess with the layout component // We still set a min height/min size layout on the top object to make sure other objects in a group won't overlap GameObject icon = new GameObject("icon"); IconTransform = icon.AddComponent <RectTransform>(); icon.AddComponent <CanvasRenderer>(); Image = TopObject.AddComponent <RawImage>(); // make sure pivot is at the center IconTransform.pivot = new Vector2(0.5f, 0.5f); // set anchors to middle-center IconTransform.anchorMin = new Vector2(0.5f, 0.5f); IconTransform.anchorMax = new Vector2(0.5f, 0.5f); // anchor-pivot distance IconTransform.anchoredPosition = new Vector2(0f, 0f); SetIconTexture(texture, width, height); IconTransform.SetParentFixScale(TopTransform); if (tooltipText != null) { SetTooltipText(tooltipText); } }
public KsmGuiToggleListElement(KsmGuiToggleList <T> parent, T toggleId, string text) : base(parent) { ToggleComponent = TopObject.AddComponent <Toggle>(); ToggleComponent.transition = Selectable.Transition.None; ToggleComponent.navigation = new Navigation() { mode = Navigation.Mode.None }; ToggleComponent.isOn = false; ToggleComponent.toggleTransition = Toggle.ToggleTransition.Fade; ToggleComponent.group = parent.ToggleGroupComponent; this.parent = parent; parent.ChildToggles.Add(this); ToggleId = toggleId; ToggleComponent.onValueChanged.AddListener(NotifyParent); Image image = TopObject.AddComponent <Image>(); image.color = KsmGuiStyle.boxColor; SetLayoutElement(false, false, -1, -1, -1, 14); KsmGuiVerticalLayout highlightImage = new KsmGuiVerticalLayout(this); Image bgImage = highlightImage.TopObject.AddComponent <Image>(); bgImage.color = KsmGuiStyle.selectedBoxColor; bgImage.raycastTarget = false; ToggleComponent.graphic = bgImage; TextObject = new KsmGuiText(highlightImage, text); TextObject.SetLayoutElement(true); }
public KsmGuiText( KsmGuiBase parent, string text, string tooltipText = null, TextAlignmentOptions alignement = TextAlignmentOptions.TopLeft, bool wordWrap = true, TextOverflowModes overflowMode = TextOverflowModes.Overflow ) : base(parent) { savedAlignement = alignement; TextComponent = TopObject.AddComponent <TextMeshProUGUI>(); TextComponent.color = KsmGuiStyle.textColor; TextComponent.font = KsmGuiStyle.textFont; TextComponent.fontSize = KsmGuiStyle.textSize; TextComponent.alignment = alignement; TextComponent.enableWordWrapping = wordWrap; TextComponent.overflowMode = overflowMode; TextComponent.text = text; SetLayoutElement(true); //TextComponent.raycastTarget = false; if (tooltipText != null) { SetTooltipText(tooltipText); } }
public void Setup() { this.obj = new TopObject(); this.obj.SetSlot("Foo", "Bar"); this.local = new LocalObject(obj); this.local.SetLocalSlot("a", "localvalue"); }
public HttpResponseMessage Login([FromBody] string email) { db = new DBOperationService(); HttpResponseMessage result = null; try { var data = db.FindUser(email); var saveData = new NameValueCollection(); saveData["email"] = data.Email; var cookie = new CookieHeaderValue("session", saveData) { Domain = Request.RequestUri.Host, Path = "/", Expires = DateTime.Now.AddMinutes(60) }; TopObject <string> returnData = new TopObject <string>() { status = Convert.ToInt32(HttpStatusCode.OK), input = email, message = "登入成功" }; //傳cookie+登入成功訊息 result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <TopObject <string> >(returnData, new JsonMediaTypeFormatter()) }; result.Headers.AddCookies(new CookieHeaderValue[] { cookie }); return(result); } catch (EmailNotVertifyException ex) { TopObject <string> mesg = new TopObject <string>() { input = email, status = Convert.ToInt32(HttpStatusCode.Unauthorized), message = msg }; result = new HttpResponseMessage(HttpStatusCode.Unauthorized) { Content = new ObjectContent <TopObject <string> >(mesg, new JsonMediaTypeFormatter()) }; return(result); } catch (UserNotFoundException ex) { TopObject <string> obj = new TopObject <string>() { status = Convert.ToInt32(HttpStatusCode.NotFound), input = email, message = "沒有這位使用者或Email輸入錯誤,請先註冊再登入" }; //送註冊JSON訊息 var errorData = new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new ObjectContent <TopObject <string> >(obj, new JsonMediaTypeFormatter()) }; return(errorData); } }
public HttpResponseMessage SignUp([FromBody] UserData userData) { //發信給使用者作信箱驗證 email = new EmailService(); TopObject <UserData> result; HttpResponseMessage reData; db = new DBOperationService(); if (!db.isEmailExist(userData.email)) { User data = new User() { Email = userData.email, location = userData.location, schoolName = userData.schoolName, identities = userData.identity, verificationCode = Guid.NewGuid().ToString().Replace("-", string.Empty), isPass = "******" }; //在DB中新增一位使用者 db.CreateUser(data); email.SendMail(data.Email, data.verificationCode, Request.RequestUri.ToString()); //送出註冊成功的JSON 字串 result = new TopObject <UserData>() { status = Convert.ToInt32(HttpStatusCode.OK), input = userData, message = "已寄發驗證信至您的電子郵件信箱,請先驗證您的電子郵件信箱之後再使用本系統" }; reData = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <TopObject <UserData> >(result, new JsonMediaTypeFormatter()) }; return(reData); } else { result = new TopObject <UserData>() { status = Convert.ToInt32(HttpStatusCode.Created), input = userData, message = "此Email已經註冊過,請更換Email信箱" }; reData = new HttpResponseMessage(HttpStatusCode.Created) { Content = new ObjectContent <TopObject <UserData> >(result, new JsonMediaTypeFormatter()) }; return(reData); } }
public KsmGuiButton ( KsmGuiBase parent, string buttonText, UnityAction onClick, string tooltipText = null, int width = -1, int height = 18, Texture2D iconTexture = null, int iconWidth = 16, int iconHeight = 16 ) : base(parent, 2, 3, 3, 0, 0, TextAnchor.MiddleCenter) { // buttons are 18 px high and expand horizontaly in their container by default, but a fixed width can be defined in the ctor // in any case, SetLayoutElement can be called after to customise the button size. if (width <= 0) { SetLayoutElement(true, false, -1, height); } else { SetLayoutElement(false, false, width, height); } ImageComponent = TopObject.AddComponent <Image>(); ImageComponent.sprite = Textures.KsmGuiSpriteBtnNormal; ImageComponent.type = Image.Type.Sliced; ImageComponent.fillCenter = true; ButtonComponent = TopObject.AddComponent <Button>(); ButtonComponent.transition = Selectable.Transition.SpriteSwap; ButtonComponent.spriteState = KsmGuiStyle.buttonSpriteSwap; ButtonComponent.navigation = new Navigation() { mode = Navigation.Mode.None }; // fix the transitions getting stuck SetButtonOnClick(onClick); SetIconTexture(iconTexture, iconWidth, iconHeight); TextObject = new KsmGuiText(this, buttonText, null, TextAlignmentOptions.Center); TextObject.SetLayoutElement(true); TextObject.TopTransform.SetParentFixScale(TopTransform); if (tooltipText != null) { SetTooltipText(tooltipText); } }
public KsmGuiIconButton(KsmGuiBase parent, Texture2D texture, UnityAction onClick = null, string tooltipText = null, int width = 16, int height = 16) : base(parent, texture, tooltipText, width, height) { ButtonComponent = TopObject.AddComponent <Button>(); ButtonComponent.targetGraphic = Image; ButtonComponent.interactable = true; ButtonComponent.transition = Selectable.Transition.ColorTint; ButtonComponent.colors = KsmGuiStyle.iconTransitionColorBlock; ButtonComponent.navigation = new Navigation() { mode = Navigation.Mode.None }; // fix the transitions getting stuck SetButtonOnClick(onClick); }
public void Close() { if (OnClose != null) { OnClose(); } KsmGuiTooltipController.Instance.HideTooltip(); if (destroyOnClose) { TopObject.DestroyGameObject(); } else { Enabled = false; } }
public KsmGuiHorizontalLayout ( KsmGuiBase parent, int spacing = 0, int paddingLeft = 0, int paddingRight = 0, int paddingTop = 0, int paddingBottom = 0, TextAnchor childAlignement = TextAnchor.UpperLeft ) : base(parent) { LayoutGroup = TopObject.AddComponent <HorizontalLayoutGroup>(); LayoutGroup.spacing = spacing; LayoutGroup.padding = new RectOffset(paddingLeft, paddingRight, paddingTop, paddingBottom); LayoutGroup.childAlignment = childAlignement; LayoutGroup.childControlHeight = true; LayoutGroup.childControlWidth = true; LayoutGroup.childForceExpandHeight = false; LayoutGroup.childForceExpandWidth = false; }
public KsmGuiHeader(KsmGuiBase parent, string title, Color backgroundColor = default, int textPreferredWidth = -1) : base(parent, 2, 0, 0, 0, 0, TextAnchor.UpperLeft) { // default : black background Image image = TopObject.AddComponent <Image>(); if (backgroundColor == default) { image.color = Color.black; } else { image.color = backgroundColor; } TextObject = new KsmGuiText(this, title, null, TextAlignmentOptions.Center); TextObject.TextComponent.fontStyle = FontStyles.UpperCase; TextObject.SetLayoutElement(true, false, textPreferredWidth, -1, -1, 16); }
public HttpResponseMessage History([FromBody] Input data) { db = new DBOperationService(); ChangeDataType change = new ChangeDataType(); CookieHeaderValue cookie = Request.Headers.GetCookies("session").FirstOrDefault(); UseHistory history = change.Mapper(data, cookie["session"].Values["email"], DateTime.Now); db.StoreHistory(history); TopObject <Input> result = new TopObject <Input>() { status = Convert.ToInt32(HttpStatusCode.OK), input = data, message = "記錄成功~!!" }; var resp = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <TopObject <Input> >(result, new JsonMediaTypeFormatter()) }; return(resp); }
public HttpResponseMessage ResendEmail([FromBody] string address) { db = new DBOperationService(); email = new EmailService(); TopObject <string> result; HttpResponseMessage resp; var user = db.search(address); if (user.verificationCode != null) { email.SendMail(user.Email, user.verificationCode, Request.RequestUri.ToString()); //丟訊息給前端 result = new TopObject <string>() { status = Convert.ToInt32(HttpStatusCode.OK), input = address, message = "已寄發驗證信至您的電子郵件信箱,請先驗證您的電子郵件信箱之後再使用本系統" }; resp = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <TopObject <string> >(result, new JsonMediaTypeFormatter()) }; return(resp); } else { // result = new TopObject <string>() { status = Convert.ToInt32(HttpStatusCode.NotAcceptable), input = address, message = "您的信箱已驗證過了,請重新登入" }; resp = new HttpResponseMessage(HttpStatusCode.NotAcceptable) { Content = new ObjectContent <TopObject <string> >(result, new JsonMediaTypeFormatter()) }; return(resp); } }
public KsmGuiToggle(KsmGuiBase parent, string toggleText, bool initialOnState, UnityAction <bool> onClick, string tooltipText = null, int width = -1, int height = 18) : base(parent, 5) { onClickAction = onClick; if (width <= 0) { SetLayoutElement(true, false, -1, height); } else { SetLayoutElement(false, false, width, height); } ToggleComponent = TopObject.AddComponent <Toggle>(); ToggleComponent.transition = Selectable.Transition.SpriteSwap; ToggleComponent.spriteState = KsmGuiStyle.buttonSpriteSwap; ToggleComponent.navigation = new Navigation() { mode = Navigation.Mode.None }; // fix the transitions getting stuck ToggleComponent.toggleTransition = Toggle.ToggleTransition.Fade; ToggleComponent.isOn = initialOnState; ToggleComponent.onValueChanged.AddListener(onClickAction); GameObject background = new GameObject("Background"); RectTransform backgroundTransform = background.AddComponent <RectTransform>(); LayoutElement backgroundLayout = background.AddComponent <LayoutElement>(); backgroundLayout.preferredHeight = 18f; // the toggle is always 18x18 backgroundLayout.preferredWidth = 18f; backgroundTransform.SetParentFixScale(TopTransform); background.AddComponent <CanvasRenderer>(); Image backgroundImage = background.AddComponent <Image>(); backgroundImage.sprite = Textures.KsmGuiSpriteBtnNormal; backgroundImage.type = Image.Type.Sliced; backgroundImage.fillCenter = true; ToggleComponent.targetGraphic = backgroundImage; GameObject checkmark = new GameObject("Checkmark"); RectTransform checkmarkTransform = checkmark.AddComponent <RectTransform>(); checkmarkTransform.SetAnchorsAndPosition(TextAnchor.MiddleCenter, TextAnchor.MiddleCenter, 0, 0); checkmarkTransform.SetSizeDelta(10, 10); // a checkbox is always 10x10, centered in the toggle checkmarkTransform.SetParentFixScale(backgroundTransform); checkmark.AddComponent <CanvasRenderer>(); RawImage checkmarkImage = checkmark.AddComponent <RawImage>(); checkmarkImage.texture = Textures.KsmGuiTexCheckmark; ToggleComponent.graphic = checkmarkImage; TextObject = new KsmGuiText(this, toggleText, null, TextAlignmentOptions.Left, false, TextOverflowModes.Ellipsis); if (width <= 0) { SetLayoutElement(true, false, -1, height); } else { SetLayoutElement(false, false, width - 18 - 5, height); } TextObject.TopTransform.SetParentFixScale(TopTransform); if (tooltipText != null) { SetTooltipText(tooltipText); } }
public KsmGuiWindow ( LayoutGroupType topLayout, bool destroyOnClose = true, float opacity = 0.8f, bool isDraggable = false, int dragOffset = 0, TextAnchor groupAlignment = TextAnchor.UpperLeft, float groupSpacing = 0f, TextAnchor screenAnchor = TextAnchor.MiddleCenter, TextAnchor windowPivot = TextAnchor.MiddleCenter, int posX = 0, int posY = 0 ) : base(null) { this.destroyOnClose = destroyOnClose; TopTransform.SetAnchorsAndPosition(screenAnchor, windowPivot, posX, posY); TopTransform.SetParentFixScale(KsmGuiMasterController.Instance.KsmGuiTransform); TopTransform.localScale = Vector3.one; // our custom lock manager InputLockManager = TopObject.AddComponent <KsmGuiInputLock>(); InputLockManager.rectTransform = TopTransform; // if draggable, add the stock dragpanel component IsDraggable = isDraggable; if (IsDraggable) { DragPanel = TopObject.AddComponent <DragPanel>(); DragPanel.edgeOffset = dragOffset; } Image img = TopObject.AddComponent <Image>(); img.sprite = Textures.KsmGuiSpriteBackground; img.type = Image.Type.Sliced; img.color = new Color(1.0f, 1.0f, 1.0f, opacity); SizeFitter = TopObject.AddComponent <ContentSizeFitter>(); SizeFitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize; SizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; if (topLayout == LayoutGroupType.Vertical) { LayoutGroup = TopObject.AddComponent <VerticalLayoutGroup>(); } else { LayoutGroup = TopObject.AddComponent <HorizontalLayoutGroup>(); } LayoutGroup.spacing = groupSpacing; LayoutGroup.padding = new RectOffset(5, 5, 5, 5); LayoutGroup.childControlHeight = true; LayoutGroup.childControlWidth = true; LayoutGroup.childForceExpandHeight = false; LayoutGroup.childForceExpandWidth = false; LayoutGroup.childAlignment = groupAlignment; // close on scene changes GameEvents.onGameSceneLoadRequested.Add(OnSceneChange); }
public void Setup() { this.obj = new TopObject(); this.obj.SetSlot("name", "Fido"); }
public KsmGuiVerticalScrollView(KsmGuiBase parent, int contentSpacing = 5, int contentPaddingLeft = 5, int contentPaddingRight = 5, int contentPaddingTop = 5, int contentPaddingBottom = 5) : base(parent) { ScrollRect scrollRect = TopObject.AddComponent <ScrollRect>(); scrollRect.horizontal = false; scrollRect.vertical = true; scrollRect.movementType = ScrollRect.MovementType.Elastic; scrollRect.elasticity = 0.1f; scrollRect.inertia = true; scrollRect.decelerationRate = 0.15f; scrollRect.scrollSensitivity = 10f; scrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport; scrollRect.verticalScrollbarSpacing = -3f; Image scrollRectBackground = TopObject.AddComponent <Image>(); scrollRectBackground.color = KsmGuiStyle.boxColor; // viewport object (child of top object) GameObject viewport = new GameObject("viewport"); RectTransform viewportTransform = viewport.AddComponent <RectTransform>(); viewport.AddComponent <CanvasRenderer>(); // Note : using a standard "Mask" has a bug where scrollrect content is visible // in other windows scollrects (like if all masks were "global" for all masked content) // see https://issuetracker.unity3d.com/issues/scroll-view-content-is-visible-outside-of-mask-when-there-is-another-masked-ui-element-in-the-same-canvas // using a RectMask2D fixes it, at the cost of the ability to use an image mask (but we don't care) viewport.AddComponent <RectMask2D>(); //Mask viewportMask = viewport.AddComponent<Mask>(); //viewportMask.showMaskGraphic = false; //Image viewportImage = viewport.AddComponent<Image>(); //viewportImage.color = new Color(1f, 1f, 1f, 1f); viewportTransform.SetParentFixScale(TopTransform); scrollRect.viewport = viewportTransform; // content object (child of viewport) GameObject contentObject = new GameObject("content"); Content = contentObject.AddComponent <RectTransform>(); Content.anchorMin = new Vector2(0f, 1f); Content.anchorMax = new Vector2(1f, 1f); Content.pivot = new Vector2(0f, 1f); Content.anchoredPosition = new Vector2(0f, 0f); Content.sizeDelta = new Vector2(0f, 0f); ContentSizeFitter sizeFitter = contentObject.AddComponent <ContentSizeFitter>(); sizeFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; sizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; ContentGroup = contentObject.AddComponent <VerticalLayoutGroup>(); ContentGroup.padding = new RectOffset(contentPaddingLeft, contentPaddingRight, contentPaddingTop, contentPaddingBottom); ContentGroup.spacing = contentSpacing; ContentGroup.childAlignment = TextAnchor.UpperLeft; ContentGroup.childControlHeight = true; ContentGroup.childControlWidth = true; ContentGroup.childForceExpandHeight = false; ContentGroup.childForceExpandWidth = false; Content.SetParentFixScale(viewportTransform); scrollRect.content = Content; // scrollbar (child of top object) GameObject scrollbar = new GameObject("scrollbar"); RectTransform scrollbarTransform = scrollbar.AddComponent <RectTransform>(); scrollbarTransform.anchorMin = new Vector2(1f, 0f); scrollbarTransform.anchorMax = new Vector2(1f, 1f); scrollbarTransform.pivot = new Vector2(1f, 1f); scrollbarTransform.anchoredPosition = new Vector2(0f, 0f); scrollbarTransform.sizeDelta = new Vector2(10f, 0f); // scrollbar width scrollbar.AddComponent <CanvasRenderer>(); Image scrollBarImage = scrollbar.AddComponent <Image>(); scrollBarImage.color = Color.black; Scrollbar scrollbarComponent = scrollbar.AddComponent <Scrollbar>(); scrollbarComponent.interactable = true; scrollbarComponent.transition = Selectable.Transition.ColorTint; scrollbarComponent.colors = new ColorBlock() { normalColor = Color.white, highlightedColor = Color.white, pressedColor = new Color(0.8f, 0.8f, 0.8f), disabledColor = new Color(0.8f, 0.8f, 0.8f, 0.5f), colorMultiplier = 1f, fadeDuration = 0.1f }; scrollbarComponent.navigation = new Navigation() { mode = Navigation.Mode.None }; scrollbarComponent.direction = Scrollbar.Direction.BottomToTop; scrollRect.verticalScrollbar = scrollbarComponent; scrollbarTransform.SetParentFixScale(TopTransform); // scrollbar sliding area GameObject slidingArea = new GameObject("slidingArea"); RectTransform slidingAreaTransform = slidingArea.AddComponent <RectTransform>(); slidingAreaTransform.anchorMin = new Vector2(0f, 0f); slidingAreaTransform.anchorMax = new Vector2(1f, 1f); slidingAreaTransform.pivot = new Vector2(0.5f, 0.5f); slidingAreaTransform.anchoredPosition = new Vector2(5f, 5f); slidingAreaTransform.sizeDelta = new Vector2(5f, 5f); // scrollbar width / 2 slidingAreaTransform.SetParentFixScale(scrollbarTransform); // scrollbar handle GameObject scrollbarHandle = new GameObject("scrollbarHandle"); RectTransform handleTransform = scrollbarHandle.AddComponent <RectTransform>(); scrollbarHandle.AddComponent <CanvasRenderer>(); handleTransform.anchorMin = new Vector2(0f, 0f); handleTransform.anchorMax = new Vector2(1f, 1f); handleTransform.pivot = new Vector2(0.5f, 0.5f); handleTransform.anchoredPosition = new Vector2(-4f, -4f); // relative to sliding area width handleTransform.sizeDelta = new Vector2(-4f, -4f); // relative to sliding area width scrollbarComponent.handleRect = handleTransform; Image handleImage = scrollbarHandle.AddComponent <Image>(); handleImage.color = new Color(0.4f, 0.4f, 0.4f); handleTransform.SetParentFixScale(slidingAreaTransform); scrollbarComponent.targetGraphic = handleImage; }
public KsmGuiToggleList(KsmGuiBase parent, UnityAction <T> onChildToggleActivated) : base(parent, 2, 0, 0, 0, 0, TextAnchor.UpperLeft) { ToggleGroupComponent = TopObject.AddComponent <ToggleGroup>(); OnChildToggleActivated = onChildToggleActivated; }
public KsmGuiVerticalSection(KsmGuiBase parent) : base(parent, 0, 5, 5, 5, 5, TextAnchor.UpperLeft) { Image background = TopObject.AddComponent <Image>(); background.color = KsmGuiStyle.boxColor; }