Files
JJBB/Assets/Project/Script/GUI/Activity/ActivityItem.cs
2024-08-23 15:49:34 +08:00

545 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System;
using UnityEngine.UI;
using GCGame.Table;
using Games.Mission;
using Games.GlobeDefine;
using Module.Log;
public class ActivityItem : UIItemSelect
{
public int m_ItemInfoId;
public Image m_ActivityIcon; // 活动标记
public Text m_ActivityName; // 活动描述
public Text m_HasJoinedTimes; // 活动参加的次数
public Text m_ActivityGotValue; // 活动对应的活力值
public Image m_MarkTypeIcon; // 活动是否被推荐或者是组队、战斗类的活动
public Button m_JoinButton; // 活动参加按钮
public Text buttonDesc; // 已经接取任务的时候显示已接
public Image m_LimitInfoImage; // 活动限制image
public Text m_LimitInfoText; // 活动限制信息
public GameObject m_ActivityValueItem; // (是否显示活力要用到)
public Sprite recommendImage; // 推荐标记
public Sprite limitTimeImage; // 限时标记
public GameObject _CompleteIcon; // 完成标记
public GameObject _FinishIcon; // 接取标记
public GameObject _SelectEffect;
public GameObject _expIcon;
public GameObject _RedIcon;
public GameObject _NormalParamPanel;
public GameObject _SpecialParamPanel;
public Text _SpecialParamText;
public int m_curShowSceneID = -1;
public int _ServerType = -1;
public enum ActivityPromoteType
{
INVALID_PROMOTE = -1,
IS_PROMOTE = 1, //推荐
NOT_PROMOTE = 2, //不推荐
}
public override void Show(Hashtable hash)
{
base.Show();
var itemInfo = (int)hash["InitObj"];
// baseTab在InitItem中重复赋值
baseTab = TableManager.GetActivityBaseByID(itemInfo, 0);
_ServerType = baseTab.ActivityServerType;
RefreshHeadExpIcon();
InitItem(itemInfo);
}
private Tab_ActivityBase baseTab = null;
public void SetIconAndName()
{
LoadAssetBundle.Instance.SetImageSprite(m_ActivityIcon, baseTab.ActivityIcon);
m_ActivityName.text = baseTab.ActivityName;
}
public bool IsCompleteLimitTimes()
{
//计算活力值
Tab_ActivityActValLimit actvalLimit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
if (actvalLimit == null)
{
return false;
}
int m_SingleActVal = actvalLimit.ActValPer; // 单次活动的活力值
int m_AcitivityLimitTimes = baseTab.ActityLimitTimes; // 活动限制的次数
int param = 0;
if (baseTab.ActivityServerType != -1)
{
param = ActivityDataManager.Instance.GetActivityCompleteTimes(baseTab.ActivityServerType);
param = (param > 0 ? param : 0);
}
if (m_AcitivityLimitTimes == -1)
return true;
if (param >= m_AcitivityLimitTimes)
return true;
return false;
}
public void SetActValueAndCountAndLimitInfo()
{
//计算活力值
Tab_ActivityActValLimit actvalLimit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
if (actvalLimit == null)
{
return;
}
int m_SingleActVal = actvalLimit.ActValPer; // 单次活动的活力值
int m_AcitivityLimitTimes = baseTab.ActityLimitTimes; // 活动限制的次数
int param = 0;
// 多余判断,是-1就不可能获得表格数据 !!!
if (baseTab.ActivityServerType != -1)
{
param = ActivityDataManager.Instance.GetActivityCompleteTimes(baseTab.ActivityServerType);
param = (param > 0 ? param : 0);
}
//如果不限制次数
if (m_AcitivityLimitTimes == -1)
{
//不限制活动次数
m_HasJoinedTimes.text = StrDictionary.GetClientDictionaryString("#{43036}");// "不限制";
}
else
{
m_HasJoinedTimes.text = param.ToString() + "/" + m_AcitivityLimitTimes.ToString();
}
if (m_SingleActVal > 0)
{
m_ActivityValueItem.gameObject.SetActive(true);
int m_DayLimitVal = actvalLimit.DayCountLimit;
int m_TotalVal = m_SingleActVal * param;
if (m_TotalVal > (m_SingleActVal * m_DayLimitVal))
{
m_ActivityGotValue.text = (m_SingleActVal * m_DayLimitVal).ToString() + "/" + actvalLimit.ActValPer * actvalLimit.DayCountLimit;
}
else
{
m_ActivityGotValue.text = m_TotalVal.ToString() + "/" + actvalLimit.ActValPer * actvalLimit.DayCountLimit;
}
// 这个 m_LimitTimes 作用何在
int m_LimitTimes = -1;
Tab_ActivityActValLimit limit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
if (limit != null)
{
m_LimitTimes = limit.DayCountLimit;
}
}else
{
m_ActivityValueItem.gameObject.SetActive(false);
}
}
public void ShowMarkIcon()
{
// 可将 m_MarkTypeIcon.gameObject.SetActive(false); 写在开头缩减代码
if (!ActivityController.Instance().IsFinish(m_ItemInfoId))
{
//判断活动是否是推荐活动 显示推荐标记
int m_PromoteType = baseTab.Promote;
if (m_PromoteType == (int)ActivityPromoteType.IS_PROMOTE)
{
m_MarkTypeIcon.gameObject.SetActive(true);
m_MarkTypeIcon.overrideSprite = recommendImage;
}
else if ((baseTab.ActivityType & 1) != 0) //限时活动
{
m_MarkTypeIcon.gameObject.SetActive(true);
m_MarkTypeIcon.overrideSprite = limitTimeImage;
}
else
{
m_MarkTypeIcon.gameObject.SetActive(false);
}
}
else
{
m_MarkTypeIcon.gameObject.SetActive(false);
}
}
//刷新当前是否要限时迎头经验高倍的标记
public void RefreshHeadExpIcon()
{
if (GameManager.gameManager.PlayerDataPool.ActivityHeadExpDic.ContainsKey(_ServerType)
&& GameManager.gameManager.PlayerDataPool.ActivityHeadExpDic[_ServerType] > 0)
{
RefreshHeadExpIcon(true);
}
else
{
RefreshHeadExpIcon(false);
}
}
public void RefreshHeadExpIcon(bool isShow)
{
_expIcon.SetActive(isShow);
}
public void InitItem(int hash)
{
m_ItemInfoId = hash;
if (m_ItemInfoId != -1)
{
baseTab = TableManager.GetActivityBaseByID(m_ItemInfoId, 0);
if (baseTab == null)
{
return;
}
SpecialParam();
//设置活动标志
SetIconAndName();
//设置活动的已经完成的以及限制次数
SetActValueAndCountAndLimitInfo();
//活动已经完成的就不再显示推荐标记
ShowMarkIcon();
//根据状态设置描述
SetItemStateDesc();
}
}
void SpecialParam()
{
_NormalParamPanel.SetActive(baseTab.ActivityServerType != (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM);
_SpecialParamPanel.SetActive(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM);
if(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM)
{
ReqSpecialParam();
}
}
public void RefershExerciseRoomRemainTime(int remainTime)
{
_SpecialParamText.text = remainTime + "";
}
void ReqSpecialParam()
{
//练功房
ReqExerciseRoomInfo req = new ReqExerciseRoomInfo();
req.flag = 1;
req.SendMsg();
}
bool IsSetNeedOpenServerTime(int id)
{
var activityBase = TableManager.GetActivityBaseByID(id, 0);
if (activityBase == null)
return false;
if (activityBase.NeedOpenServerDay + 1 > GlobalData.OpenServerDays)
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2186}", activityBase.NeedOpenServerDay - GlobalData.OpenServerDays + 1);
return true;
}
return false;
}
public void SetItemStateDesc()
{
if (IsSetNeedOpenServerTime(m_ItemInfoId))
return;
if (ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.IsGoing
|| ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.WillOpenButShow)
{
if (!ActivityController.IsLevelEnough(m_ItemInfoId))
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{43033}", baseTab.Level.ToString());
}
else if((!ActivityController.IsCompleted(m_ItemInfoId)))
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
//判断是否有当前任务在身上
if (IsHaveThisTypeMission(m_ItemInfoId))
{
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{1619}");
}
else
{
m_JoinButton.gameObject.SetActive(true);
buttonDesc.text = StrDictionary.GetClientDictionaryString("#{46214}", baseTab.Level.ToString());
m_LimitInfoImage.gameObject.SetActive(false);
}
}
else
{
// 完成后是否隐藏 参加 按钮
// 1 不隐藏
if(baseTab.HideOnCompleted == 1)
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
m_JoinButton.gameObject.SetActive(true);
m_LimitInfoImage.gameObject.SetActive(false);
buttonDesc.text = StrDictionary.GetClientDictionaryString("#{46214}", baseTab.Level.ToString());
}
else
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(true);
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(false);
}
}
}
else if(ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.WillOpen)
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
if (!ActivityController.IsLevelEnough(m_ItemInfoId))
{
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{43033}", baseTab.Level.ToString());
}
else if ((!ActivityController.IsCompleted(m_ItemInfoId)))
{
// 显示最近的开启时间
int nearestTime = ActivityController.Instance().GetNearestOpenTime(m_ItemInfoId);
int hour = nearestTime / 100;
int minute = nearestTime - hour * 100;
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2124}", hour, minute.ToString().Equals("0") ? "00" : minute.ToString());
}
else
{
if (baseTab.HideOnCompleted == 0) //隐藏
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(true);
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(false);
}
else
{
_FinishIcon.SetActive(false);
_CompleteIcon.SetActive(false);
m_JoinButton.gameObject.SetActive(false);
// 显示最近的开启时间
int nearestTime = ActivityController.Instance().GetNearestOpenTime(m_ItemInfoId);
int hour = nearestTime / 100;
int minute = nearestTime - hour * 100;
m_LimitInfoImage.gameObject.SetActive(true);
m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2124}", hour, minute.ToString().Equals("0") ? "00" : minute.ToString());
}
}
}
else if(ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.Finish)
{
_FinishIcon.SetActive(true);
_CompleteIcon.SetActive(false);
m_JoinButton.gameObject.SetActive(false);
m_LimitInfoImage.gameObject.SetActive(false);
}
if(m_JoinButton.gameObject.activeInHierarchy)
{
if(ActivityController.GetActivityTimeState(m_ItemInfoId) != (int)ActivityController.ActivityTimeType.IsGoing)
{
_RedIcon.SetActive(false);
return;
}
if (IsCompleteLimitTimes())
{
_RedIcon.SetActive(false);
return;
}
if (!IsGuildActivityShowRedIcon())
{
_RedIcon.SetActive(false);
return;
}
_RedIcon.SetActive(true);
}
}
public bool IsGuildActivityShowRedIcon()
{
if(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS
|| baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS)
{
if(!GameManager.gameManager.PlayerDataPool.IsHaveGuild())
{
return false;
}
}
return true;
}
public static bool IsHaveThisTypeMission(int m_ItemInfoId)
{
Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(m_ItemInfoId, 0);
if(activityBase != null)
{
foreach(var mission in GameManager.gameManager.MissionManager.MissionList.m_aMission)
{
Tab_MissionBase ownMission = TableManager.GetMissionBaseByID(mission.Key, 0);
if(ownMission.MissionType == activityBase.MissionBaseType)
{
return true;
}
}
}
return false;
}
public override void OnItemClick()
{
base.OnItemClick();
showActivityInfoTip();
}
public void showActivityInfoTip()
{
UIManager.ShowUI(UIInfo.ActivityInfoTip, delegate (bool bSucess, object param)
{
if (bSucess)
{
ActivityInfoTipController.Instance.InitMyItemTip(m_ItemInfoId);
}
});
}
public enum Parameter_type //点击按钮的去向类型
{
INVALID = -1,
CHUANSONG = 1,
FINDWAY = 2,
OPENUI = 3,
HUIBANG = 4,
LOACL_CALLBACK = 5,
MISSIONINSEC = 6,
OPENPERIOUS = 7,
ENTEREXERCISEROOM = 8,
ENTERCOPY = 9,
}
public void MyItemClick()
{
if (m_ItemInfoId == 37)
{
MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{79509}"), null, delegate ()
{
ReqEnterForbiddenTop req = new ReqEnterForbiddenTop();
req.Flag = 1;
req.SendMsg();
UIManager.CloseUI(UIInfo.Activity);
},
null);
return;
}
ActivityController.ClickActive(m_ItemInfoId);
}
void EnterNonePKValueSceneOK()
{
Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(m_curShowSceneID, 0);
if (null == tabSceneClass)
{
return;
}
MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{1644}", tabSceneClass.Name), "", DoTeleport);
}
void DoTeleport()
{
if (GameManager.gameManager.ActiveScene.IsCopyScene())
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42632}"));
return;
}
Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(m_curShowSceneID, 0);
if (null == tabSceneClass)
{
return;
}
SceneData.RequestChangeScene((int)CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP, 0, m_curShowSceneID, -1, (int)tabSceneClass.SafeX, (int)tabSceneClass.SafeZ);
UIManager.CloseUI(UIInfo.Activity);
}
public void ShowSelectEffect(bool isShow)
{
if (_SelectEffect != null)
_SelectEffect.SetActive(isShow);
}
private void OnDisable()
{
HideEffect();
}
public void HideEffect()
{
if (_SelectEffect != null)
_SelectEffect.SetActive(false);
}
}