using System; using Cute; using UnityEngine; namespace Wizard; public class ChapterSelectSphere : MonoBehaviour { [SerializeField] private UIButton _button; [SerializeField] private UISprite _bodySprite; [SerializeField] private UISprite _arrowDownSprite; [SerializeField] private UISprite _arrowUpSprite; private float _arrowAlpha = 1f; private bool _isArrowAlphaDown = true; private const float ARROW_ANIMATION_SPEED = 1f; private const float SCROLL_ROTATE_REVISION = 7f; public Action OnClick { get; set; } public bool IsScrollUpEnable { get; set; } public bool IsScrollDownEnable { get; set; } private void Start() { _button.onClick.Add(new EventDelegate(delegate { OnClick.Call(); })); } public void UpdateChapterSelectStatus(bool isChapterSelectVisible, bool isSelectEnable) { _bodySprite.spriteName = GetBodySpriteName(isChapterSelectVisible, isSelectEnable); _arrowUpSprite.spriteName = GetArrowSpriteName(isChapterSelectVisible, IsScrollUpEnable); _arrowDownSprite.spriteName = GetArrowSpriteName(isChapterSelectVisible, IsScrollDownEnable); _arrowUpSprite.alpha = ((isChapterSelectVisible && IsScrollUpEnable) ? _arrowAlpha : 1f); _arrowDownSprite.alpha = ((isChapterSelectVisible && IsScrollDownEnable) ? _arrowAlpha : 1f); } public void OnSelectChapter(bool isChapterSelectEnable) { _arrowUpSprite.spriteName = GetArrowSpriteName(isChapterSelectEnable, IsScrollUpEnable); _arrowDownSprite.spriteName = GetArrowSpriteName(isChapterSelectEnable, IsScrollDownEnable); _arrowUpSprite.alpha = (IsScrollUpEnable ? _arrowAlpha : 1f); _arrowDownSprite.alpha = (IsScrollDownEnable ? _arrowAlpha : 1f); } public void UpdateArrowAlpha() { if (UpdatePingPongByDeltaTime(ref _arrowAlpha, 0f, 1f, 1f, _isArrowAlphaDown)) { _isArrowAlphaDown = !_isArrowAlphaDown; } if (IsScrollUpEnable) { _arrowUpSprite.alpha = _arrowAlpha; } if (IsScrollDownEnable) { _arrowDownSprite.alpha = _arrowAlpha; } } public void UpdateRotationOnScroll(float areaY, int chapterCount) { iTween.Stop(_bodySprite.gameObject); float z = 0f; float num = 80f; float num2 = 50f; if (areaY >= (float)chapterCount * num - num2) { z = (float)chapterCount * num - num2 - areaY; z /= 7f; z *= -1f; } else if (areaY <= 0f - num2) { z = areaY; z /= 7f; } iTween.RotateUpdate(_bodySprite.gameObject, new Vector3(0f, 0f, z), 0.2f); } public void ResetRotationOnScroll() { iTween.Init(_bodySprite.gameObject); iTween.RotateTo(_bodySprite.gameObject, iTween.Hash("z", 0, "time", 1.35f, "easetype", iTween.EaseType.easeOutElastic)); } private string GetArrowSpriteName(bool isChapterSelectEnable, bool isscrollenable) { if (isChapterSelectEnable) { if (isscrollenable) { return "arrow_jog_01"; } return "arrow_jog_02"; } return "arrow_jog_03"; } private string GetBodySpriteName(bool isChapterSelectEnable, bool isChapterListSwitchEnable) { if (isChapterListSwitchEnable) { if (isChapterSelectEnable) { return "btn_jog_01_core"; } return "btn_jog_03_core"; } return "btn_jog_03_core"; } private static bool UpdatePingPongByDeltaTime(ref float val, float min, float max, float speed, bool isdown) { bool result = false; if (isdown) { val -= speed * Time.deltaTime; if (val < min) { val = min; result = true; } } else { val += speed * Time.deltaTime; if (val > max) { val = max; result = true; } } return result; } }