完成了score、messageUI和rankingUI
This commit is contained in:
parent
782b7068be
commit
4bd7723e6f
@ -16,7 +16,7 @@ MonoBehaviour:
|
||||
- ForceId: 0
|
||||
CivId: 0
|
||||
CivName: "\u57C3\u53CA\u5E1D\u56FD"
|
||||
ForceName: "\u6C38\u8FDC\u4EAD\u9635\u8425"
|
||||
ForceName: "\u857E\u7C73\u8389\u4E9A"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: a5f0d65989fcf8140b7434d09144f244, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e000000
|
||||
@ -24,7 +24,7 @@ MonoBehaviour:
|
||||
- ForceId: 1
|
||||
CivId: 1
|
||||
CivName: "\u6CD5\u5170\u897F\u5E1D\u56FD"
|
||||
ForceName: "\u6C38\u8FDC\u4EAD\u9635\u8425"
|
||||
ForceName: "\u84EC\u83B1\u5C71\u8F89\u591C"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: e1ef5c5c40488ae40bbd2ed4cf35b89e, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
@ -32,7 +32,7 @@ MonoBehaviour:
|
||||
- ForceId: 2
|
||||
CivId: 2
|
||||
CivName: "\u666E\u9C81\u58EB\u5E1D\u56FD"
|
||||
ForceName: "\u5B88\u77E2\u795E\u793E\u9635\u8425"
|
||||
ForceName: "\u516B\u5742\u795E\u5948\u5B50"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: 3756265d254e8e542b0c198d11bf75d4, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
@ -40,7 +40,7 @@ MonoBehaviour:
|
||||
- ForceId: 3
|
||||
CivId: 3
|
||||
CivName: "\u5370\u5EA6\u5E1D\u56FD"
|
||||
ForceName: "\u5730\u7075\u6BBF\u9635\u8425"
|
||||
ForceName: "\u53E4\u660E\u5730\u89C9"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: c31b7225b784dca488b6376ef5fe77d5, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
@ -48,31 +48,31 @@ MonoBehaviour:
|
||||
- ForceId: 4
|
||||
CivId: 4
|
||||
CivName: "\u5317\u6D77\u5E1D\u56FD"
|
||||
ForceName: "\u535A\u4E3D\u795E\u793E\u9635\u8425"
|
||||
ForceName: "\u535A\u4E3D\u7075\u68A6"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: a5f0d65989fcf8140b7434d09144f244, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
TechStart:
|
||||
- ForceId: 5
|
||||
CivId: 5
|
||||
CivName: "\u57C3\u53CA\u5E1D\u56FD"
|
||||
ForceName: "\u6C38\u8FDC\u4EAD\u9635\u8425"
|
||||
CivName: "\u4E0D\u5217\u98A0\u5E1D\u56FD"
|
||||
ForceName: "\u5723\u767D\u83B2"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: a5f0d65989fcf8140b7434d09144f244, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
TechStart:
|
||||
- ForceId: 6
|
||||
CivId: 6
|
||||
CivName: "\u57C3\u53CA\u5E1D\u56FD"
|
||||
ForceName: "\u6C38\u8FDC\u4EAD\u9635\u8425"
|
||||
CivName: "\u8428\u73CA\u5E1D\u56FD"
|
||||
ForceName: "\u4E30\u806A\u8033\u795E\u5B50"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: a5f0d65989fcf8140b7434d09144f244, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
TechStart:
|
||||
- ForceId: 7
|
||||
CivId: 7
|
||||
CivName: "\u57C3\u53CA\u5E1D\u56FD"
|
||||
ForceName: "\u6C38\u8FDC\u4EAD\u9635\u8425"
|
||||
CivName: "\u62DC\u5360\u5EAD\u5E1D\u56FD"
|
||||
ForceName: "\u65E5\u767D\u6B8B\u65E0"
|
||||
LeaderName:
|
||||
LeaderIllustration: {fileID: 21300000, guid: a5f0d65989fcf8140b7434d09144f244, type: 3}
|
||||
TechPool: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000016000000170000001800000019000000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -183,12 +183,15 @@ namespace RuntimeData
|
||||
public uint PlayerCivId;
|
||||
public uint PlayerForceId;
|
||||
public uint CradleCityId;
|
||||
|
||||
|
||||
// 是否存活
|
||||
public bool Alive;
|
||||
// 财富总额
|
||||
public int PlayerWealth;
|
||||
|
||||
//分数
|
||||
public int PlayerScore;
|
||||
// 视野
|
||||
public MapSightData Sight;
|
||||
// 科技
|
||||
|
||||
@ -98,6 +98,7 @@ namespace Logic
|
||||
{
|
||||
if (EventSystem.current.IsPointerOverGameObject())
|
||||
{
|
||||
return;
|
||||
//如果同时点到了其他UI要素,那么判断是不是UICanvans的点击,如果点到了UICancas,那么return,这次tile点击不生效
|
||||
PointerEventData eventData = new PointerEventData(EventSystem.current);
|
||||
eventData.position = Input.mousePosition;
|
||||
@ -113,6 +114,9 @@ namespace Logic
|
||||
if (ShouldIgnoreClick(clickedUI))
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (Input.mousePosition != mouseLastDownPosition)
|
||||
|
||||
@ -52,6 +52,7 @@ namespace Logic
|
||||
public void Update()
|
||||
{
|
||||
_gameStateDict[_curState].Update();
|
||||
Main.PlayerLogic.CalcAllPlayerScore(_main.MapData);
|
||||
}
|
||||
|
||||
public void ChangeState(GameState newState)
|
||||
|
||||
@ -637,5 +637,75 @@ namespace Logic
|
||||
var techInfo = Table.Instance.TechDataAssets.GetTechInfo(techType);
|
||||
return techInfo.CostLevel * mapData.GetCityCount(playerData.Id) + 4;
|
||||
}
|
||||
|
||||
//更新一个mapData里所有Player的Score
|
||||
public void CalcAllPlayerScore(MapData mapData)
|
||||
{
|
||||
if (mapData == null)
|
||||
return;
|
||||
// 先清空
|
||||
foreach (var player in mapData.PlayerMap.PlayerDataList)
|
||||
player.PlayerScore = 0;
|
||||
|
||||
// 记录格子得分(领土和视野)
|
||||
foreach (var grid in mapData.GridMap.GridList)
|
||||
{
|
||||
foreach (var player in mapData.PlayerMap.PlayerDataList)
|
||||
{
|
||||
if (player.Sight.CheckIsInSight(grid.Id))
|
||||
{
|
||||
player.PlayerScore += 5;
|
||||
mapData.GetPlayerDataByTerritoryGridId(grid.Id, out var owner);
|
||||
if (owner == player)
|
||||
owner.PlayerScore += 20; // 领土+20
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 城市得分(每级+50) + 奇观建筑(Temple等)
|
||||
foreach (var city in mapData.CityMap.CityList)
|
||||
{
|
||||
if (!mapData.GetPlayerDataByCityId(city.Id, out var player)) continue;
|
||||
player.PlayerScore += city.Level * 50;
|
||||
|
||||
if (mapData.GetGridDataByCityId(city.Id, out var grid))
|
||||
{
|
||||
if (grid.Resource is ResourceType.Temple or ResourceType.ForestTemple or ResourceType.MountainTemple or ResourceType.WaterTemple)
|
||||
player.PlayerScore += 50 + 50 * grid.buildingLevel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 小兵得分(Cost*5)
|
||||
foreach (var unit in mapData.UnitMap.UnitList)
|
||||
{
|
||||
if (!unit.Alive) continue;
|
||||
if (!mapData.GetPlayerDataByUnitId(unit.Id, out var player)) continue;
|
||||
if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(unit.UnitType, unit.GiantType, out var info)) continue;
|
||||
player.PlayerScore += info.Cost * 5;
|
||||
}
|
||||
|
||||
// 奇观得分(每完成一个+400)
|
||||
foreach (var player in mapData.PlayerMap.PlayerDataList)
|
||||
{
|
||||
foreach (var kv in player.Wonder.WonderInfoDict)
|
||||
{
|
||||
if (kv.Value == WonderState.FINISH_BUILD)
|
||||
player.PlayerScore += 400;
|
||||
}
|
||||
|
||||
// 科技得分(100 * 等级)
|
||||
foreach (var tech in player.TechTree.TechList)
|
||||
{
|
||||
var techInfo = Table.Instance.TechDataAssets.GetTechInfo(tech);
|
||||
player.PlayerScore += techInfo.CostLevel * 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,16 @@ using RuntimeData;
|
||||
using UnityEngine.UI;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
||||
// 数据结构
|
||||
public struct CenterMessageData
|
||||
{
|
||||
public bool HasChat;
|
||||
public string Title;
|
||||
public string Type;
|
||||
public string Message;
|
||||
public Sprite Sprite;
|
||||
}
|
||||
public class CenterMessageUI
|
||||
{
|
||||
private Main _main;
|
||||
@ -55,7 +65,6 @@ public class CenterMessageUI
|
||||
{
|
||||
if (!Table.Instance.UICenterMessageDataAssets.GetUICenterMessageInfo(id, out var info))
|
||||
return;
|
||||
Debug.Log("t1");
|
||||
if (info.Type == UICenterMessageType.WonderFinish || info.Type == UICenterMessageType.WonderStart)
|
||||
{
|
||||
var c = Table.Instance.GridAndResourceDataAssets.GetWonderSpriteAndName(info.WonderType,playerData);
|
||||
@ -68,6 +77,7 @@ public class CenterMessageUI
|
||||
HasChat = false,
|
||||
Title = info.Title,
|
||||
Message = info.Message.Replace("{name}", c.Name),
|
||||
Type = "临时",
|
||||
Sprite = c.Sprite
|
||||
};
|
||||
_messageQueue.Enqueue(data);
|
||||
@ -82,6 +92,7 @@ public class CenterMessageUI
|
||||
HasChat = true,
|
||||
Title = info.Title,
|
||||
Message = info.Message,
|
||||
Type = "临时",
|
||||
Sprite = playerInfo.LeaderIllustration
|
||||
};
|
||||
_messageQueue.Enqueue(data);
|
||||
@ -96,6 +107,7 @@ public class CenterMessageUI
|
||||
HasChat = true,
|
||||
Title = info.Title,
|
||||
Message = info.Message.Replace("{name}",playerInfo.CivName),
|
||||
Type = "临时",
|
||||
Sprite = playerInfo.LeaderIllustration
|
||||
};
|
||||
_messageQueue.Enqueue(data);
|
||||
@ -128,6 +140,7 @@ public class CenterMessageUI
|
||||
.Replace("{civName}", playerInfo.CivName)
|
||||
.Replace("{forceName}",playerInfo.ForceName)
|
||||
.Replace("{leaderName}",playerInfo.LeaderName),
|
||||
Type = "临时",
|
||||
Sprite = sprite
|
||||
};
|
||||
_messageQueue.Enqueue(data);
|
||||
@ -168,6 +181,9 @@ public class CenterMessageUI
|
||||
AnimancerComponent animancer = ROCenterMessageUI.GetComponent<AnimancerComponent>();
|
||||
AnimationClip animationB = Resources.Load<AnimationClip>("Animations/UI/CenterMessageFadeIn");
|
||||
animancer.Play(animationB);
|
||||
|
||||
//消息队列填加该条消息
|
||||
_main.UIManager.MessageUI.AddMessageData(data);
|
||||
}
|
||||
|
||||
// 玩家点击关闭,开始淡出
|
||||
@ -193,12 +209,5 @@ public class CenterMessageUI
|
||||
// 如果还有下一条消息,下一帧自动播放
|
||||
}
|
||||
|
||||
// 数据结构
|
||||
private struct CenterMessageData
|
||||
{
|
||||
public bool HasChat;
|
||||
public string Title;
|
||||
public string Message;
|
||||
public Sprite Sprite;
|
||||
}
|
||||
|
||||
}
|
||||
@ -3,6 +3,7 @@ using Logic;
|
||||
using RuntimeData;
|
||||
using UnityEngine.UI;
|
||||
using Animancer;
|
||||
using TMPro;
|
||||
|
||||
public class MessageUI
|
||||
{
|
||||
@ -38,6 +39,56 @@ public class MessageUI
|
||||
}
|
||||
}
|
||||
|
||||
public void AddMessageData(CenterMessageData data)
|
||||
{
|
||||
// 找到 Content 容器
|
||||
Transform content = ROMessageUI.transform
|
||||
.Find("MsgList/ScrollView/Viewport/Content");
|
||||
if (content == null)
|
||||
{
|
||||
Debug.LogError("Content not found in MessagePanel hierarchy.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 加载并实例化预制体
|
||||
GameObject prefab = Resources.Load<GameObject>("Prefab/UI/MessageItem");
|
||||
if (prefab == null)
|
||||
{
|
||||
Debug.LogError("MessageItem prefab not found in Resources/Prefab/UI.");
|
||||
return;
|
||||
}
|
||||
|
||||
GameObject instance = GameObject.Instantiate(prefab, content);
|
||||
instance.transform.SetSiblingIndex(0);
|
||||
|
||||
// 设置图标 sprite
|
||||
Image iconImage = instance.transform.Find("Icon/Mask/Img")?.GetComponent<Image>();
|
||||
if (iconImage != null)
|
||||
{
|
||||
iconImage.sprite = data.Sprite;
|
||||
}
|
||||
|
||||
// 设置类型文本(用来显示 data.Type)
|
||||
TextMeshProUGUI typeText = instance.transform.Find("Title/Text")?.GetComponent<TextMeshProUGUI>();
|
||||
if (typeText != null)
|
||||
{
|
||||
typeText.text = data.HasChat ? "遭遇" : "奇观";
|
||||
}
|
||||
|
||||
// 设置标题和信息文本
|
||||
TextMeshProUGUI titleText = instance.transform.Find("Info/TextTitle")?.GetComponent<TextMeshProUGUI>();
|
||||
if (titleText != null)
|
||||
{
|
||||
titleText.text = data.Title;
|
||||
}
|
||||
|
||||
TextMeshProUGUI messageText = instance.transform.Find("Info/TextDesc")?.GetComponent<TextMeshProUGUI>();
|
||||
if (messageText != null)
|
||||
{
|
||||
messageText.text = data.Message;
|
||||
}
|
||||
}
|
||||
|
||||
public void Show()
|
||||
{
|
||||
if (_isShowing || _isAnimating) return;
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Logic;
|
||||
using RuntimeData;
|
||||
using Animancer;
|
||||
using TMPro;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class RankingUI
|
||||
{
|
||||
@ -22,19 +25,78 @@ public class RankingUI
|
||||
RORankingUI = _main.UIManager.ROUIManager.transform.Find("RankingPanel").gameObject;
|
||||
RORankingUI.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void UpdateRankingList()
|
||||
{
|
||||
var playerList = new List<PlayerData>(_mapData.PlayerMap.PlayerDataList);
|
||||
playerList.Sort((a, b) => b.PlayerScore.CompareTo(a.PlayerScore));
|
||||
|
||||
var selfPlayer = _mapData.PlayerMap.SelfPlayerData;
|
||||
var content = RORankingUI.transform.Find("MsgList/ScrollView/Viewport/Content");
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
var row = content.Find("Row (" + i + ")");
|
||||
if (i < playerList.Count)
|
||||
{
|
||||
var player = playerList[i];
|
||||
if (!Table.Instance.PlayerDataAssets.GetPlayerInfo(player, out var playerInfo))
|
||||
continue;
|
||||
row.gameObject.SetActive(true);
|
||||
row.Find("Head0/Text").GetComponent<TextMeshProUGUI>().text = (i + 1).ToString();
|
||||
string forceName = playerInfo.ForceName;
|
||||
string civName = "带领 <"+playerInfo.CivName+">";
|
||||
Sprite sprite = playerInfo.LeaderIllustration;
|
||||
row.Find("Head1/Avatar/AvatarMask/AvatarImage").GetComponent<Image>().color = Color.white;
|
||||
row.Find("Head2/Text").GetComponent<TextMeshProUGUI>().text = _mapData.GetCityCount(player.Id).ToString();
|
||||
row.Find("Head3/Text").GetComponent<TextMeshProUGUI>().text = player.PlayerScore.ToString();
|
||||
row.Find("Head1/TextGroup/Text1").GetComponent<TextMeshProUGUI>().color = Color.black;
|
||||
|
||||
if (!selfPlayer.MeetPlayerSet.Contains(player.Id))
|
||||
{
|
||||
forceName = "未知领袖";
|
||||
civName = "带领 <未知文明>";
|
||||
sprite = null;
|
||||
}
|
||||
|
||||
if (!player.Alive)
|
||||
{
|
||||
civName = "已出局";
|
||||
row.Find("Head1/Avatar/AvatarMask/AvatarImage").GetComponent<Image>().color = new Color(128,128,128 ,1);;
|
||||
}
|
||||
|
||||
if (player == selfPlayer)
|
||||
{
|
||||
row.Find("Head1/TextGroup/Text1").GetComponent<TextMeshProUGUI>().color = Color.blue;
|
||||
}
|
||||
|
||||
row.Find("Head1/TextGroup/Text1").GetComponent<TextMeshProUGUI>().text = forceName;
|
||||
row.Find("Head1/TextGroup/Text2").GetComponent<TextMeshProUGUI>().text = civName;
|
||||
row.Find("Head1/Avatar/AvatarMask/AvatarImage").GetComponent<Image>().sprite = sprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
row.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Update()
|
||||
{
|
||||
|
||||
if (_isAnimating) return;
|
||||
|
||||
if (NeedShow && !RORankingUI.activeSelf)
|
||||
{
|
||||
UpdateRankingList();
|
||||
Show();
|
||||
}
|
||||
else if (!NeedShow && RORankingUI.activeSelf)
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
else if(NeedShow && RORankingUI.activeSelf)
|
||||
{
|
||||
UpdateRankingList();
|
||||
}
|
||||
}
|
||||
|
||||
public void Show()
|
||||
|
||||
@ -40,7 +40,7 @@ public class TopBarUI
|
||||
ROTopBarUI.SetActive(true);
|
||||
_stars.text = _main.MapData.PlayerMap.SelfPlayerData.PlayerWealth.ToString();
|
||||
_starsTitle.text = "Stars (+" + Main.PlayerLogic.GetPlayerStarsPerTurn(_main.MapData, _main.MapData.PlayerMap.SelfPlayerData.Id).ToString() + ")";
|
||||
_score.text = "0";
|
||||
_score.text = _main.MapData.PlayerMap.SelfPlayerData.PlayerScore.ToString();;
|
||||
_turn.text = _main.turn.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,7 +70,8 @@ public class UIManager
|
||||
TechTreeUI = new TechTreeUI(_main,_mapData);
|
||||
CityUpgradeActionUI = new CityUpgradeActionUI(_main,_mapData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Update(MapData mapData)
|
||||
{
|
||||
if (mapData != null)
|
||||
|
||||
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user