using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
|
public class FairyFeastTransmitShow : MonoBehaviour
|
{
|
static FairyFeastTransmitShow s_Instance = null;
|
public static FairyFeastTransmitShow Instance
|
{
|
get
|
{
|
if (s_Instance == null)
|
{
|
var gameObject = Instantiate(UILoader.LoadPrefab("FairyFeastTransmitShow"));
|
s_Instance = gameObject.GetComponent<FairyFeastTransmitShow>();
|
s_Instance.transform.position = new Vector3(0, 4000, 5000);
|
s_Instance.name = "FairyFeastTransmitShow";
|
s_Instance.IsOpen = false;
|
s_Instance.SetActive(true);
|
DontDestroyOnLoad(gameObject);
|
}
|
return s_Instance;
|
}
|
}
|
|
Camera m_ShowCamera;
|
Transform m_ShowPoint1;
|
Transform m_ShowPoint2;
|
|
FairyTransmitModel m_Hero;
|
FairyTransmitModel m_Player;
|
|
SFXController m_Effect;
|
|
public Camera showCamera
|
{
|
get { return m_ShowCamera; }
|
}
|
|
public FairyTransmitModel hero
|
{
|
get { return m_Hero; }
|
}
|
|
public FairyTransmitModel player
|
{
|
get { return m_Player; }
|
}
|
|
public bool IsOpen
|
{
|
get; private set;
|
}
|
|
public float progress
|
{
|
get
|
{
|
return timer / model.transmitExpSeconds;
|
}
|
}
|
|
float timer = 0f;
|
int stage = 0;
|
|
PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel<RoleParticularModel>(); } }
|
FairyFeastModel model { get { return ModelCenter.Instance.GetModel<FairyFeastModel>(); } }
|
EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
|
public event Action<ulong> popUpExpEvent;
|
public event Action onComplete;
|
|
public void Open()
|
{
|
if (IsOpen)
|
{
|
return;
|
}
|
try
|
{
|
IsOpen = true;
|
timer = 0f;
|
stage = 0;
|
|
//transform.position = Vector3.zero;
|
|
if (m_Effect != null)
|
{
|
SFXPlayUtility.Instance.Release(m_Effect);
|
m_Effect = null;
|
}
|
|
m_Effect = SFXPlayUtility.Instance.Play(3075, transform);
|
m_Effect.transform.SetParent(transform);
|
m_Effect.gameObject.SetActive(true);
|
m_Effect.duration = 0;
|
m_Effect.transform.localPosition = transform.position;
|
LayerUtility.SetLayer(m_Effect.gameObject, LayerUtility.BossShow, true);
|
|
m_ShowCamera = m_Effect.transform.GetComponentInChildren<Camera>();
|
m_ShowPoint1 = m_Effect.transform.Find("Ca/Animaiotn/gua1");
|
m_ShowPoint2 = m_Effect.transform.Find("Ca/Animaiotn/gua2");
|
m_ShowCamera.enabled = true;
|
|
WindowJumpMgr.Instance.ClearJumpData();
|
WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.BaseAndCustom);
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
HideUI();
|
|
DisplayPlayer();
|
|
WindowCenter.Instance.Open<FairyFeastTransmitShowWin>(true);
|
|
m_ShowCamera.SetActive(true);
|
CameraController.Instance.CameraObject.SetActive(false);
|
|
StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
|
StageLoad.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
|
}
|
catch (Exception e)
|
{
|
Stop();
|
DebugEx.LogError(e.StackTrace);
|
}
|
|
}
|
|
private void OnStartStageLoadingEvent(int obj)
|
{
|
Stop();
|
}
|
|
private void LateUpdate()
|
{
|
if (IsOpen)
|
{
|
timer += Time.deltaTime;
|
if (timer >= model.transmitCostSeconds)
|
{
|
Stop();
|
return;
|
}
|
if (timer >= stage * model.transmitExpSeconds / (model.expFlyStage + 1))
|
{
|
StepStage();
|
stage++;
|
}
|
}
|
}
|
|
void StepStage()
|
{
|
if (stage > 0 && stage <= model.expFlyStage)
|
{
|
if (popUpExpEvent != null)
|
{
|
var exp = model.totalExp
|
/ (ulong)model.expFlyStage
|
/ (ulong)model.expFlyCount;
|
for (int i = 0; i < model.expFlyCount; i++)
|
{
|
popUpExpEvent(exp);
|
}
|
}
|
}
|
}
|
|
void HideUI()
|
{
|
UIRoot uiRoot = WindowCenter.Instance.uiRoot;
|
uiRoot.EnableCanvas(false, uiRoot.baseCanvas,
|
uiRoot.lifeBarCanvas,
|
uiRoot.nameCanvas,
|
uiRoot.normalCanvas,
|
uiRoot.modalCanvas,
|
uiRoot.tipsCanvas,
|
uiRoot.systemCanvas,
|
uiRoot.recycleBin,
|
uiRoot.fightCanvasGroup.damageNumGroups[0].parent);
|
CameraUtility.RemoveCullingMask(CameraManager.uiCamera, LayerUtility.UIEffectLayer);
|
}
|
|
void OpenUI()
|
{
|
UIRoot uiRoot = WindowCenter.Instance.uiRoot;
|
uiRoot.EnableCanvas(true, uiRoot.baseCanvas,
|
uiRoot.lifeBarCanvas,
|
uiRoot.nameCanvas,
|
uiRoot.normalCanvas,
|
uiRoot.modalCanvas,
|
uiRoot.tipsCanvas,
|
uiRoot.systemCanvas,
|
uiRoot.recycleBin,
|
uiRoot.fightCanvasGroup.damageNumGroups[0].parent);
|
CameraUtility.AddCullingMask(CameraManager.uiCamera, LayerUtility.UIEffectLayer);
|
}
|
|
void DisplayPlayer()
|
{
|
var appearance = equipModel.GetAppearance();
|
|
var clothesId = appearance.clothes;
|
var wingsId = appearance.wings;
|
var secondaryId = appearance.secondary;
|
var fashionClothesId = appearance.fashionClothes;
|
var fashionSecondaryId = appearance.fashionSecondary;
|
|
var data = new UI3DPlayerExhibitionData
|
{
|
job = PlayerDatas.Instance.baseData.Job,
|
clothesId = clothesId,
|
wingsId = wingsId,
|
secondaryId = secondaryId,
|
fashionClothesId = fashionClothesId,
|
fashionSecondaryId = fashionSecondaryId,
|
isDialogue = false,
|
};
|
|
if (m_Hero != null)
|
{
|
m_Hero.Dispose();
|
}
|
m_Hero = new FairyTransmitModel();
|
m_Hero.Show(data, m_ShowPoint2);
|
m_Hero.SitDown();
|
|
var viewPlayerData = roleParticularModel.GetViewPlayerData((int)model.transmitPlayer);
|
if (viewPlayerData != null)
|
{
|
clothesId = viewPlayerData.GetItemId(RoleEquipType.Clothes);
|
fashionClothesId = viewPlayerData.GetItemId(RoleEquipType.FashionClothes);
|
wingsId = viewPlayerData.GetItemId(RoleEquipType.Wing);
|
secondaryId = viewPlayerData.GetItemId(RoleEquipType.Weapon2);
|
fashionSecondaryId = viewPlayerData.GetItemId(RoleEquipType.FashionWeapon2);
|
|
data = new UI3DPlayerExhibitionData
|
{
|
job = viewPlayerData.rolePropData.Job,
|
clothesId = clothesId,
|
wingsId = wingsId,
|
secondaryId = secondaryId,
|
fashionClothesId = fashionClothesId,
|
fashionSecondaryId = fashionSecondaryId,
|
suitLevel = (int)(viewPlayerData.rolePropData.EquipShowSwitch % 10)
|
};
|
|
if (m_Player != null)
|
{
|
m_Player.Dispose();
|
}
|
m_Player = new FairyTransmitModel();
|
m_Player.Show(data, m_ShowPoint1);
|
m_Player.Transmit();
|
}
|
}
|
|
public void Stop()
|
{
|
IsOpen = false;
|
model.TransmitComplete();
|
OpenUI();
|
WindowCenter.Instance.Close<FairyFeastTransmitShowWin>();
|
|
if (model.totalExp != 0)
|
{
|
//显示奖励
|
List<Item> items = new List<Item>();
|
|
items.Add(new Item()
|
{
|
id = 27,
|
count = 1,
|
});
|
|
ItemLogicUtility.Instance.ShowGetItem(items, Language.Get("DungeonExpUpVictoryWin__3") + " " + model.totalExp, 0, isNameShow:false);
|
}
|
|
CameraController.Instance.CameraObject.SetActive(true);
|
StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
|
transform.localPosition = new Vector3(0, 4000, 5000);
|
if (m_ShowCamera != null)
|
{
|
m_ShowCamera.enabled = false;
|
}
|
if (m_Effect != null)
|
{
|
m_Effect.gameObject.SetActive(false);
|
SFXPlayUtility.Instance.Release(m_Effect);
|
m_Effect = null;
|
}
|
if (m_Hero != null)
|
{
|
m_Hero.Dispose();
|
m_Hero = null;
|
}
|
if (m_Player != null)
|
{
|
m_Player.Dispose();
|
m_Player = null;
|
}
|
|
if (onComplete != null)
|
{
|
onComplete();
|
}
|
}
|
|
public class FairyTransmitModel
|
{
|
Transform showPoint;
|
int job = 1;
|
|
GameObject clothesModel;
|
Animator clothesAnimator;
|
GameObject secondaryModel;
|
GameObject extraSecondaryModel;
|
GameObject wingsModel;
|
Animator wingsAnimator;
|
|
public Transform MP_Name { get; private set; }
|
|
public void Show(UI3DPlayerExhibitionData data, Transform showPoint)
|
{
|
this.showPoint = showPoint;
|
this.job = data.job;
|
|
var clothes = data.fashionClothesId > 0 ? data.fashionClothesId : data.clothesId;
|
var wingsId = data.wingsId;
|
var secondaryId = data.fashionSecondaryId > 0 ? data.fashionSecondaryId : data.secondaryId;
|
|
var jobConfig = JobSetupConfig.Get(job);
|
|
var clothesResId = 0;
|
if (clothes == 0)
|
{
|
clothesResId = jobConfig.BaseEquip[0];
|
}
|
else
|
{
|
var item = ItemConfig.Get(clothes);
|
clothesResId = item == null ? clothesResId = jobConfig.BaseEquip[0] : item.ChangeOrd;
|
}
|
|
PutOnClothes(clothesResId);
|
|
var secondaryResId = 0;
|
if (secondaryId == 0)
|
{
|
if (data.fashionClothesId <= 0)
|
{
|
if (this.job == 1)
|
{
|
secondaryResId = ModelResConfig.GetHandByClothesID(clothesResId);
|
}
|
}
|
}
|
else
|
{
|
var item = ItemConfig.Get(secondaryId);
|
if (item != null)
|
{
|
secondaryResId = item.ChangeOrd;
|
}
|
}
|
if (secondaryResId == 0)
|
{
|
secondaryResId = jobConfig.BaseEquip[2];
|
}
|
PutOnSecondary(secondaryResId);
|
|
var extraSecondaryId = 0;
|
if (data.job == 1)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(0);
|
if (data.fashionClothesId > 0)
|
{
|
var _item = ItemConfig.Get(data.fashionClothesId);
|
if (_item != null)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(_item.ChangeOrd);
|
}
|
}
|
else if (data.clothesId > 0)
|
{
|
var _item = ItemConfig.Get(data.clothesId);
|
if (_item != null)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(_item.ChangeOrd);
|
}
|
}
|
|
if (secondaryResId == 0
|
|| (data.fashionClothesId != 0 && data.fashionSecondaryId > 0)
|
|| (data.fashionClothesId == 0 && data.fashionSecondaryId > 0))
|
{
|
PutOnExtraSecondary(job, extraSecondaryId);
|
}
|
}
|
|
var wingsResId = 0;
|
if (wingsId != 0)
|
{
|
var item = ItemConfig.Get(wingsId);
|
wingsResId = item == null ? 0 : item.ChangeOrd;
|
}
|
PutOnWing(wingsResId);
|
|
SwitchMaterial(clothesResId, false);
|
}
|
|
public void PutOnClothes(int clothesResId)
|
{
|
var config = JobSetupConfig.Get(job);
|
var _prefab = InstanceResourcesLoader.LoadModelRes(clothesResId, true);
|
if (!_prefab)
|
{
|
clothesResId = config.BaseEquip[0];
|
}
|
|
LoadClothes(clothesResId);
|
}
|
|
private void LoadClothes(int clothesResId)
|
{
|
var prefab = InstanceResourcesLoader.LoadModelRes(clothesResId, true);
|
if (prefab)
|
{
|
clothesModel = GameObject.Instantiate(prefab);
|
|
LayerUtility.SetLayer(clothesModel, LayerUtility.BossShow, false);
|
var skinnedMeshRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>(true);
|
LayerUtility.SetLayer(skinnedMeshRenderer.gameObject, LayerUtility.BossShow, false);
|
clothesModel.SetActive(true);
|
clothesModel.transform.SetParentEx(showPoint, Vector3.zero, Quaternion.identity, Vector3.one);
|
clothesAnimator = clothesModel.GetComponent<Animator>();
|
|
MP_Name = clothesModel.transform.GetChildTransformDeeply("A_Name");
|
if (!MP_Name)
|
{
|
MP_Name = clothesModel.transform;
|
}
|
|
if (clothesAnimator)
|
{
|
RuntimeAnimatorController _controller = AnimatorControllerLoader.Load(AnimatorControllerLoader.controllerUISuffix, clothesResId);
|
clothesAnimator.runtimeAnimatorController = _controller;
|
clothesAnimator.enabled = true;
|
}
|
else
|
{
|
DebugEx.LogErrorFormat("角色资源: {0} 没有动画控制器", clothesResId);
|
}
|
}
|
}
|
|
public void SwitchMaterial(int clothesId, bool isSuit)
|
{
|
if (clothesModel == null)
|
{
|
return;
|
}
|
|
var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (smRenderer == null)
|
{
|
return;
|
}
|
|
MaterialLoader.Release(smRenderer.material);
|
|
var newMat = MaterialLoader.LoadClothesMaterial(clothesId, true, isSuit);
|
if (newMat != null)
|
{
|
smRenderer.material = newMat;
|
}
|
}
|
|
private void PutOnSecondary(int secondaryResId)
|
{
|
if (this.job == 2)
|
{
|
return;
|
}
|
if (secondaryResId != 0)
|
{
|
var prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
|
if (!prefab)
|
{
|
var config = JobSetupConfig.Get(job);
|
secondaryResId = config.BaseEquip[2];
|
prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
|
}
|
|
if (prefab)
|
{
|
secondaryModel = GameObject.Instantiate(prefab);
|
secondaryModel.layer = LayerUtility.BossShow;
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
|
secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
|
var _resConfig = ModelResConfig.Get(secondaryResId);
|
ShowSecondaryEffect(secondaryModel.transform, _resConfig.ResourcesName);
|
}
|
}
|
}
|
|
private void PutOnExtraSecondary(int job, int extraSecondaryId)
|
{
|
if (this.job == 2)
|
{
|
return;
|
}
|
if (extraSecondaryId != 0)
|
{
|
var prefab = InstanceResourcesLoader.LoadModelRes(extraSecondaryId);
|
if (!prefab)
|
{
|
var config = JobSetupConfig.Get(job);
|
extraSecondaryId = config.BaseEquip[2];
|
prefab = InstanceResourcesLoader.LoadModelRes(extraSecondaryId);
|
}
|
|
if (prefab)
|
{
|
extraSecondaryModel = GameObject.Instantiate(prefab);
|
extraSecondaryModel.layer = LayerUtility.BossShow;
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
|
extraSecondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
}
|
}
|
|
private void PutOnWing(int resourceId)
|
{
|
var config = JobSetupConfig.Get(job);
|
|
if (resourceId != 0)
|
{
|
var prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
|
|
if (!prefab)
|
{
|
resourceId = config.BaseEquip[3];
|
prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
|
}
|
|
if (prefab)
|
{
|
wingsModel = GameObject.Instantiate(prefab);
|
|
wingsModel.layer = LayerUtility.BossShow;
|
SkinnedMeshRenderer _renderer = wingsModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (_renderer)
|
{
|
_renderer.gameObject.layer = LayerUtility.BossShow;
|
}
|
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
|
var modelResConfig = ModelResConfig.Get(resourceId);
|
wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, modelResConfig.UIScale);
|
|
wingsAnimator = wingsModel.GetComponent<Animator>();
|
wingsAnimator.enabled = true;
|
wingsAnimator.Play("UI_Idle", 0);
|
}
|
}
|
}
|
private List<SFXController> m_WeaponEffectList = new List<SFXController>();
|
private List<SFXController> m_SecondaryEffectList = new List<SFXController>();
|
|
private void ShowWeaponEffect(Transform parent, string modelName)
|
{
|
HideWeaponEffect();
|
|
var _boneList = ModelResConfig.GetBoneList(modelName);
|
var _effectlist = ModelResConfig.GetEffectList(modelName);
|
|
if (_boneList != null && _effectlist != null)
|
{
|
for (int i = 0; i < _boneList.Count; ++i)
|
{
|
if (_boneList[i].Equals("null"))
|
{
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
|
m_WeaponEffectList.Add(_ctrl);
|
}
|
else
|
{
|
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
|
m_WeaponEffectList.Add(_ctrl);
|
}
|
}
|
}
|
}
|
|
private void ShowSecondaryEffect(Transform parent, string modelName)
|
{
|
HideWeaponEffect();
|
|
var _boneList = ModelResConfig.GetBoneList(modelName);
|
var _effectlist = ModelResConfig.GetEffectList(modelName);
|
|
if (_boneList != null && _effectlist != null)
|
{
|
for (int i = 0; i < _boneList.Count; ++i)
|
{
|
if (_boneList[i].Equals("null"))
|
{
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
|
m_SecondaryEffectList.Add(_ctrl);
|
}
|
else
|
{
|
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
|
m_SecondaryEffectList.Add(_ctrl);
|
}
|
}
|
}
|
}
|
|
private void HideSecondaryEffect()
|
{
|
foreach (var _ctrl in m_SecondaryEffectList)
|
{
|
SFXPlayUtility.Instance.Release(_ctrl);
|
}
|
m_SecondaryEffectList.Clear();
|
}
|
|
private void HideWeaponEffect()
|
{
|
foreach (var _ctrl in m_WeaponEffectList)
|
{
|
SFXPlayUtility.Instance.Release(_ctrl);
|
}
|
m_WeaponEffectList.Clear();
|
}
|
public void Transmit()
|
{
|
if (clothesAnimator)
|
{
|
clothesAnimator.SetInteger(GAStaticDefine.Param_Action, GAStaticDefine.Act_Transmit);
|
}
|
}
|
|
public void SitDown()
|
{
|
if (clothesAnimator)
|
{
|
clothesAnimator.SetInteger(GAStaticDefine.Param_Action, GAStaticDefine.Act_Dazuo);
|
}
|
}
|
|
public void Dispose()
|
{
|
HideSecondaryEffect();
|
HideWeaponEffect();
|
|
if (clothesModel != null)
|
{
|
var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (smRenderer != null)
|
{
|
MaterialLoader.Release(smRenderer.material);
|
smRenderer.material = smRenderer.sharedMaterial = null;
|
smRenderer.materials = smRenderer.sharedMaterials = new Material[0];
|
}
|
Destroy(clothesModel);
|
}
|
if (secondaryModel != null)
|
{
|
Destroy(secondaryModel);
|
}
|
if (extraSecondaryModel != null)
|
{
|
Destroy(extraSecondaryModel);
|
}
|
if (wingsModel != null)
|
{
|
Destroy(wingsModel);
|
}
|
}
|
}
|
}
|
}
|
|