// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-02 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; namespace G { public class UI_Ingame : MonoBehaviour { public int chamaxhp { get; private set; } public int chahp { get; private set; } public float chasp { get; private set; } public float chamaxsp { get; private set; } private bool chargeon; private bool infinitymode; public Transform[] cut_extreme = new Transform[2]; private int damagecount; private float playtime; private bool general; private bool generaldead; private int cur_general = -1; public bool angelOn; private float _charge; private Transform _cha1; private EntityMainPlayer _scriptCha; public Joystick joystick { get; set; } public Vector2 joystickDirection => joystick.direction; #region Method public void GainEquipment(EntityItemEquipment equipment) { if (equipment.quality >= 3) UI.ToastBox.ShowEquipment(equipment.propName, equipment.quality, equipment.propIcon); UI.QuickBox.ShowEquipment(equipment); } public void GainMoney(int id, int amount) { var propItem = ItemProxy.Instance.GetStaticItem(id); if (propItem != null) { if (propItem.id ==1) { UI.ToastBox.ShowText(F.Utils.Text.Format("获得{0}: {1}", propItem.name, amount.ToString()), 9); } else { GlobalNotifier.PostNotification(GlobalDefine.EVENT_SHOW_TOAST, F.Utils.Text.Format("获得{0}: {1}", propItem.name, amount.ToString())); } } } #endregion #region Unity public static UI_Ingame Instance; private void Awake() { Instance = this; } private void Start() { var canvas = GetComponent(); canvas.worldCamera = KUIRoot.RootCamera; var canvasScaler = GetComponent(); canvasScaler.matchWidthOrHeight = KUIRoot.RootCanvas.GetComponent().matchWidthOrHeight; _effectRoot = transform.Find("_effectRoot"); _cha1 = GameObject.FindWithTag("Player").transform; _scriptCha = _cha1.GetComponent(); InvokeRepeating(nameof(CountDown), 0.1f, 1f); //cur_general = script_spawn.cur_general; chamaxsp = _scriptCha.maxSp; } private void Update() { if (_comboTimer <= 5f) { _comboTimer += Time.deltaTime; if (_comboTimer > 5f) { _comboNumber = 0; GlobalNotifier.PostNotification(GlobalDefine.EVENT_BATTLE_STAGE_HINT, null, "combo"); } } if (chargeon) { if (_charge < 1f) { _charge += Time.deltaTime; GlobalNotifier.PostNotification(GlobalDefine.EVENT_HOLD_STATE, _charge / 1F); } else { _charge = 0f; _scriptCha.Eximpact(); chargeon = false; GlobalNotifier.PostNotification(GlobalDefine.EVENT_HOLD_STATE, 0f); } } } private void OnApplicationPause(bool pocus) { if (pocus) { //PauseOn(); } } #endregion #region Field Transform _effectRoot; #endregion #region Method public void ShowEffect(string name) { StartCoroutine(ShowEffectCO(name, 1)); } IEnumerator ShowEffectCO(string name, float delay) { var fx = _effectRoot.Find(name); if (!fx) yield break; fx.gameObject.SetActive(true); yield return new WaitForSeconds(2f); fx.gameObject.SetActive(false); } void HideAllEffects() { for (int i = _effectRoot.childCount - 1; i >= 0; i--) { _effectRoot.GetChild(i).gameObject.SetActive(false); } } #endregion public void ResetTime() { playtime = 0f; damagecount = 0; InvokeRepeating(nameof(CountDown), 0.1f, 1f); } public string stage_num_text; private void CountDown() { int num = (int)(playtime / 60f); int num2 = (int)playtime % 60; string arg = " : "; if (num2 < 10) { arg = " : 0"; } //stage_num.text = num + arg + num2; stage_num_text = num + arg + num2; //timeText.text = stage_num_text; } public bool CallGeneral(short _dead) { if (cur_general < 0) { return false; } if (!_scriptCha.isLife || generaldead) { return false; } if (chasp >= 10f) { if (!general) { general = true; } else { general = false; } //script_spawn.CallGeneral(general, chahp, chamaxhp); _scriptCha.GeneralOnOff(general, _dead); return true; } return false; } public void GeneralDead() { general = false; generaldead = true; } public void GetAngel() { } private int _comboNumber; private float _comboTimer; public void ComboPlus(float amount) { _comboTimer = 0f; GlobalNotifier.PostNotification(GlobalDefine.EVENT_BATTLE_STAGE_HINT, (++_comboNumber) + ":", "combo"); } public void SuperModeOn() { cut_extreme[0].gameObject.SetActive(true); cut_extreme[1].gameObject.SetActive(true); } public void ShowBubble(string text, float duration = 0f, float delay = 0f) { StartCoroutine(ShowBubbleCO(text, duration, delay)); } private IEnumerator ShowBubbleCO(string text, float duration, float delay) { yield return new WaitForSeconds(delay); var bubble = BoardManager.Instance.CreateBubbleBoard("BubbleBoard"); bubble.gameObject.SetActive(true); bubble.SetContent(text); //bubble.SetTarget(script_cha.transform); bubble.SetDuration(duration); } public void ResetPower() { chargeon = false; _charge = 0f; } public void PowerCharge() { chargeon = true; } public void GrabCharge() { _charge += 0.02f; } /// /// /// /// public void GainExp(int a) { _scriptCha.GainExp(a); } public void PauseOn() { GlobalNotifier.PostNotification(GlobalDefine.EVENT_GAME_WINDOW, null, "menu"); Time.timeScale = 0f; } public void Settle(string source = "") { _scriptCha.StopControl(); GameLevel.Instance.UnloadLevel(); UI.QuickBox.Clear(); if (GameLevel.Instance.normalMode) { KUIWindow.OpenWindow(GameLevel.Instance.battleResult); //GlobalNotifier.PostNotification(GlobalDefine.EVENT_GAME_WINDOW, source, "settle"); } else { KUIWindow.OpenWindow(GameLevel.Instance.battleResult); //GlobalNotifier.PostNotification(GlobalDefine.EVENT_GAME_WINDOW, "endless_" + source, "settle"); } } /// /// 拒绝复活 /// public void OnRefuseRevive() { GameLevel.Instance.FinishLevel(false, "refuse_revive"); Settle("refuse_revive"); KStatistics.Instance.ReportRevive(GameLevel.Instance.curStageId.ToString(), "fail"); } /// /// /// public void OnClickRestart() { Time.timeScale = 1f; GameLevel.Instance.FinishLevel(false, "restart"); Settle("restart"); //pauseGO.SetActive(false); } /// /// /// public void OnClickSetting() { //option = true; } public void OnClickContinue() { Time.timeScale = 1f; //pause = false; _scriptCha.StartControl(); //this.gameObject.SetActive(false); //GC.Collect(); } public void Resurrection() { _scriptCha.Reborn(); KStatistics.Instance.ReportRevive(GameLevel.Instance.curStageId.ToString(), "success"); } public void Damaged_Extreme() { damagecount++; } void SetHpProgress(float hp) { if (hp < 0.2f) { GlobalNotifier.PostNotification(GlobalDefine.EVENT_BATTLE_STAGE_HINT, type: "dying"); } else if (hp < 0.5f) { GlobalNotifier.PostNotification(GlobalDefine.EVENT_BATTLE_STAGE_HINT, type: "danger"); } else { GlobalNotifier.PostNotification(GlobalDefine.EVENT_BATTLE_STAGE_HINT, type: "heal"); } } public void Damaged(int damage) { var board = BoardManager.Instance.CreateDamageBoard("DamageBoard"); board.SetValue(damage, DamageBoardType.PLAYER_HP_SUB); board.SetPosition(_cha1.position + new Vector3(0f, 0.2f, 0f)); } public void GameOver() { if (EntityMainPlayer.Instance.deathCount < 2) { GlobalNotifier.PostNotification(GlobalDefine.EVENT_GAME_WINDOW, null, "rivive"); KStatistics.Instance.ReportEventDied(GameLevel.Instance.curStageId.ToString(), 1); } else { GameLevel.Instance.FinishLevel(false, "game_over"); Settle("game_over"); KStatistics.Instance.ReportEventDied(GameLevel.Instance.curStageId.ToString(), 2); } } public void StatUpdate_sp(float _sp) { chasp = _sp; if (chasp >= 50f) { } else { } if (cur_general != -1 && !generaldead) { } } public void StatUpdate_hp(int _hp, int _maxhp) { float num = 0f; //if (cur_difficulty != 2) { chahp = _hp; chamaxhp = _maxhp; num = chahp / (float)chamaxhp; SetHpProgress(num); } } public void OnSkillBtnClick(Cha_Moves.MovesInfo buffInfo) { _scriptCha.OnSkillBtnClick(buffInfo); } /// /// /// public void OnSkillBtnClick(int index) { if (index == 0) { _scriptCha.OnSPBtnClick(); } } public bool autoAttack { get { return _scriptCha.autoAttack; } } /// /// /// public bool OnAutoBtnClick() { _scriptCha.autoAttack = !_scriptCha.autoAttack; return _scriptCha.autoAttack; } public bool OnAutoSkillBtnClick() { _scriptCha.autoCastSkill = !_scriptCha.autoCastSkill; return _scriptCha.autoCastSkill; } public void OnAttack() { _scriptCha.OnAttackBtnClick(); } public void OnDodge() { _scriptCha.OnDodgeBtnClick(); } public void OnEquipmentChanged() { _scriptCha.SyncValue(false); } } }