This commit is contained in:
wuwenbo 2025-05-13 11:45:02 +08:00
commit 1a37eed852
12 changed files with 19844 additions and 2255 deletions

View File

@ -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

View File

@ -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;
// 科技

View File

@ -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)

View File

@ -52,6 +52,7 @@ namespace Logic
public void Update()
{
_gameStateDict[_curState].Update();
Main.PlayerLogic.CalcAllPlayerScore(_main.MapData);
}
public void ChangeState(GameState newState)

View File

@ -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;
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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()

View File

@ -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();
}
}

View File

@ -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)