TH1/Unity/Assets/Scripts/TH1_Logic/Action/TrainUnitActionLogic.cs
2025-08-26 14:32:20 +08:00

661 lines
31 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.

/*
* @Author: 白哉
* @Description: 行为逻辑类
* @Date: 2025年04月10日 星期四 11:04:44
* @Modify:
*/
using System;
using System.Collections.Generic;
using System.Linq;
using Logic.AI;
using Logic.CrashSight;
using RuntimeData;
using TH1_Logic.Core;
using UnityEngine;
using TH1Renderer;
using TH1Resource;
using UnityEditor;
using UnityEngineInternal;
//这里是所有BuildAction派生子类的实现模块
namespace Logic.Action
{
// TrainUnit 训练单位类
public class TrainUnitAction : ActionLogicBase
{
public TrainUnitAction(CommonActionId id) : base(id)
{
}
protected bool TrainUnitActionCheckBaseData(CommonActionParams actionParam)
{
if (actionParam.PlayerData == null) return false;
return true;
}
protected bool TrainUnitActionCheckHasTech(CommonActionParams actionParam)
{
//如果没科技return
if(!actionParam.PlayerData.TechTree.CheckActionCan(_actionId))
return false;
return true;
}
protected bool TrainUnitActionCheckWaterUnit()
{
if (Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(_actionId.UnitType,_actionId.GiantType,_actionId.UnitLevel,out var info)
&& info.LandType == LandType.WaterAndAshore)
return true;
return false;
}
protected bool TrainUnitActionCheckCityFullPop(CommonActionParams actionParam)
{
if (actionParam.MainObjectType == MainObjectType.City)
{
if (actionParam.MapData.CheckIfCityFullPopulation(actionParam.CityData)) return true;
}
if (actionParam.MainObjectType == MainObjectType.Grid)
{
if (!actionParam.MapData.GetCityDataByTerritoryGid(actionParam.GridData.Id, out var city)) return true;
if (actionParam.MapData.CheckIfCityFullPopulation(city)) return true;
}
return false;
}
protected bool TrainUnitActionCheckCityBelongPlayer(CommonActionParams actionParam)
{
if (actionParam.PlayerData == null) return false;
if (!actionParam.MapData.GetPlayerDataByCityId(actionParam.CityData.Id, out var playerData)
|| playerData.Id != actionParam.PlayerData.Id)
return false;
return true;
}
protected bool TrainUnitActionCheckGridBelongPlayer(CommonActionParams actionParam)
{
if (actionParam.GridData == null ||
!actionParam.MapData.GetPlayerDataByTerritoryGridId(actionParam.GridData.Id, out var player))
return false;
if (player.Id != actionParam.PlayerData.Id)
return false;
return true;
}
protected bool TrainUnitActionCheckUnitOnCity(CommonActionParams actionParam)
{
if (!actionParam.MapData.GetGridDataByCityId(actionParam.CityId, out var grid)) return true;
if (actionParam.MapData.GetUnitDataByGid(grid.Id, out var unitData)) return true;
return false;
}
protected bool TrainUnitActionCheckUnitOnGrid(CommonActionParams actionParam)
{
if (actionParam.MapData.GetUnitDataByGid(actionParam.GridData.Id, out var unitData)) return true;
return false;
}
protected bool TrainUnitActionCheckMoneyEnough(CommonActionParams actionParam)
{
if (GetCost() > actionParam.PlayerData.PlayerWealth) return false;
return true;
}
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if (_actionId.UnitType == UnitType.None)
return false;
if (actionParams.MainObjectType == MainObjectType.City && actionParams.CityData == null)
return false;
if (actionParams.MainObjectType == MainObjectType.Grid && actionParams.GridData == null)
return false;
GridData gridData = null;
CityData cityData = null;
//如果是city产兵
if (actionParams.MainObjectType == MainObjectType.City)
{
cityData = actionParams.CityData;
//从city处获得准确的gridData
if (!actionParams.MapData.GetGridDataByCityId(actionParams.CityData.Id, out gridData))
return false;
}
//否则如果是grid产兵
if (actionParams.MainObjectType == MainObjectType.Grid)
{
//从actionParams获得准确的gridData
gridData = actionParams.GridData;
if (actionParams.CityData != null)
cityData = actionParams.CityData;
else
actionParams.MapData.GetCityDataByTerritoryGid(gridData.Id, out cityData);
}
if (gridData == null)
return false;
//减去花费
actionParams.PlayerData.PlayerWealth -= GetCost();
//生产新单位
var newUnit = actionParams.MapData.AddUnitData(gridData.Id,cityData.Id,_actionId.UnitType,_actionId.GiantType);
cityData.CityInfoRenderMark = true;
//更新视野
Main.PlayerLogic.UpdateSight(actionParams.MapData,actionParams.PlayerData,actionParams.MapData.GridMap.GetAroundGridIdList(newUnit.GetSightRange(),gridData));
//如果是真mapdata增加得分然后处理得分动画
if (Main.MapData == actionParams.MapData)// && actionParams.PlayerData.Id == actionParams.MapData.PlayerMap.SelfPlayerData.Id)
{
var v1 = Table.Instance.GridToWorld(gridData);
int score = GetCost() * 5;
if (actionParams.PlayerData.Id == actionParams.MapData.PlayerMap.SelfPlayerData.Id)
{
var faithPanel = GameObject.Find("UICanvas/TopBarPanel/FaithPanel/Icon").transform;
var endPos = faithPanel.position;
MapRenderer.Instance.ProjectileManager.CreateProjectile(v1,endPos,ProjectileType.Faith,ProjectileMoveType.CoinParabola,score);
}
AchievementDataManager.Instance.OnTrainUnit(actionParams.MapData, actionParams.PlayerData, actionParams.CityData, newUnit);
}
return true;
}
public override bool CheckCan(CommonActionParams actionParam)
{
GridData gridData;
PlayerData playerData;
CityData cityData;
//step #0 基础鲁棒性 (playerData不能为空)
if (!TrainUnitActionCheckBaseData(actionParam)) return false;
//Part1 如果是城市产兵
if (actionParam.MainObjectType == MainObjectType.City)
{
//step #1 city产兵的特殊鲁棒性
if (actionParam.CityData == null) return false;
//step #2 check player操作的city 是不是自己的city,存储gridData
if (!TrainUnitActionCheckCityBelongPlayer(actionParam)) return false;
//step #3 赋值gridData(city的位置)
if (!actionParam.MapData.GetGridDataByCityId(actionParam.CityData.Id, out gridData)) return false;
//step #4如果没科技return
if(!TrainUnitActionCheckHasTech(actionParam)) return false;
//step #5确认是否是水生unit
if (TrainUnitActionCheckWaterUnit()) return false;
//step #6 确认城市是否满员
if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #7 如果城市上面有单位,不能生产,不显示
if (TrainUnitActionCheckUnitOnCity(actionParam)) return false;
//step #8 判断钱够不够
if (!TrainUnitActionCheckMoneyEnough(actionParam)) return false;
//step #9 只处理非英雄
if (_actionId.UnitType == UnitType.Giant) return false;
return true;
}
//Part2 如果是grid产兵
if (actionParam.MainObjectType == MainObjectType.Grid)
{
//step #1 确认基础鲁棒性
if (actionParam.GridData == null) return false;
gridData = actionParam.GridData;
//step #2 进行基础赋值
if (!actionParam.MapData.GetCityDataByTerritoryGid(gridData.Id, out cityData)) return false;
if (!actionParam.MapData.GetPlayerDataByCityId(cityData.Id, out playerData)) return false;
//step #3 check city是不是player的
if (!TrainUnitActionCheckGridBelongPlayer(actionParam)) return false;
//step #4 如果没科技return
if (!TrainUnitActionCheckHasTech(actionParam)) return false;
//step #5 如果城市满员
if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6如果格子上面有单位不能生产不显示
if (TrainUnitActionCheckUnitOnGrid(actionParam)) return false;
//step #7判断钱够不够
if (!TrainUnitActionCheckMoneyEnough(actionParam)) return false;
//step #8 只处理非英雄
if (_actionId.UnitType == UnitType.Giant) return false;
//----------终于进入正式的特判环节,前面都是通用判断,下面开始进入白名单
//Part 2.1
//红魔馆妖精女仆在树林生产
if (playerData.PlayerForceId == 0 && gridData.Vegetation == Vegetation.Trees
&& (gridData.Resource == ResourceType.Animal ||
gridData.Resource == ResourceType.None)
&& _actionId.UnitType == UnitType.Warrior)
return true;
//Part 2.2
//军营产兵
if (gridData.Resource == ResourceType.Military)
{
//step #1 如果水生unit不行
if(TrainUnitActionCheckWaterUnit()) return false;
//step #2 如果是伟人return
if (_actionId.UnitType == UnitType.Giant) return false;
return true;
}
}
return false;
}
public override bool CheckShow(CommonActionParams actionParam)
{
GridData gridData;
PlayerData playerData;
CityData cityData;
//step #0 基础鲁棒性 (playerData不能为空)
if (!TrainUnitActionCheckBaseData(actionParam)) return false;
//Part1 如果是城市产兵
if (actionParam.MainObjectType == MainObjectType.City)
{
//step #1 city产兵的特殊鲁棒性
if (actionParam.CityData == null) return false;
//step #2 check player操作的city 是不是自己的city,存储gridData
if (!TrainUnitActionCheckCityBelongPlayer(actionParam)) return false;
//step #3 赋值gridData(city的位置)
if (!actionParam.MapData.GetGridDataByCityId(actionParam.CityData.Id, out gridData)) return false;
//step #4如果没科技return
if(!TrainUnitActionCheckHasTech(actionParam)) return false;
//step #5确认是否是水生unit
if (TrainUnitActionCheckWaterUnit()) return false;
//step #6 确认城市是否满员
//if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #7 如果城市上面有单位,不能生产,不显示
if (TrainUnitActionCheckUnitOnCity(actionParam)) return false;
//step #8 判断钱够不够
//if (!TrainUnitActionCheckMoneyEnough(actionParam)) return false;
//step #9 只处理非英雄
if (_actionId.UnitType == UnitType.Giant) return false;
return true;
}
//Part2 如果是grid产兵
if (actionParam.MainObjectType == MainObjectType.Grid)
{
//step #1 确认基础鲁棒性
if (actionParam.GridData == null) return false;
gridData = actionParam.GridData;
//step #2 进行基础赋值
if (!actionParam.MapData.GetCityDataByTerritoryGid(gridData.Id, out cityData)) return false;
if (!actionParam.MapData.GetPlayerDataByCityId(cityData.Id, out playerData)) return false;
//step #3 check city是不是player的
if (!TrainUnitActionCheckGridBelongPlayer(actionParam)) return false;
//step #4 如果没科技return
if (!TrainUnitActionCheckHasTech(actionParam)) return false;
//step #5 如果城市满员
//if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6如果格子上面有单位不能生产不显示
if (TrainUnitActionCheckUnitOnGrid(actionParam)) return false;
//step #7判断钱够不够
//if(!TrainUnitActionCheckMoneyEnough(actionParam)) return false
//step #8 只处理非英雄
if (_actionId.UnitType == UnitType.Giant) return false;
//----------终于进入正式的特判环节,前面都是通用判断,下面开始进入白名单
//Part 2.1
//红魔馆妖精女仆在树林生产
if (playerData.PlayerForceId == 0 && gridData.Vegetation == Vegetation.Trees
&& (gridData.Resource == ResourceType.Animal ||
gridData.Resource == ResourceType.None)
&& _actionId.UnitType == UnitType.Warrior)
return true;
//Part 2.2
//军营产兵
if (gridData.Resource == ResourceType.Military)
{
//step #1 如果水生unit不行
if(TrainUnitActionCheckWaterUnit()) return false;
//step #2 如果是伟人return
if (_actionId.UnitType == UnitType.Giant) return false;
return true;
}
}
return false;
}
public override bool ExecuteViewBefore(CommonActionParams actionParams)
{
return false;
}
public override bool ExecuteViewAfter(CommonActionParams actionParams)
{
return false;
}
}
public class TrainUnitActionTrainGiant : TrainUnitAction
{
private GridData _finalGrid;
private CityData _finalCity;
private UnitData _newUnit;
public TrainUnitActionTrainGiant(CommonActionId id) : base(id){}
//确认英雄的冷却cd
private bool CheckGiantHasColdTime(CommonActionParams actionParam)
{
if (actionParam.PlayerData == null) return true;
if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(UnitType.Giant, _actionId.GiantType, 0,
out var info)) return true;
if (actionParam.PlayerData.giantPenalty[(uint)info.ChessType] > 0) return true;
return false;
}
//判断场上的giant是否已经有一个了(会处理芙兰这种quartet的情况)
private bool CheckGiantHasOne(CommonActionParams actionParam)
{
//获取unitTypeInfo,level=0时的信息
if(!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(_actionId.UnitType, _actionId.GiantType,_actionId.UnitLevel,
out var Lv0Info))
return true;
//确认玩家最新的hero的unitLevel获得level=realLv的info
var realLv = Table.Instance.GiantExpToLevel(actionParam.PlayerData.giantExp[(uint)Lv0Info.ChessType]);
if (!TrainUnitActionCheckHasTech(actionParam))
realLv = 0;
if(!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(_actionId.UnitType, _actionId.GiantType,(uint)realLv,
out var info))
return true;
//如果有Unique且全场已经有1个了
if (info.Skills.Contains(SkillType.UNIQUE))
{
if (Main.PlayerLogic.GetMapUnitTypeCount(actionParam.MapData, _actionId.UnitType, _actionId.GiantType) > 0) return true;
}
//如果有DUO且全场已经有2个了
if (info.Skills.Contains(SkillType.DUO))
{
if(Main.PlayerLogic.GetMapUnitTypeCount(actionParam.MapData,_actionId.UnitType, _actionId.GiantType) > 1)
return true;
}
//如果有TRIO且全场已经有3个了
if (info.Skills.Contains(SkillType.TRIO))
{
if(Main.PlayerLogic.GetMapUnitTypeCount(actionParam.MapData,_actionId.UnitType, _actionId.GiantType) > 2)
return true;
}
//如果有QUARTER且全场已经有4个了
if (info.Skills.Contains(SkillType.QUARTET))
{
if(Main.PlayerLogic.GetMapUnitTypeCount(actionParam.MapData,_actionId.UnitType, _actionId.GiantType) > 3)
return true;
}
return false;
}
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
//step #0 鲁棒性检查
if (!CheckCan(actionParams)) return false;
//step #1 获得准确的gridData和对应的cityData
//step #1 part1 如果是city产英雄
if (actionParams.MainObjectType == MainObjectType.City)
{
_finalCity = actionParams.CityData;
//从city处获得准确的gridData
if (!actionParams.MapData.GetGridDataByCityId(actionParams.CityData.Id, out _finalGrid))
return false;
}
//step #1 part2 否则如果是grid产英雄
if (actionParams.MainObjectType == MainObjectType.Grid)
{
//从actionParams获得准确的gridData
_finalGrid = actionParams.GridData;
if (actionParams.CityData != null)
_finalCity = actionParams.CityData;
else
actionParams.MapData.GetCityDataByTerritoryGid(_finalGrid.Id, out _finalCity);
}
if (_finalGrid == null) return false;
//step #2 确定giant的真实level
var realLv = actionParams.MapData.GetGiantRealLv(_actionId.GiantType,actionParams.PlayerData);
//如果还没拥有科技那只能是lv0
if (!TrainUnitActionCheckHasTech(actionParams)) realLv = 0;
//step #3 生产新单位
_newUnit = actionParams.MapData.AddUnitData(_finalGrid.Id,_finalCity.Id,_actionId.UnitType,_actionId.GiantType,realLv);
//step #4 更新新单位周围的视野
Main.PlayerLogic.UpdateSight(actionParams.MapData,actionParams.PlayerData,actionParams.MapData.GridMap.GetAroundGridIdList(_newUnit.GetSightRange(),_finalGrid));
return true;
}
public override bool CheckCan(CommonActionParams actionParam)
{
//step #0 基础鲁棒性 (playerData不能为空 不是英雄则直接排除
if(_actionId.UnitType != UnitType.Giant) return false;
if (!TrainUnitActionCheckBaseData(actionParam)) return false;
GridData gridData;
PlayerData playerData;
CityData cityData;
//Part1 如果是城市产英雄
if (actionParam.MainObjectType == MainObjectType.City)
{
//step #1 city产兵的特殊鲁棒性
if (actionParam.CityData == null) return false;
//step #2 check player操作的city 是不是自己的city,存储gridData
if (!TrainUnitActionCheckCityBelongPlayer(actionParam)) return false;
//step #3 赋值gridData(city的位置)
if (!actionParam.MapData.GetGridDataByCityId(actionParam.CityData.Id, out gridData)) return false;
//step #4如果没科技,且不是首发英雄return
if(!TrainUnitActionCheckHasTech(actionParam) && actionParam.PlayerData.FirstHero != _actionId.GiantType) return false;
//step #5 确认城市是否满员
if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6 如果城市上面有单位,不能生产,不显示
if (TrainUnitActionCheckUnitOnCity(actionParam)) return false;
//step #7 如果英雄在冷却cd
if (CheckGiantHasColdTime(actionParam)) return false;
//step #8 如果英雄违反了UNIQUE或类似的技能如QUARTET
if (CheckGiantHasOne(actionParam)) return false;
return true;
}
//Part2 如果是grid产英雄
if (actionParam.MainObjectType == MainObjectType.Grid)
{
//step #1 确认基础鲁棒性
if (actionParam.GridData == null) return false;
gridData = actionParam.GridData;
//step #2 进行基础赋值
if (!actionParam.MapData.GetCityDataByTerritoryGid(gridData.Id, out cityData)) return false;
if (!actionParam.MapData.GetPlayerDataByCityId(cityData.Id, out playerData)) return false;
//step #3 check grid是不是player的
if (!TrainUnitActionCheckGridBelongPlayer(actionParam)) return false;
//step #4如果没科技,且不是首发英雄return
if(!TrainUnitActionCheckHasTech(actionParam) && actionParam.PlayerData.FirstHero != _actionId.GiantType) return false;
//step #5 如果城市满员
if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6如果格子上面有单位不能生产不显示
if (TrainUnitActionCheckUnitOnGrid(actionParam)) return false;
//step #7 如果英雄在冷却cd
if (CheckGiantHasColdTime(actionParam)) return false;
//step #8 如果英雄违反了UNIQUE或类似的技能如QUARTET
if (CheckGiantHasOne(actionParam)) return false;
if (_actionId.UnitType == UnitType.Giant
&& gridData.Resource == ResourceType.Military)
return true;
//Part 2.3
//下面全部是神像产兵
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianFlandre
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.Temple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianPatchouli
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.ForestTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianMeiling
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.MountainTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianSakuya
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.WaterTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianRemilia
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.KingTemple)
return true;
}
return false;
}
public override bool CheckShow(CommonActionParams actionParam)
{
//step #0 基础鲁棒性 (playerData不能为空 不是英雄则直接排除
if(_actionId.UnitType != UnitType.Giant) return false;
if (!TrainUnitActionCheckBaseData(actionParam)) return false;
GridData gridData;
PlayerData playerData;
CityData cityData;
//Part1 如果是城市产英雄
if (actionParam.MainObjectType == MainObjectType.City)
{
//step #1 city产兵的特殊鲁棒性
if (actionParam.CityData == null) return false;
//step #2 check player操作的city 是不是自己的city,存储gridData
if (!TrainUnitActionCheckCityBelongPlayer(actionParam)) return false;
//step #3 赋值gridData(city的位置)
if (!actionParam.MapData.GetGridDataByCityId(actionParam.CityData.Id, out gridData)) return false;
//step #4如果没科技,且不是首发英雄return
if(!TrainUnitActionCheckHasTech(actionParam) && actionParam.PlayerData.FirstHero != _actionId.GiantType) return false;
//step #5 确认城市是否满员
//if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6 如果城市上面有单位,不能生产,不显示
if (TrainUnitActionCheckUnitOnCity(actionParam)) return false;
//step #7 如果英雄在冷却cd
//if (CheckGiantHasColdTime(actionParam)) return false;
//step #8 如果英雄违反了UNIQUE或类似的技能如QUARTET
if (CheckGiantHasOne(actionParam)) return false;
return true;
}
//Part2 如果是grid产英雄
if (actionParam.MainObjectType == MainObjectType.Grid)
{
//step #1 确认基础鲁棒性
if (actionParam.GridData == null) return false;
gridData = actionParam.GridData;
//step #2 进行基础赋值
if (!actionParam.MapData.GetCityDataByTerritoryGid(gridData.Id, out cityData)) return false;
if (!actionParam.MapData.GetPlayerDataByCityId(cityData.Id, out playerData)) return false;
//step #3 check grid是不是player的
if (!TrainUnitActionCheckGridBelongPlayer(actionParam)) return false;
//step #4如果没科技,且不是首发英雄return
if(!TrainUnitActionCheckHasTech(actionParam) && actionParam.PlayerData.FirstHero != _actionId.GiantType) return false;
//step #5 如果城市满员
//if (TrainUnitActionCheckCityFullPop(actionParam)) return false;
//step #6如果格子上面有单位不能生产不显示
if (TrainUnitActionCheckUnitOnGrid(actionParam)) return false;
//step #7 如果英雄在冷却cd
//if (CheckGiantHasColdTime(actionParam)) return false;
//step #8 如果英雄违反了UNIQUE或类似的技能如QUARTET
if (CheckGiantHasOne(actionParam)) return false;
if (_actionId.UnitType == UnitType.Giant
&& gridData.Resource == ResourceType.Military)
return true;
//Part 2.3
//下面全部是神像产兵
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianFlandre
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.Temple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianPatchouli
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.ForestTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianMeiling
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.MountainTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianSakuya
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.WaterTemple)
return true;
if (_actionId.UnitType == UnitType.Giant
&& _actionId.GiantType == GiantType.EgyptianRemilia
&& playerData.PlayerForceId == 0
&& playerData.PlayerCivId == 0
&& gridData.Resource == ResourceType.KingTemple)
return true;
}
return false;
}
public override bool ExecuteViewBefore(CommonActionParams actionParams)
{
return false;
}
public override bool ExecuteViewAfter(CommonActionParams actionParams)
{
//step #0 如果不是真map 不做动画
if (Main.MapData != actionParams.MapData) return false;
//step #1 更新产兵的格子的renderMark
_finalCity.CityInfoRenderMark = true;
//step #2 增加得分,然后处理得分动画
var v1 = Table.Instance.GridToWorld(_finalGrid);
int score = GetCost() * 5;
if (actionParams.PlayerData.Id == actionParams.MapData.PlayerMap.SelfPlayerData.Id)
{
var faithPanel = GameObject.Find("UICanvas/TopBarPanel/FaithPanel/Icon").transform;
var endPos = faithPanel.position;
MapRenderer.Instance.ProjectileManager.CreateProjectile(v1,endPos,ProjectileType.Faith,ProjectileMoveType.CoinParabola,score);
}
AchievementDataManager.Instance.OnTrainUnit(actionParams.MapData, actionParams.PlayerData, actionParams.CityData, _newUnit);
return false;
}
}
}