Files
JJBB/Assets/Project/Script/Scene/SceneLogic/FirstShowScene.cs

504 lines
15 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using System.Collections;
using Games.GlobeDefine;
using Games.LogicObj;
using Games.Mission;
using Games.Scene;
using GCGame;
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.SceneManagement;
/*
*
local BeginnerFBPhase =
{
INVALIDE = -1,
PHASE_0 = 0, --
PHASE_1 = 1, --
PHASE_2 = 2, --
PHASE_3 = 3, --
PHASE_4 = 4, --
PHASE_5 = 5, -- BOSS
PHASE_6 = 6, -- BOSS死亡后播放轻功动画+BOSS出场动画
PHASE_7 = 7, -- BOSS
PHASE_8 = 8, -- BOSS死亡后播放动画
PHASE_MAX = 9 --
}
*/
public class FirstShowScene : MonoBehaviour
{
private const string bundleName = "";
public static int FirstShowStep = -100;
private static FirstShowScene m_instance;
//寻路位置点
public GameObject[] TargetPoints;
//特效
public GameObject EffectObjectStage;
public GameObject EffectObject3;
public GameObject EffectObject2;
public GameObject StaveShow;
public UICameraTexture StaveModel;
public GameObject Stage;
public Canvas m_Canvas;
public GameObject SkipBtn;
public GameObject OverShowBtn;
public RawImageAlpha m_RawImage1;
public RawImageAlpha m_RawImage2;
public GameObject JumpPoint;
public GameObject FbQiang;
public GameObject[] _SceneMovies;
private bool _InitJumpPoint;
private bool Destroyend;
private int m_CurrentBeginFBStep = -100;
private float m_lastUpdateTime;
private int m_ReleaseStep = -1;
private float m_UpdateSpace = 1;
private void Awake()
{
if (m_instance != null)
{
m_instance.gameObject.SetActive(false);
Destroy(m_instance.gameObject);
m_instance = null;
}
m_instance = this;
if (Singleton<ObjManager>.Instance.MainPlayer != null)
MainPlayerFirstFaceTo(Singleton<ObjManager>.Instance.MainPlayer);
DontDestroyOnLoad(gameObject);
}
private void Start()
{
FbQiang.SetActive(true);
JumpPoint.SetActive(false);
Destroyend = false;
OverShowBtn.SetActive(false);
SetCanvas(true);
Utils.HideMainTopRightUI();
var mainplay = Singleton<ObjManager>.Instance.MainPlayer;
if (mainplay != null)
mainplay.EnterAutoCombat();
if (FirstShowStep != -100) UpdateNewStep(FirstShowStep);
}
private void Update()
{
if (Destroyend)
return;
if (SceneMovieManager.Instance._PlayingMovie)
return;
var mainplay = Singleton<ObjManager>.Instance.MainPlayer;
if (mainplay == null)
return;
if (SceneLogic.CameraController == null)
return;
if (Time.unscaledTime - m_lastUpdateTime < m_UpdateSpace)
return;
m_UpdateSpace = 1;
m_lastUpdateTime = Time.unscaledTime;
if (_InitJumpPoint == false)
{
CreateJumpPoint();
Stage.SetActive(false);
return;
}
switch (m_CurrentBeginFBStep)
{
case 0:
{
if (TargetPoints.Length < 1 ||
Vector3.Distance(mainplay.Position, TargetPoints[0].transform.position) < 2)
{
mainplay.EnterAutoCombat();
}
else
{
if (TargetPoints[0].activeSelf == false)
return;
mainplay.MainPlayMoveToPos(TargetPoints[0].transform.position, 2, bIsAutoSearch: false);
TargetPoints[0].SetActive(false);
return;
}
}
break;
case 1:
{
mainplay.LeveAutoCombat();
PlayMovie(0);
SendStepToServer(2);
}
break;
case 2:
{
if (JumpPoint.activeSelf == false)
{
JumpPoint.SetActive(true);
m_UpdateSpace = 0.5f;
return;
}
if (TargetPoints.Length < 2 ||
Vector3.Distance(mainplay.Position, TargetPoints[1].transform.position) < 3)
{
mainplay.EnterAutoCombat();
}
else
{
if (TargetPoints[1].activeSelf == false)
return;
mainplay.MainPlayMoveToPos(TargetPoints[1].transform.position, 3, bIsAutoSearch: false);
TargetPoints[1].SetActive(false);
return;
}
}
break;
case 3:
{
StartCoroutine(IEnumerator3(mainplay));
return;
}
case 4:
{
if (FbQiang.activeSelf)
{
ShowStave(20190);
EffectObjectStage.SetActive(true);
}
FbQiang.SetActive(false);
// if(UIManager.Instance()!=null && UIManager.Instance().EventSystemObj!=null)
// UIManager.Instance().EventSystemObj.gameObject.SetActive(false);
if (Vector3.Distance(mainplay.Position, TargetPoints[2].transform.position) < 0.5f)
{
if (TargetPoints[2].activeSelf)
{
TargetPoints[2].SetActive(false);
return;
}
// if (UIManager.Instance() != null && UIManager.Instance().EventSystemObj != null)
// UIManager.Instance().EventSystemObj.gameObject.SetActive(true);
Stage.SetActive(false);
PlayMovie(1);
SendStepToServer(5);
break;
}
if (Vector3.Distance(mainplay.Position, TargetPoints[2].transform.position) > 0.5f)
mainplay.MainPlayMoveToPos(TargetPoints[2].transform.position);
return;
}
case 5:
{
mainplay.StopEffect(4099);
StartCoroutine(AutoCombat(0.5f));
Stage.SetActive(true);
Stage.transform.position = new Vector3(9, 0, 1);
EffectObject3.SetActive(true);
Utils.HideMainTopRightUI(false);
// if (UIManager.Instance() != null && UIManager.Instance().EventSystemObj != null)
// UIManager.Instance().EventSystemObj.gameObject.SetActive(true);
}
break;
case 6:
{
// if (UIManager.Instance() != null && UIManager.Instance().EventSystemObj != null)
// UIManager.Instance().EventSystemObj.gameObject.SetActive(true);
Stage.SetActive(true);
Stage.transform.position = new Vector3(9, 0, 1);
mainplay.LeveAutoCombat();
m_UpdateSpace = 0.5f;
var distance = Vector3.Distance(mainplay.Position, TargetPoints[3].transform.position);
float minDis = 5;
if (TargetPoints[3].activeSelf)
if (distance > 2 && distance < minDis)
minDis = 2;
TargetPoints[3].SetActive(false);
if (distance > minDis && distance < 30)
{
mainplay.MainPlayMoveToPos(TargetPoints[3].transform.position);
return;
}
mainplay.StopMove();
SendStepToServer(7);
PlayMovie(2);
SetCameraPos();
Utils.HideMainTopRightUI(false);
}
break;
case 7:
{
mainplay.StopMove();
mainplay.StopEffect(4138);
if (SceneLogic.CameraController == null)
return;
SetCameraPos();
mainplay.EnterAutoCombat();
}
break;
case 8:
{
PlayMovie(3);
mainplay.LeveAutoCombat();
}
break;
case 9:
{
SkipBtn.SetActive(false);
GameManager.gameManager.SoundManager.StopAllSoundEffect();
GameManager.gameManager.SoundManager.PlaySoundEffect(512);
m_CurrentBeginFBStep = -100;
m_UpdateSpace = 0;
return;
}
}
m_CurrentBeginFBStep = -100;
}
private void OnDestroy()
{
FirstShowStep = -100;
if (m_instance.gameObject.activeSelf == false)
m_instance = null;
}
public static FirstShowScene Instance()
{
return m_instance;
}
public static bool CanFindMissionPath()
{
return GameManager.gameManager.RunningScene != (int) GameDefine_Globe.SCENE_DEFINE.SCENE_FIRSTSHOW;
}
public static void SetCameraPos()
{
if (SceneLogic.CameraController == null)
return;
SceneLogic.CameraController.Pitch = 10.04f;
SceneLogic.CameraController.Yaw = 258.04f;
SceneLogic.CameraController.Distance = 15.15f;
}
private void SetCanvas(bool UseUI)
{
if (UseUI)
{
if (UIManager.Instance() != null)
{
m_Canvas.renderMode = RenderMode.ScreenSpaceCamera;
m_Canvas.worldCamera = UIManager.Instance().UICamera;
m_Canvas.sortingOrder = UIManager.Instance().Canvas.sortingOrder - 1;
}
}
else
{
m_Canvas.renderMode = RenderMode.ScreenSpaceOverlay;
m_Canvas.sortingOrder = 11000;
}
}
public void UpdateNewStep(int step)
{
m_CurrentBeginFBStep = step;
m_ReleaseStep = step;
FbQiang.SetActive(m_CurrentBeginFBStep <= 4);
m_lastUpdateTime = 0;
if (m_CurrentBeginFBStep == 7) SetCameraPos();
}
private int MoviePlayOver()
{
SkipBtn.SetActive(true);
StartCoroutine(SendStepToServer());
m_lastUpdateTime = Time.unscaledTime;
m_UpdateSpace = 1.5f;
return 0;
}
private IEnumerator SendStepToServer()
{
//第八个步骤特殊处理一下,动画完毕需要显示图片
if (m_ReleaseStep == 8)
{
SetCanvas(false);
SkipBtn.SetActive(false);
m_RawImage1.gameObject.SetActive(true);
}
if (m_ReleaseStep == 5)
{
Stage.SetActive(true);
Stage.transform.position = new Vector3(9, 0, 1);
}
yield return new WaitForSeconds(1);
if (m_ReleaseStep == 8)
{
SendStepToServer(m_ReleaseStep + 1);
m_CurrentBeginFBStep = 9;
}
}
private void SendStepToServer(int step)
{
var req = new ReqChangeBeginnerFBPhase();
req.phase = step;
req.SendMsg();
}
private void ShowStave(int charModelID)
{
var charModel = TableManager.GetCharModelByID(charModelID);
if (charModel == null)
return;
StaveShow.SetActive(true);
StaveModel.InitModelPath("", charModel, isBody: true);
StartCoroutine(HideStave());
}
private bool Click_Mission()
{
if (MissionDialogAndLeftTabsLogic.Instance() == null)
return false;
MissionDialogAndLeftTabsLogic.Instance().ShowDefaultToggle();
foreach (var kvp in GameManager.gameManager.MissionManager.MissionList.m_aMission)
{
if (kvp.Key < 0)
continue;
var missionBase = TableManager.GetMissionBaseByID(kvp.Key);
if (missionBase != null)
if (missionBase.MissionType == (int) MISSIONTYPE.MISSION_MAIN &&
MissionDialogAndLeftTabsLogic.Instance() != null)
{
MissionDialogAndLeftTabsLogic.Instance().ClickOneMissionItem(kvp.Key);
return true;
}
}
return false;
}
private IEnumerator HideStave()
{
yield return new WaitForSeconds(2);
StaveShow.SetActive(false);
}
private IEnumerator IEnumerator3(Obj_MainPlayer mainplayer)
{
if (mainplayer != null)
mainplayer.PlayEffect(4099);
yield return new WaitForSeconds(0);
if (Click_Mission()) m_CurrentBeginFBStep = -100;
}
private IEnumerator IEnumerator6(float waitTime)
{
yield return new WaitForSeconds(waitTime);
}
private IEnumerator AutoCombat(float waitTime)
{
yield return new WaitForSeconds(waitTime);
var mainplay = Singleton<ObjManager>.Instance.MainPlayer;
if (mainplay != null) mainplay.EnterAutoCombat();
}
private void DestroySelf()
{
Destroyend = true;
gameObject.SetActive(false);
Destroy(gameObject);
}
public void MainPlayerFirstFaceTo(Obj_Character obj)
{
if (GameManager.gameManager.RunningScene != (int) GameDefine_Globe.SCENE_DEFINE.SCENE_FIRSTSHOW)
{
DestroySelf();
return;
}
if (obj == null)
return;
var mainplay = Singleton<ObjManager>.Instance.MainPlayer;
if (mainplay != null)
mainplay.EnterAutoCombat();
if (Vector3.Distance(obj.Position, TargetPoints[4].transform.position) < 5)
obj.FaceTo(TargetPoints[4].transform.position);
}
//如果不在展示场景就删除控件
public void CheckScene(int NextSceneID)
{
SkipBtn.SetActive(NextSceneID == (int) GameDefine_Globe.SCENE_DEFINE.SCENE_FIRSTSHOW);
if (NextSceneID == (int) GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN)
{
DestroySelf();
return;
}
if (NextSceneID != (int) GameDefine_Globe.SCENE_DEFINE.SCENE_FIRSTSHOW) DestroySelf();
}
private void PlayMovie(int index)
{
if (_SceneMovies.Length > index && _SceneMovies[index] != null && _SceneMovies[index].gameObject != null)
{
SkipBtn.SetActive(false);
_SceneMovies[index].gameObject.SetActive(true);
SceneMovieManager.Instance.MovieOverEvent += MoviePlayOver;
}
}
private void CreateJumpPoint()
{
_InitJumpPoint = true;
var sceneLogic = FindObjectOfType<SceneLogic>();
if (sceneLogic == null)
LogModule.ErrorLog("No SceneLogic in scene FirstShow at Scene " + SceneManager.GetActiveScene().name);
else
sceneLogic.RefreshSceneItems((int) GameDefine_Globe.SCENE_DEFINE.SCENE_FIRSTSHOW, JumpPoint);
}
public void CloseStave()
{
StaveShow.SetActive(false);
}
public void SkipShow()
{
SendStepToServer(9);
m_UpdateSpace = 0;
}
}