//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, January 21, 2019
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
using System;
|
|
|
namespace vnxbqy.UI
|
{
|
|
public class SkyTowerBehaviour : MonoBehaviour
|
{
|
[SerializeField] ScrollRect m_Tower;
|
|
RectTransform m_RectTransform;
|
RectTransform rectTransform { get { return m_RectTransform ?? (this.transform as RectTransform); } }
|
|
float topHeight = 0f;
|
float floorHeight = 0f;
|
float bottomHeight = 0f;
|
|
GameObject towerTop = null;
|
GameObject towerBottom = null;
|
SkyTowerFloorBehaviour towerTopBehaviour;
|
|
bool hasCreateTowerResources = false;
|
List<SkyTowerFloorBehaviour> floorBehaviours = new List<SkyTowerFloorBehaviour>();
|
SkyTowerModel model { get { return ModelCenter.Instance.GetModel<SkyTowerModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public void Display()
|
{
|
var scrollRectTransform = m_Tower.transform as RectTransform;
|
scrollRectTransform.localScale = Vector3.one;
|
scrollRectTransform.anchoredPosition = Vector2.zero;
|
DisplayTowerBaseInfo();
|
MoveToTargetFloor(model.currentFloor);
|
}
|
|
float speed = 0f;
|
private void LateUpdate()
|
{
|
if (startFlashMove)
|
{
|
m_Tower.verticalNormalizedPosition = Mathf.SmoothDamp(m_Tower.verticalNormalizedPosition, 1, ref speed, 0.1f);
|
if (m_Tower.verticalNormalizedPosition > 0.99f)
|
{
|
startFlashMove = false;
|
if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == SkyTowerModel.DATA_MAPID)
|
{
|
var serveritems = dungeonModel.dungeonResult.itemInfo;
|
if (serveritems != null)
|
{
|
List<Item> items = new List<Item>();
|
foreach (var item in serveritems)
|
{
|
items.Add(new Item(item.ItemID, (ulong)item.Count));
|
}
|
ItemLogicUtility.Instance.ShowGetItem(items, seconds:0);
|
}
|
}
|
model.OnFlashOver(2);
|
}
|
}
|
}
|
|
private void OnEnable()
|
{
|
model.OnFlashOverEvent += OnFlashOverEvent;
|
startFlashMove = false;
|
}
|
|
private void OnDisable()
|
{
|
model.OnFlashOverEvent -= OnFlashOverEvent;
|
StopAllCoroutines();
|
}
|
|
bool startFlashMove = false;
|
private void OnFlashOverEvent(int state)
|
{
|
if (state == 1)
|
startFlashMove = true;
|
}
|
|
public void Dispose()
|
{
|
m_Tower.scrollSensitivity = 1f;
|
}
|
|
void MoveToTargetFloor(int floor)
|
{
|
var floors = model.GetShowFloors();
|
|
var floorIndex = floors.IndexOf(floor);
|
if (floorIndex < 2)
|
{
|
m_Tower.verticalNormalizedPosition = 0f;
|
}
|
else if (floorIndex >= floors.Count - 2)
|
{
|
var hasTop = model.IsTopFloor(floors[floors.Count - 1]);
|
if (hasTop)
|
{
|
if (floorIndex >= floors.Count - 1)
|
{
|
m_Tower.verticalNormalizedPosition = 1f;
|
}
|
else
|
{
|
m_Tower.verticalNormalizedPosition = 0.5f;
|
}
|
}
|
else
|
{
|
m_Tower.verticalNormalizedPosition = 1f;
|
}
|
}
|
else
|
{
|
m_Tower.verticalNormalizedPosition = 0.5f;
|
}
|
}
|
|
private void DisplayTowerBaseInfo()
|
{
|
CreateTowerResources();
|
|
var floors = model.GetShowFloors();
|
|
var hasTop = model.IsTopFloor(floors[floors.Count - 1]);
|
var normalCount = hasTop ? floors.Count - 1 : floors.Count;
|
if (hasTop)
|
{
|
towerTopBehaviour.SetActive(true);
|
towerTopBehaviour.Display(floors[floors.Count - 1]);
|
}
|
else
|
{
|
towerTopBehaviour.SetActive(false);
|
}
|
|
for (var i = 0; i < floorBehaviours.Count; i++)
|
{
|
var behaviour = floorBehaviours[i];
|
if (i < normalCount)
|
{
|
behaviour.SetActive(true);
|
behaviour.Display(floors[floors.Count - (i + (hasTop ? 2 : 1))]);
|
}
|
else
|
{
|
behaviour.SetActive(false);
|
}
|
}
|
|
var hasBottom = model.IsBottomFloor(floors[0]);
|
towerBottom.SetActive(hasBottom);
|
}
|
|
private void CreateTowerResources()
|
{
|
if (hasCreateTowerResources)
|
{
|
return;
|
}
|
|
towerTop = UIUtility.CreateWidget("SkyTower_Top", "Top");
|
towerTop.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
|
towerTop.transform.SetAsFirstSibling();
|
topHeight = ((RectTransform)towerTop.transform).rect.height;
|
towerTopBehaviour = towerTop.AddMissingComponent<SkyTowerFloorBehaviour>();
|
|
var floorPrefab = UILoader.LoadPrefab("SkyTower_Floor");
|
floorHeight = ((RectTransform)floorPrefab.transform).rect.height;
|
|
for (int i = 0; i < 5; i++)
|
{
|
var instance = Instantiate<GameObject>(floorPrefab);
|
var floorBehaviour = instance.AddMissingComponent<SkyTowerFloorBehaviour>();
|
instance.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
|
floorBehaviours.Add(floorBehaviour);
|
}
|
|
towerBottom = UIUtility.CreateWidget("SkyTower_Bottom", "Bottom");
|
towerBottom.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
|
towerBottom.transform.SetAsLastSibling();
|
bottomHeight = ((RectTransform)towerBottom.transform).rect.height;
|
|
hasCreateTowerResources = true;
|
}
|
|
}
|
|
}
|