修复了bug

[版本 V0.7.2c]
发布日期:26.5.31

---------[bug修复与优化]-------------
1.修复了东风谷早苗掷签范围伤害击杀单位后图像残留的bug
2.修复了铃仙触发幻影齐射并击杀单位时可能产生图像残留的bug
3.修复了隐脉地块可能不显示的bug
4.优化了隐脉生成逻辑,且隐脉将不再会生成于水域或者山脉中
6.修复了探索者发现结界塔时城市经验动画播放错误的bug
8.优化了拖动地图时可能镜头强制移会起始点的bug
This commit is contained in:
daixiawu 2026-05-31 19:07:11 +08:00
parent 23d71934bc
commit 46e64be903
198 changed files with 6755 additions and 7549 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

View File

@ -70,7 +70,14 @@
border-radius: 4px;
}
.ref-card { background: #f8fafc; }
.ref-card img {
.ref-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
margin-bottom: 10px;
}
.ref-grid figure { margin: 0; }
.ref-grid img {
display: block;
width: 100%;
aspect-ratio: 4 / 3;
@ -78,7 +85,12 @@
background: #e2e8f0;
border: 1px solid var(--line);
border-radius: 6px;
margin-bottom: 10px;
}
.ref-grid figcaption {
color: var(--muted);
font-size: 12px;
line-height: 1.35;
margin-top: 4px;
}
.source-links {
margin: 8px 0 0;
@ -115,6 +127,7 @@
}
@media (max-width: 620px) {
.spec-grid { grid-template-columns: 1fr; }
.ref-grid { grid-template-columns: 1fr; }
}
</style>
</head>
@ -204,7 +217,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Rock_of_law_in_%C3%9Eingvellir.jpg" alt="辛格维利尔法律石参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/peace-01-law-rock.png" alt="辛格维利尔法律石参考">
<figcaption>Law Rock 主体:岩石平台 + 旗杆,可直接转化为奇观主轮廓。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/peace-02-flag.png" alt="辛格维利尔法律石和旗帜参考">
<figcaption>法律石与旗帜:提炼暗红/赭黄小旗和仪式感。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/peace-03-rift.png" alt="辛格维利尔裂谷地貌参考">
<figcaption>裂谷地貌:用于底座岩层、苔草和冷灰地形。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://www.thingvellir.is/en/education/history/assembly-site/">Thingvellir 官方Assembly Site</a>,看法律石与集会地逻辑。</li>
<li><a href="https://whc.unesco.org/en/list/1152">UNESCOThingvellir National Park</a>,看裂谷地貌和世界遗产说明。</li>
@ -254,7 +280,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/f/f3/Jelling_rune_stones.1.ajb.jpg" alt="耶灵符文石参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/knowledge-01-stone.png" alt="耶灵符文石整体参考">
<figcaption>符文石整体:主石形、石面比例和风化灰色。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/knowledge-02-relief.png" alt="耶灵石浮雕细节参考">
<figcaption>浮雕细节:符文、兽纹和边框线条的简化依据。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/knowledge-03-site.png" alt="耶灵遗址土丘和教堂参考">
<figcaption>遗址环境:土丘与白色教堂只作为低饱和背景构件。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://en.natmus.dk/historical-knowledge/denmark/prehistoric-period-until-1050-ad/the-viking-age/the-monuments-at-jelling/">National Museum of DenmarkThe Monuments at Jelling</a>,看历史信息。</li>
<li><a href="https://whc.unesco.org/en/list/697">UNESCOJelling Mounds, Runic Stones and Church</a>,看遗址构成。</li>
@ -305,7 +344,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/f/fa/Haithabu_Anlage.jpg" alt="海泽比参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/trade-01-site.png" alt="海泽比遗址鸟瞰参考">
<figcaption>遗址鸟瞰:水边聚落和木屋组的布局感。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/trade-02-house.png" alt="海泽比复原木屋参考">
<figcaption>草顶木屋:贸易港主体建筑的屋顶和木墙样式。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/trade-03-market.png" alt="海泽比木屋群参考">
<figcaption>建筑组关系:两三座木屋 + 小空地,避免画成大城市。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://whc.unesco.org/en/list/1553">UNESCOHedeby and the Danevirke</a>,看贸易中心与防线关系。</li>
<li><a href="https://haithabu.de/">Wikinger Museum Haithabu</a>,看复原建筑与场景。</li>
@ -356,7 +408,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/0b/Osebergskipet_2016.jpg" alt="奥塞贝格船参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/wealth-01-ship.png" alt="奥塞贝格船整体参考">
<figcaption>船体整体:长船横向剪影和高翘船首。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/wealth-02-excavation.png" alt="奥塞贝格船葬发掘参考">
<figcaption>船葬发掘:半埋土丘和墓土剖面的参考。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/wealth-03-prow.png" alt="奥塞贝格船首兽纹参考">
<figcaption>船首兽纹:财富奇观最重要的装饰细节之一。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://www.vikingtidsmuseet.no/english/">Museum of the Viking Age</a>,看奥塞贝格船官方展陈入口。</li>
<li><a href="https://www.britannica.com/topic/Oseberg-ship">BritannicaOseberg Ship</a>,看概述与船葬信息。</li>
@ -407,7 +472,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/3/38/Trelleborg_airphoto.JPG" alt="特雷勒堡航拍参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/war-01-aerial.png" alt="特雷勒堡航拍参考">
<figcaption>航拍圆环:奇观必须保留的几何识别点。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/war-02-longhouse.png" alt="特雷勒堡长屋参考">
<figcaption>复原长屋:内部军营建筑的低矮长屋样式。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/war-03-earthwork.png" alt="特雷勒堡土垒道路参考">
<figcaption>土垒与道路:圆环、壕沟和十字路的组合。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://whc.unesco.org/en/list/1660">UNESCOViking-Age Ring Fortresses</a>,看环形堡垒体系。</li>
<li><a href="https://en.natmus.dk/museums-and-palaces/trelleborg/trelleborgs-history/">National Museum of DenmarkTrelleborg's history</a>,看官方历史说明。</li>
@ -458,7 +536,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/1/12/Urnes_Stave_Church_1.jpg" alt="乌尔内斯木板教堂参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/culture-01-church.png" alt="乌尔内斯木板教堂整体参考">
<figcaption>教堂整体:竖向层叠屋顶和深色木构主轮廓。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/culture-02-side.png" alt="乌尔内斯木板教堂北侧参考">
<figcaption>侧面轮廓:可提炼多层坡屋顶和瘦高体块。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/culture-03-carving.png" alt="乌尔内斯门板兽纹雕刻参考">
<figcaption>门板雕刻Urnes 兽纹风格,用于文化奇观精致度。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://whc.unesco.org/en/list/58">UNESCOUrnes Stave Church</a>,看世界遗产说明。</li>
<li><a href="https://commons.wikimedia.org/wiki/File:Urnes_Stave_Church_1.jpg">参考图:教堂整体轮廓</a></li>
@ -509,7 +600,20 @@
</div>
<aside class="ref-card">
<h3>明确参考图</h3>
<img src="https://upload.wikimedia.org/wikipedia/commons/d/d0/Anse_aux_Meadows%2C_Newfoundland._%2826493561277%29.jpg" alt="兰塞奥兹牧草地参考">
<div class="ref-grid">
<figure>
<img src="assets/viking-wonders/explore-01-sod.png" alt="兰塞奥兹牧草地草皮屋参考">
<figcaption>草皮建筑主体:低矮厚屋顶和贴地体块。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/explore-02-door.png" alt="兰塞奥兹牧草地复原屋参考">
<figcaption>复原长屋近景:木框入口、草皮厚度和墙体质感。</figcaption>
</figure>
<figure>
<img src="assets/viking-wonders/explore-03-camp.png" alt="兰塞奥兹牧草地营地环境参考">
<figcaption>营地环境:草地、木构和冷灰天空形成远航前哨感。</figcaption>
</figure>
</div>
<ul class="source-links">
<li><a href="https://parks.canada.ca/lhn-nhs/nl/meadows.aspx">Parks CanadaL'Anse aux Meadows</a>,看官方遗址信息。</li>
<li><a href="https://parks.canada.ca/lhn-nhs/nl/meadows/culture">Parks CanadaCulture and history</a>,看历史定位。</li>

View File

@ -5,10 +5,12 @@ using Logic;
using RuntimeData;
using TH1_Anim;
using TH1_Anim.Fragments;
using TH1_Core.Events;
using TH1_Logic.Core;
using TH1_Presentation.Sequencer.Task;
using TH1_UI.Controller.Announce;
using TH1_UI.Controller.Interaction;
using TH1_UI.Core;
using TH1Renderer;
using TH1Resource;
using UnityEngine;
@ -112,6 +114,8 @@ namespace TH1_Core.Managers
}
//如果当前不是我的回合并且进来了一个UISequencerTask那么要先缓存直到我的回合再显示出来
if (IsDuplicateCityLevelUpChoiceTask(task)) return;
if (Main.MapData?.CurPlayer != null && Main.MapData?.PlayerMap?.SelfPlayerData != null &&
Main.MapData.CurPlayer != Main.MapData.PlayerMap.SelfPlayerData && (task as UISequencerTask) != null)
{
@ -128,6 +132,114 @@ namespace TH1_Core.Managers
TryProcessNext();
}
public static void EnqueuePendingCityLevelUpChoices(MapData map, PlayerData player)
{
if (map == null || player == null) return;
if (map != Main.MapData) return;
if (player != map.PlayerMap?.SelfPlayerData) return;
if (map.CityMap?.CityList == null) return;
foreach (var city in map.CityMap.CityList)
{
if (city == null || city.CityLevelUpPoint <= 0) continue;
if (!map.CityToPlayerDict.TryGetValue(city.Id, out var playerId) || playerId != player.Id) continue;
EnqueuePendingCityLevelUpChoice(map, city);
}
}
public static void EnqueuePendingCityLevelUpChoice(MapData map, CityData city)
{
if (map == null || city == null || city.CityLevelUpPoint <= 0) return;
if (map != Main.MapData) return;
if (map.CurPlayer != map.PlayerMap?.SelfPlayerData) return;
if (!map.GetPlayerDataByCityId(city.Id, out var player) || player != map.PlayerMap.SelfPlayerData) return;
var pendingLevel = city.Level - city.CityLevelUpPoint;
if (pendingLevel < 2) pendingLevel = 2;
if (HasQueuedCityLevelUpChoice(city.Id, pendingLevel)) return;
var interaction = new ShowUIInteractionCityUpgrade
{
CityId = (int)city.Id,
CityLevel = pendingLevel
};
EnqueueTask(new UISequencerTask(ViewControllerManager.UIInterationCityLevelupController, interaction), true);
}
public static void DismissTurnBoundUIOnTurnEnd()
{
RemoveTurnBoundUITasks(_taskQueue);
RemoveTurnBoundUITasks(_taskNextFrameQueue);
RemoveTurnBoundUITasks(_taskNotCurPlayList);
if (_currentTask is UISequencerTask currentUiTask && IsTurnBoundUITask(currentUiTask))
{
currentUiTask.GetController()?.Close();
}
}
private static void RemoveTurnBoundUITasks(Queue<ISequencerTask> queue)
{
var count = queue.Count;
for (var i = 0; i < count; i++)
{
var task = queue.Dequeue();
if (!IsTurnBoundUITask(task)) queue.Enqueue(task);
}
}
private static bool IsTurnBoundUITask(ISequencerTask task)
{
if (task is not UISequencerTask uiTask) return false;
var controllerType = uiTask.GetControllerType();
return controllerType == typeof(UIAnnounceMajorEventController)
|| controllerType == typeof(UIAnnounceDiplomacyController)
|| controllerType == typeof(UIInteractionCityLevelupController)
|| controllerType == typeof(UIInteractionDiplomacyOfferAllyController);
}
private static bool HasQueuedCityLevelUpChoice(uint cityId, int cityLevel)
{
return IsCityLevelUpChoiceTask(_currentTask, cityId, cityLevel)
|| ContainsCityLevelUpChoiceTask(_taskQueue, cityId, cityLevel)
|| ContainsCityLevelUpChoiceTask(_taskNextFrameQueue, cityId, cityLevel)
|| ContainsCityLevelUpChoiceTask(_taskNotCurPlayList, cityId, cityLevel);
}
private static bool IsDuplicateCityLevelUpChoiceTask(ISequencerTask task)
{
if (!TryGetCityLevelUpChoiceTaskData(task, out var cityId, out var cityLevel)) return false;
return HasQueuedCityLevelUpChoice(cityId, cityLevel);
}
private static bool ContainsCityLevelUpChoiceTask(Queue<ISequencerTask> queue, uint cityId, int cityLevel)
{
foreach (var task in queue)
{
if (IsCityLevelUpChoiceTask(task, cityId, cityLevel)) return true;
}
return false;
}
private static bool IsCityLevelUpChoiceTask(ISequencerTask task, uint cityId, int cityLevel)
{
return TryGetCityLevelUpChoiceTaskData(task, out var taskCityId, out var taskCityLevel)
&& taskCityId == cityId
&& taskCityLevel == cityLevel;
}
private static bool TryGetCityLevelUpChoiceTaskData(ISequencerTask task, out uint cityId, out int cityLevel)
{
cityId = 0;
cityLevel = 0;
if (task is not UISequencerTask uiTask) return false;
if (uiTask.GetControllerType() != typeof(UIInteractionCityLevelupController)) return false;
if (uiTask.GetData() is not ShowUIInteractionCityUpgrade evt) return false;
if (evt.CityId < 0) return false;
cityId = (uint)evt.CityId;
cityLevel = evt.CityLevel;
return true;
}
private static void TryProcessNext()
{

View File

@ -711,6 +711,12 @@ namespace RuntimeData
if(Resource == ResourceType.CityCenter) return false;
if (Terrain != TerrainType.Land) return false;
}
if (type == GridSpType.LeyLine)
{
if (Resource == ResourceType.CityCenter) return false;
if (Terrain != TerrainType.Land) return false;
if (Feature == TerrainFeature.Mountain) return false;
}
SpTypeList.Add(type);
origin?.HeroTask(map)?.OnAddSpType(map, type);
//如果是remiliaGrid且是斯卡雷特帝国的单位给当前的unit填加skill

View File

@ -255,7 +255,7 @@ public class GridAndResourceDataAssets : ScriptableObject
//如果是地脉格,使用地脉特殊外观(阵营限制由表格配置控制)
if (grid.HasSpType(GridSpType.LeyLine))
foreach (var t in info.SpriteList)
if (t.IsGridSpType && t.GridSpType == GridSpType.LeyLine && grid.CivId == t.CivId)
if (t.IsGridSpType && t.GridSpType == GridSpType.LeyLine)
return t.Sprite;
@ -619,4 +619,4 @@ public class WonderInfo
public string Desc;
public int Exp;
}
}

View File

@ -1497,6 +1497,7 @@ namespace Logic.Action
var paramMap = actionParams.MapData;
var paramCity = actionParams.CityData;
actionParams.CityData.CityLevelUpPoint --;
var cityLevelUpSucceeded = false;
//不管哪个选项,都播放音效
if (actionParams.CityData.Grid(actionParams.MapData)?.InMainSight() ?? false)
@ -1513,28 +1514,27 @@ namespace Logic.Action
// 2. 创建探索者然后一边处理逻辑一边处理视觉这里暂时用了maprenderer 来负责
MapRenderer.Instance.CreateTemporaryExplorer(actionParams.MapData,paramGrid, 3f);
paramCity.SetCityRenderer(actionParams.MapData);
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Workshop)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Workshop)
{
paramCity.Workshop = true;
paramCity.SetCityRenderer(actionParams.MapData);
if((paramGrid?.InMainSight()??false) && paramPlayer == Main.MapData.PlayerMap.SelfPlayerData)
paramGrid.Renderer(paramMap)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Coin));
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.CityWealth)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.CityWealth)
{
if(PresentationManager.GetCityLevelupActionPos(_actionId.CityLevelUpActionType,out var pos))
paramPlayer.AddCoin(5,pos);
else
paramPlayer.AddCoin(5);
paramCity.SetCityRenderer(paramMap);
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.CityWall)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.CityWall)
{
paramCity.CityWall = true;
paramGrid?.Renderer(paramMap)?.InstantUpdateGrid(true);
@ -1542,9 +1542,9 @@ namespace Logic.Action
//如果city上有单位也要更新单位的渲染
if (paramGrid.MainSelfPlayerVisibleUnit(out var unit) && unit.InMainSight())
unit.Renderer(actionParams.MapData)?.InstantUpdateUnit(true);
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Expand)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Expand)
{
Main.CityLogic.CityLevelUpActionExpand(actionParams.MapData,actionParams.CityData);
actionParams.CityData.SetCityRenderer(actionParams.MapData);
@ -1561,26 +1561,26 @@ namespace Logic.Action
if(paramPlayer.TechTree.CheckIfHasTechAtom(TechAtom.KaguyaFrenchNapoleonicCode))
Main.PlayerLogic.SetCityTerritoryGridSp(actionParams.MapData,actionParams.CityData,GridSpType.KaguyaGrid);
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Population)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Population)
{
//Step #2 逻辑层 & 表现层 city获得exp
var exp = 3;
Main.CityLogic.GridGiveCityExp_LogicView(actionParams.MapData,paramPlayer,actionParams.CityData?.Grid(actionParams.MapData),actionParams.CityData,exp);
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Park)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.Park)
{
actionParams.CityData.ParkCount++;
actionParams.CityData.SetCityRenderer(actionParams.MapData);
if((paramGrid?.InMainSight()??false) && paramPlayer == Main.MapData.PlayerMap.SelfPlayerData)
paramGrid.Renderer(paramMap)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Luxury));
return true;
cityLevelUpSucceeded = true;
}
if (_actionId.CityLevelUpActionType == CityLevelUpActionType.BigGuy)
else if (_actionId.CityLevelUpActionType == CityLevelUpActionType.BigGuy)
{
if(paramGrid.RealUnit(paramMap,out var unitData))
Main.UnitLogic.PassiveMoveAway(paramMap, unitData);
@ -1597,10 +1597,12 @@ namespace Logic.Action
if (!actionParams.MapData.AddUnitData(paramGrid.Id, actionParams.CityData.Id,fullType ,out var _))
return false;
paramCity.SetCityRenderer(paramMap);
return true;
cityLevelUpSucceeded = true;
}
return false;
if (!cityLevelUpSucceeded) return false;
PresentationManager.EnqueuePendingCityLevelUpChoice(actionParams.MapData, actionParams.CityData);
return true;
}
public override bool CheckCan(CommonActionParams actionParams)
@ -1873,6 +1875,8 @@ namespace Logic.Action
// 开启 PendingAnimScope逻辑运算期间技能产生的动画步骤会收集到 scope 中
using var scope = PresentationManager.BeginScope();
using var visualCollector = ActionVisualEventCollector.Begin(
actionParams.MapData, actionParams.UnitData.Id, actionParams.TargetUnitData.Id);
//Step #0 为anim做数据准备
GridData originGrid = null;
@ -1946,6 +1950,7 @@ namespace Logic.Action
var attackFragment = FragmentFactory.Create(fragmentType, attackData);
// 将技能产生的 pending steps 注入到攻击 fragment 中
scope.FlushTo(attackFragment);
visualCollector?.FlushTo(attackFragment);
PresentationManager.EnqueueTask(new FragmentSequencerTask(attackFragment));
_duration = attackFragment.Duration;
}
@ -1962,6 +1967,7 @@ namespace Logic.Action
var fragment = FragmentFactory.Create(fragmentType,data);
// 将技能产生的 pending steps 注入到攻击 fragment 中
scope.FlushTo(fragment);
visualCollector?.FlushTo(fragment);
PresentationManager.EnqueueTask(new FragmentSequencerTask(fragment));
_duration = fragment.Duration;
}
@ -2288,7 +2294,10 @@ namespace Logic.Action
}
if(actionParams.PlayerData.IsSelfPlayer())
{
PresentationManager.EnqueuePendingCityLevelUpChoices(actionParams.MapData, actionParams.PlayerData);
EventManager.Publish(new ShowUIBottomBottomBarNextTurn(){});
}
return true;
}
@ -2319,6 +2328,8 @@ namespace Logic.Action
{
if (!CheckCan(actionParams)) return false;
actionParams.MapData.OnTurnEnd(actionParams.PlayerData.Id);
if (actionParams.MapData == Main.MapData)
PresentationManager.DismissTurnBoundUIOnTurnEnd();
if(actionParams.PlayerData.IsSelfPlayer())
EventManager.Publish(new HideUIBottomBottomBarNextTurn(){});
return true;

View File

@ -0,0 +1,157 @@
using System;
using System.Collections.Generic;
using Logic;
using RuntimeData;
using TH1_Anim.Fragments;
using TH1_Logic.Core;
using TH1_Renderer;
using TH1Renderer;
namespace Logic.Action
{
public class ActionVisualEventCollector : IDisposable
{
private readonly List<FragmentStep> _steps = new List<FragmentStep>();
private readonly MapData _mapData;
private readonly uint _mainTargetUnitId;
private readonly ActionVisualEventCollector _previous;
public static ActionVisualEventCollector Current { get; private set; }
public bool MainTargetKilledBeforeAttack { get; private set; }
public int MainTargetPreAttackDamage { get; private set; }
private ActionVisualEventCollector(MapData mapData, uint originUnitId, uint mainTargetUnitId)
{
_mapData = mapData;
_mainTargetUnitId = mainTargetUnitId;
_previous = Current;
Current = this;
}
public static ActionVisualEventCollector Begin(MapData mapData, uint originUnitId, uint mainTargetUnitId)
{
if (mapData != Main.MapData) return null;
return new ActionVisualEventCollector(mapData, originUnitId, mainTargetUnitId);
}
public SettlementInfo SettleDamageWithVisual(
UnitData origin,
UnitData target,
int damage,
DamageType damageType,
int phase,
float delay = 0f,
bool markMainTargetPreAttackKill = false,
bool includeDamageVfx = true,
bool showoff = false)
{
if (_mapData == null || origin == null || target == null)
return Main.UnitLogic.DamageSettlement(_mapData, origin, target, damage, damageType);
var targetGrid = target.Grid(_mapData);
var targetCity = target.City(_mapData);
var targetRenderer = target.Renderer(_mapData);
var canBeKilled = target.CanBeKilled(_mapData);
var targetId = target.Id;
var settlement = Main.UnitLogic.DamageSettlement(_mapData, origin, target, damage, damageType);
if (settlement == null) return null;
bool killed = settlement.IsKill || !target.IsAlive();
if (markMainTargetPreAttackKill && killed && targetId == _mainTargetUnitId)
{
MainTargetKilledBeforeAttack = true;
MainTargetPreAttackDamage += damage;
}
if (targetGrid != null)
{
AddDamageStep(
targetGrid,
targetCity,
targetRenderer,
damage,
killed,
canBeKilled,
phase,
delay,
includeDamageVfx,
showoff);
}
return settlement;
}
private void AddDamageStep(
GridData targetGrid,
CityData targetCity,
UnitRenderer targetRenderer,
int damage,
bool killed,
bool canBeKilled,
int phase,
float delay,
bool includeDamageVfx,
bool showoff)
{
_steps.Add(new FragmentStep
{
Phase = phase,
Duration = 0f,
Execute = () =>
{
void RunVisual()
{
if (targetGrid == null) return;
var gridRenderer = targetGrid.Renderer(_mapData);
bool inMainSight = targetGrid.InMainSight();
if (inMainSight)
{
gridRenderer?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
if (includeDamageVfx)
gridRenderer?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, damage));
}
if (killed)
{
if (inMainSight)
{
gridRenderer?.PlayVFXInSight(new GridVFXParams(GridVFXType.Fog));
if (canBeKilled)
gridRenderer?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
}
targetRenderer?.Die();
targetCity?.SetCityRenderer(_mapData);
MapRenderer.Instance?.UpdateAroundHighlight(_mapData, targetGrid);
}
else
{
targetRenderer?.InstantUpdateUnit(showoff);
}
gridRenderer?.InstantUpdateGrid();
}
if (delay > 0f && Timer.Instance != null)
Timer.Instance.TimerRegister(this, RunVisual, delay, "ActionVisualEventCollector Damage Visual");
else
RunVisual();
}
});
}
public void FlushTo(FragmentBase fragment)
{
if (fragment == null) return;
foreach (var step in _steps)
fragment.InjectStep(step);
_steps.Clear();
}
public void Dispose()
{
_steps.Clear();
Current = _previous;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9f12d6a9d2e94e8d8b18db034cb4d86f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1146,7 +1146,14 @@ namespace Logic
{
// Step #1 计算目标数量:地脉总数 = 城市中心总数 / 3
int leyLineCount = _tribes.Count / 3;
if (leyLineCount <= 0) return;
bool hasIndianPlayer = false;
foreach (var player in mapData.PlayerMap.PlayerDataList)
if (player.CivEnum == CivEnum.Indian)
{
hasIndianPlayer = true;
break;
}
if (leyLineCount <= 0 && !hasIndianPlayer) return;
// Step #2 构建首都排除区仅首都±1范围非首都村庄不排除
using var pooledCradleExclude = THCollectionPool.GetHashSetHandle<uint>(out var cradleExclude);
@ -1159,9 +1166,7 @@ namespace Logic
using var pooledCandidates = THCollectionPool.GetListHandle<GridData>(out var candidates);
foreach (var gridData in mapData.GridMap.GridList)
{
if (gridData.Terrain != TerrainType.Land) continue;
if (gridData.Resource == ResourceType.CityCenter) continue;
if (cradleExclude.Contains(gridData.Pos.PosId)) continue;
if (!CanPlaceLeyLine(gridData, cradleExclude)) continue;
candidates.Add(gridData);
}
@ -1177,8 +1182,8 @@ namespace Logic
foreach (var grid in candidates)
{
if (placed >= leyLineCount) break;
grid.SpTypeList.Add(GridSpType.LeyLine);
placed++;
if (TryAddLeyLine(mapData, grid, cradleExclude, true))
placed++;
}
// Step #6 古明地帝国保底首都2格内必定有地脉
@ -1194,26 +1199,90 @@ namespace Logic
mapData.GridMap.GetAroundGridData(2, 2, cradleGrid, _aroundBuf);
bool hasLeyLine = false;
foreach (var g in _aroundBuf)
if (g.HasSpType(GridSpType.LeyLine)) { hasLeyLine = true; break; }
if (g.HasSpType(GridSpType.LeyLine) && CanPlaceLeyLine(g, cradleExclude)) { hasLeyLine = true; break; }
if (hasLeyLine) continue;
// 没有则强制在2格内随机选一个合法格子放置
for (int i = _aroundBuf.Count - 1; i > 0; i--)
bool placedNearCradle = TryPlaceLeyLineAround(mapData, cradleGrid, 2, cradleExclude, true);
if (placedNearCradle) continue;
int maxRadius = (int)(_width > _height ? _width : _height);
bool placedByExpand = false;
for (int radius = 3; radius <= maxRadius; radius++)
{
int j = Random.Range(0, i + 1);
(_aroundBuf[i], _aroundBuf[j]) = (_aroundBuf[j], _aroundBuf[i]);
}
foreach (var g in _aroundBuf)
{
if (g.Terrain != TerrainType.Land) continue;
if (g.Resource == ResourceType.CityCenter) continue;
if (cradleExclude.Contains(g.Pos.PosId)) continue;
g.SpTypeList.Add(GridSpType.LeyLine);
break;
if (TryPlaceLeyLineAround(mapData, cradleGrid, radius, cradleExclude, true))
{
placedByExpand = true;
break;
}
}
if (placedByExpand) continue;
for (int radius = 2; radius <= maxRadius; radius++)
if (TryPlaceLeyLineAround(mapData, cradleGrid, radius, cradleExclude, false))
break;
}
}
private bool TryPlaceLeyLineAround(MapData mapData, GridData centerGrid, int radius, HashSet<uint> cradleExclude, bool avoidNearbyLeyLine)
{
_aroundBuf ??= new List<GridData>();
_aroundBuf.Clear();
mapData.GridMap.GetAroundGridData(radius, radius, centerGrid, _aroundBuf);
for (int i = _aroundBuf.Count - 1; i > 0; i--)
{
int j = Random.Range(0, i + 1);
(_aroundBuf[i], _aroundBuf[j]) = (_aroundBuf[j], _aroundBuf[i]);
}
foreach (var grid in _aroundBuf)
{
if (!CanPlaceLeyLine(grid, cradleExclude)) continue;
if (TryAddLeyLine(mapData, grid, cradleExclude, avoidNearbyLeyLine))
return true;
}
return false;
}
private bool TryAddLeyLine(MapData mapData, GridData grid, HashSet<uint> cradleExclude, bool avoidNearbyLeyLine)
{
if (!CanPlaceLeyLine(grid, cradleExclude)) return false;
if (grid.HasSpType(GridSpType.LeyLine)) return false;
if (avoidNearbyLeyLine && HasNearbyLeyLine(mapData, grid, 1)) return false;
return grid.AddSpType(GridSpType.LeyLine, mapData, null);
}
private bool HasNearbyLeyLine(MapData mapData, GridData grid, int radius)
{
for (int x = grid.Pos.X - radius; x <= grid.Pos.X + radius; x++)
for (int y = grid.Pos.Y - radius; y <= grid.Pos.Y + radius; y++)
{
if (x == grid.Pos.X && y == grid.Pos.Y) continue;
if (!mapData.GridMap.GetGridDataByPos(x, y, out var aroundGrid)) continue;
if (aroundGrid.HasSpType(GridSpType.LeyLine)) return true;
}
return false;
}
private bool CanPlaceLeyLine(GridData grid, HashSet<uint> cradleExclude)
{
if (grid == null) return false;
if (grid.Terrain != TerrainType.Land) return false;
if (grid.Feature == TerrainFeature.Mountain) return false;
if (grid.Resource == ResourceType.CityCenter) return false;
if (IsMapEdgeGrid(grid)) return false;
if (cradleExclude.Contains(grid.Pos.PosId)) return false;
return true;
}
private bool IsMapEdgeGrid(GridData grid)
{
return grid.Pos.X <= 0 || grid.Pos.Y <= 0 || grid.Pos.X >= _width - 1 || grid.Pos.Y >= _height - 1;
}
}
}

View File

@ -7,6 +7,8 @@
using RuntimeData;
using Logic.Action;
using TH1_Anim.Fragments;
using TH1_Logic.Core;
using TH1Renderer;
@ -59,7 +61,22 @@ namespace Logic.Skill
{
int dmg = Table.Instance.CalcDamage(mapData, origin, target, damagePara:0.5f) * count;
addDmg = dmg;
Main.UnitLogic.DamageSettlement(mapData, origin, target, dmg, DamageType.FollowAttack);
var visualCollector = ActionVisualEventCollector.Current;
if (visualCollector != null && mapData == Main.MapData)
{
visualCollector.SettleDamageWithVisual(
origin,
target,
dmg,
DamageType.FollowAttack,
AnimPhase.AttackImpact + 50,
markMainTargetPreAttackKill: true,
includeDamageVfx: false);
}
else
{
Main.UnitLogic.DamageSettlement(mapData, origin, target, dmg, DamageType.FollowAttack);
}
}
}
}

View File

@ -8,8 +8,10 @@
using System;
using System.Collections.Generic;
using Logic.Action;
using MemoryPack;
using RuntimeData;
using TH1_Anim.Fragments;
using TH1_DataAssetsScript;
using TH1_Logic.Core;
using TH1Renderer;
@ -301,8 +303,19 @@ namespace Logic.Skill
var tmpUnitId = unit.Id;
var dmg = sameUnion ? _bigUnluckyFriendDmg : _bigUnluckyEnemyDmg;
var canBeKilled = unit.CanBeKilled(mapData);
var dmgInfo = Main.UnitLogic.DamageSettlement(mapData, originUnit, unit, dmg , sameUnion ? DamageType.KillSelf : DamageType.Splash);
var visualCollector = ActionVisualEventCollector.Current;
var dmgInfo = visualCollector != null && mapData == Main.MapData
? visualCollector.SettleDamageWithVisual(
originUnit,
unit,
dmg,
sameUnion ? DamageType.KillSelf : DamageType.Splash,
AnimPhase.AttackImpact + 50,
(projInfo?.AnimTime ?? 0f) + waitTime,
showoff: true)
: Main.UnitLogic.DamageSettlement(mapData, originUnit, unit, dmg , sameUnion ? DamageType.KillSelf : DamageType.Splash);
if (dmgInfo?.DamageTargetGrid == null) continue;
if (visualCollector != null && mapData == Main.MapData) continue;
//处理视觉
if (dmgInfo.DamageTargetGrid.InMainSight())
{
@ -355,8 +368,19 @@ namespace Logic.Skill
if (!sameUnion)
{
var canBeKilled = unit.CanBeKilled(mapData);
var dmgInfo = Main.UnitLogic.DamageSettlement(mapData, originUnit, unit, _bigLuckyDmg , DamageType.Splash);
var visualCollector = ActionVisualEventCollector.Current;
var dmgInfo = visualCollector != null && mapData == Main.MapData
? visualCollector.SettleDamageWithVisual(
originUnit,
unit,
_bigLuckyDmg,
DamageType.Splash,
AnimPhase.AttackImpact + 50,
(projInfo?.AnimTime ?? 0f) + waitTime,
showoff: true)
: Main.UnitLogic.DamageSettlement(mapData, originUnit, unit, _bigLuckyDmg , DamageType.Splash);
if (dmgInfo?.DamageTargetGrid == null) continue;
if (visualCollector != null && mapData == Main.MapData) continue;
//处理视觉
if (dmgInfo.DamageTargetGrid.InMainSight())
{

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: f8ae71b564487f04b93eb86d10dbee6b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: f8ae71b564487f04b93eb86d10dbee6b

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: ea6b2813613f95244b72739ca5298b54
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: ea6b2813613f95244b72739ca5298b54

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 65875d63bef022340aff041d6045c69c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 65875d63bef022340aff041d6045c69c

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: f88262e8ea0f8e943b5e3ef5251bcd3c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: f88262e8ea0f8e943b5e3ef5251bcd3c

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 781a6c40d412df6419381d6224aa2109
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 781a6c40d412df6419381d6224aa2109

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 3babfd2badc8cb04188e467fe82ea66a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 3babfd2badc8cb04188e467fe82ea66a

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: b36e8dd25a0c90a47bc6da65d3c5ea43
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: b36e8dd25a0c90a47bc6da65d3c5ea43

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 4d2d20a4a501124438cdf92cf36de2cc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 4d2d20a4a501124438cdf92cf36de2cc

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: e6db9551f40eb6943b5cc39aab4603e0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: e6db9551f40eb6943b5cc39aab4603e0

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 5a314fab7d840344e910a1cd454b1a3d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 5a314fab7d840344e910a1cd454b1a3d

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: d8e24bbd9aded0e479ee61c7796314d3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: d8e24bbd9aded0e479ee61c7796314d3

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 7c61d0fc7766f3449a0cbc54c7158cff
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 7c61d0fc7766f3449a0cbc54c7158cff

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: c472f04edfaaf5242b57e9a91b568af0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: c472f04edfaaf5242b57e9a91b568af0

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: fc32ecc8ec4bfcb47abf75808bda67a5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: fc32ecc8ec4bfcb47abf75808bda67a5

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 9c8d8cb029387bc49889aac68b58b790
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 9c8d8cb029387bc49889aac68b58b790

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 75cd6ccb1a826964d84edfb791c80102
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 75cd6ccb1a826964d84edfb791c80102

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 7a7830462656d2f49b42cd82806205d8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 7a7830462656d2f49b42cd82806205d8

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 85b3a8f79bb50944c9ae466c12c3f570
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 85b3a8f79bb50944c9ae466c12c3f570

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 4b0cd2f6afba77c48a53205e2e8f8c93
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 4b0cd2f6afba77c48a53205e2e8f8c93

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 140147a3ca9fd1e44b345c56de7a7d03
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 140147a3ca9fd1e44b345c56de7a7d03

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 3aa336bda81da5e42b98390def28ff1f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 3aa336bda81da5e42b98390def28ff1f

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: caef0e96b5f3bf24c8e932d86e258774
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: caef0e96b5f3bf24c8e932d86e258774

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 6c0d8c8d45d04d640b37a51f6b8471e3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 6c0d8c8d45d04d640b37a51f6b8471e3

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 1ced0cd7c39ca0d42aec402b05a2f95b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 1ced0cd7c39ca0d42aec402b05a2f95b

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 8b6eafa759878d444865be2eacf9ff94
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 8b6eafa759878d444865be2eacf9ff94

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 776d67a39f3935b41ae77e311db8a80c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 776d67a39f3935b41ae77e311db8a80c

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: eb82f7891da6d604c848d3afff617de1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: eb82f7891da6d604c848d3afff617de1

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 5da0f5832a400284fb78b95eb3638a5e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 5da0f5832a400284fb78b95eb3638a5e

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 3917d494a3f843041ad25307f9b17cd1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 3917d494a3f843041ad25307f9b17cd1

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 97a5b77ada2db804a8e77c4f66298058
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 97a5b77ada2db804a8e77c4f66298058

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: cc505689e40611b4e91c0f0fe8f40a11
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: cc505689e40611b4e91c0f0fe8f40a11

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 3b47d6733bc65034ba9f6f238196dbdc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 3b47d6733bc65034ba9f6f238196dbdc

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 732e7144e6e717c40baf6456c5288cf9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 732e7144e6e717c40baf6456c5288cf9

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: a740ffdcc5843d248b4ee69037aaacb2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: a740ffdcc5843d248b4ee69037aaacb2

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 2650d19ccc2d7a64caa2a94298ea3901
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 2650d19ccc2d7a64caa2a94298ea3901

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 54e8e9de21ab64649b39094eb24b3239
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 54e8e9de21ab64649b39094eb24b3239

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: f5c18bff44f96fb44a8e08f4d5b1f2cd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: f5c18bff44f96fb44a8e08f4d5b1f2cd

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 179b4d1e78a6168448df54d3e700fb5f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 179b4d1e78a6168448df54d3e700fb5f

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: c9269c33fbba14f47aa6ea969fea22a6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: c9269c33fbba14f47aa6ea969fea22a6

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: a513ea03db0b3394b8674bfde66a08bf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: a513ea03db0b3394b8674bfde66a08bf

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: c5153aa5f309b034891cf8b32d01914b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: c5153aa5f309b034891cf8b32d01914b

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 7b06eca3ee635ca4aadfbc84b54b2bde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 7b06eca3ee635ca4aadfbc84b54b2bde

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: e71938c97066e7c47b93085b57e7e41c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: e71938c97066e7c47b93085b57e7e41c

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: c74ac71107d26194ebc34bbb5873ac31
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: c74ac71107d26194ebc34bbb5873ac31

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 78bd90875a3aa9c4c877bd11e366a3e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 78bd90875a3aa9c4c877bd11e366a3e1

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: cb80a5f3a312b364780c62302305a277
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: cb80a5f3a312b364780c62302305a277

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 7b8eaa156318d5845832e822cf296af9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 7b8eaa156318d5845832e822cf296af9

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: f36331648a56309459bdcf0afd8ca50b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: f36331648a56309459bdcf0afd8ca50b

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: a4bfeb46b34e5da46b43458f7196439f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: a4bfeb46b34e5da46b43458f7196439f

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 9c34720fffe970b489045f4f47745f8f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 9c34720fffe970b489045f4f47745f8f

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 3c76d79c10bf9fc4787527838509abbd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 3c76d79c10bf9fc4787527838509abbd

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: a612fa14c9fd0b245b7dde1c74fea678
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: a612fa14c9fd0b245b7dde1c74fea678

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 76059c05f7c1e9c4cb244b9bbc6e9d93
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 76059c05f7c1e9c4cb244b9bbc6e9d93

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 595984441092805478fd488aea583cf9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 595984441092805478fd488aea583cf9

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 1b78929dd271747458f6ae865fee2d37
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 1b78929dd271747458f6ae865fee2d37

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: a6e10c0890bbad94d8c0d15c9d03289a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: a6e10c0890bbad94d8c0d15c9d03289a

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 9c4963c6cfc748c40996ff9c157fa7a0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 9c4963c6cfc748c40996ff9c157fa7a0

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: b725be5326961d846814b4902ac4a6c7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: b725be5326961d846814b4902ac4a6c7

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: f5413a56a26c22a45926019efaa6742c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: f5413a56a26c22a45926019efaa6742c

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 346f8aa650d9a8a489c0d41683a9ec48
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 346f8aa650d9a8a489c0d41683a9ec48

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 18a1b701d2f585741a5b4f5ad6b7a85f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 18a1b701d2f585741a5b4f5ad6b7a85f

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: ebfa558b9a4117d49943b113279a7df7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: ebfa558b9a4117d49943b113279a7df7

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: e41e9c55c6bb8bb41a24fe04d42d84b0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: e41e9c55c6bb8bb41a24fe04d42d84b0

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: ac62ae85793ecd04e893e26effbd3896
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: ac62ae85793ecd04e893e26effbd3896

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 6d374a07875060146ac924b1d3d97b28
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 6d374a07875060146ac924b1d3d97b28

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 9ccf34423d0712546993b8fbbbee6bf2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 9ccf34423d0712546993b8fbbbee6bf2

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 24f362b5a6e949046b1033f02dcd4622
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 24f362b5a6e949046b1033f02dcd4622

View File

@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 4bd9b8533486b11448cd37aafa30934c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 4bd9b8533486b11448cd37aafa30934c

Some files were not shown because too many files have changed in this diff Show More