diff --git a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity index 9e85a66b..edbfaf7a 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity +++ b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity @@ -3521,12 +3521,12 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 495423660} m_TargetAssemblyTypeName: Usermanager, Assembly-CSharp - m_MethodName: AddPlayerAbnormalCondition - m_Mode: 1 + m_MethodName: AddPlayerAbnormalCondition_parasitism + m_Mode: 3 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 + m_IntArgument: 1 m_FloatArgument: 0 m_StringArgument: m_BoolArgument: 0 @@ -5363,6 +5363,7 @@ MonoBehaviour: health: 0 shield: 0 totalCost: 0 + buffSettleList: [] buffIconList: [] buffPanle: {fileID: 365854624} buffIcon: {fileID: 610775712955856159, guid: 457a3d2dee855fa41a324600bf63e57f, type: 3} @@ -5371,6 +5372,9 @@ MonoBehaviour: drawNubmerMultiply: 0 sufferDamageMultiply: 0 stepRangeMultiply: 0 + coma: 0 + sleep: 0 + canAction: 0 --- !u!1 &497308547 GameObject: m_ObjectHideFlags: 0 diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_DownAnger.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_DownAnger.cs index 1636153d..df0fab1b 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_DownAnger.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_DownAnger.cs @@ -7,7 +7,7 @@ public class Buff_DownAnger :Buff { public override void Settle() { - base.Settle(); + } public override void UIShow(GameObject buff, string key) diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_Posion.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_Posion.cs index ab68aee4..475877ec 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_Posion.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_Posion.cs @@ -19,8 +19,9 @@ public class Buff_Posion : Buff } public void SettlePosion() { + if (value > 0) - GameManager.Instance.playerState.currentHP -= value; + GameManager.Instance.playerState.currentHP-= Usermanager .Instance .SufferDamageCalculation (value); } public void SettleEnemyPosion(EnemyNode enemyNode) { diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_UpperAnger.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_UpperAnger.cs index 93d48a37..e01e51d5 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_UpperAnger.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_UpperAnger.cs @@ -7,7 +7,7 @@ public class Buff_UpperAnger : Buff { public override void Settle() { - base.Settle(); + } public override void UIShow(GameObject buff, string key) diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs new file mode 100644 index 00000000..aa6cf402 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +public class Buff_levelSeep : Buff +{ + public override void Settle() + { + base.Settle(); + + } + public override void SettleEnemy(EnemyNode enemyNode) + { + base.Settle(); + + } + + public override void UIShow(GameObject buff, string key) + { + buff.transform.GetChild(0).GetComponent().text = "迷"; + buff.transform.GetChild(1).GetComponent().text = Usermanager.playerAbnormalCondition[key].value.ToString(); + } + public override void EnemyUIShow(GameObject buff, string key, EnemyNode enemyNode) + { + buff.transform.GetChild(0).GetComponent().text = "迷"; + buff.transform.GetChild(1).GetComponent().text = enemyNode.EnemyState.abnormalCondition[key].value.ToString(); + } + public override Buff NewBuff(int value) + { + Buff buff = new Buff_levelSeep(); + buff.value = value; + return buff; + } +} diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs.meta b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs.meta new file mode 100644 index 00000000..fcc600b9 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_levelSeep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e398e9c24f213f42b03baace116eca5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs new file mode 100644 index 00000000..20d61b97 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +public class Buff_parasitism : Buff +{ + public override void Settle() + { + Usermanager.Instance.buffSettleList.Add(AbnormalCondition.parasitism); + } + + public override void UIShow(GameObject buff, string key) + { + buff.transform.GetChild(0).GetComponent().text = "寄"; + buff.transform.GetChild(1).GetComponent().text = Usermanager.playerAbnormalCondition[key].value.ToString(); + } + + public override void SettleEnemy(EnemyNode enemyNode) + { + + base.Settle(); + + } + + public override void EnemyUIShow(GameObject buff, string key, EnemyNode enemyNode) + { + buff.transform.GetChild(0).GetComponent().text = "寄"; + buff.transform.GetChild(1).GetComponent().text = enemyNode.EnemyState.abnormalCondition[key].value.ToString(); + } + public override Buff NewBuff(int value) + { + Buff buff = new Buff_parasitism(); + buff.value = value; + return buff; + } +} diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs.meta b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs.meta new file mode 100644 index 00000000..b1c5c3b7 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Buff/Buff_parasitism.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b6d68bbf3ee2b643919f8037c3b7e3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs index 545d5a04..df75f189 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs @@ -99,7 +99,26 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag } } } - + private void banActionCardCheck() + { + if(TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.banAction) + { + cardEntity.costEnough = false; + } + else + { + cardEntity.costEnough = true; + } + if(TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.move) + { + cardEntity.costEnough = false; + } + else if(TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.banAction) + { + cardEntity.costEnough = true; + } + + } private void resetComponentPosition() { //遍历范围预览池消除影响色 @@ -144,6 +163,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag // graphicRaycaster = GameObject.Find("CardPanel").GetComponent(); costCheck(); disCardCheck(); + banActionCardCheck(); if (!cardEntity.costEnough) { return; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs index af890590..4b7833e1 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs @@ -33,7 +33,8 @@ public class TurnMaster : Singleton { none, useCard, - move + move, + banAction } public void Start() @@ -49,6 +50,8 @@ public class TurnMaster : Singleton //洗牌--抽卡 StartCoroutine(ShuffleWithLosingCards()); + //判断眩晕等能不能行动 + Usermanager.Instance.BanActionJudge(); //结算玩家buff Usermanager.Instance.PlayerTurnSettle(); //结算地块Buff @@ -98,18 +101,21 @@ public class TurnMaster : Singleton yield return new WaitForSeconds(3.0f); // 等待3秒 turn = Turn.playerTurn; } + public void EndPlayerTurn() { if(turn ==Turn.playerTurn) turn = Turn.enemyTurnBegin; - //turn = Turn.playerTurnBegin; + + //回合结束结算buff + Usermanager.Instance.BuffSettleInEndTurn(); } public void EndEnemyTurn() { EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.end; turn = Turn.playerTurnBegin; } - + //老吊写的函数 public void restoreResource(int settleTurn) { diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs index c6692606..9d4cc341 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs @@ -585,6 +585,76 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver damage = (int)(EnemyState.sufferDamageMultiply * damage); return damage; } + + //结算伤害 + public int DamageCalculation(int damage) + { + int angerUpperDamage = 0, angerDownDamage = 0; + + if (EnemyState .abnormalCondition .ContainsKey(UpperCondition.angerUpperDamage)) + { + angerUpperDamage = EnemyState.abnormalCondition[UpperCondition.angerUpperDamage].value; + } + if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.angerDownDamage)) + { + angerDownDamage = EnemyState.abnormalCondition[AbnormalCondition.angerDownDamage].value; + } + if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.weak)) + { + EnemyState.damageMultiplier = 0.75f; + } + else + { + EnemyState.damageMultiplier = 1f; + } + damage = (int)((damage + angerUpperDamage - angerDownDamage) * EnemyState.damageMultiplier); + + + return damage; + } + + //护盾计算函数 + public int ShieldCalculation(int shield) + { + int shieldValue = 0; + + if (EnemyState.abnormalCondition.ContainsKey(UpperCondition.shieldUpperValue)) + { + shieldValue += EnemyState.abnormalCondition[UpperCondition.shieldUpperValue].value; + } + if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.shieldDownValue)) + { + shieldValue -= EnemyState.abnormalCondition[AbnormalCondition.shieldDownValue].value; + } + + shield += shieldValue; + + return shield; + } + + public int StepRangeCalculation(int stepRange) + { + int addStepRange = 0; + + if (EnemyState.abnormalCondition.ContainsKey(UpperCondition.upperSpeed)) + { + addStepRange += 1; + } + if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.downSpeed)) + { + addStepRange -= 1; + } + if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.BanStep)) + { + EnemyState.stepRangeMultiplier = 0; + } + else + { + EnemyState.stepRangeMultiplier = 1f; + } + stepRange = (int)((stepRange + addStepRange) * EnemyState.stepRangeMultiplier); + return stepRange; + } #endregion } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs index 27231399..ea810d86 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs @@ -26,7 +26,7 @@ public class Player : MonoBehaviour } public void Update() { - if (Mouse.current.leftButton.wasPressedThisFrame && TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.useCard) + if (Mouse.current.leftButton.wasPressedThisFrame && TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.useCard&& TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.banAction) { if (GameManager.Instance.playerState.currentStepRange > 0) { @@ -41,17 +41,22 @@ public class Player : MonoBehaviour mapUnity.influenced = true; mapUnity.choossedMark.GetComponent().material = mapUnity.red; } - //StepPreviewInfluencedNode(GameManager.Instance.playerState.currentStepRange); + //StepPreviewInfluencedNode(GameManager.Instance.playerState.currentStepRange); + TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.move; } else { // Debug.Log(raycastHit.collider.gameObject.name); ChooseNode(); + } + + } else { Debug.Log("没有体力啦"); + } } @@ -60,6 +65,8 @@ public class Player : MonoBehaviour // StepPreviewInfluencedNode(step); CloseStepPreviewInfluencedNode();//取消格子预览 + if(TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.banAction) + TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none; //todo取消卡牌释放 } } @@ -113,7 +120,10 @@ public class Player : MonoBehaviour GameManager.Instance.playerOn.playerOn = false; GameManager.Instance.playerOn.influenced = false; } - + + //判断寄生是否生效 + Usermanager.Instance.ParasitismnRealize(GameManager.Instance.playerOn, mapNode); + mapNode.playerOn = true; GameManager.Instance.playerOn = mapNode; @@ -126,7 +136,8 @@ public class Player : MonoBehaviour } influencePreviewPool.Clear(); - + TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none; + } else { @@ -143,6 +154,7 @@ public class Player : MonoBehaviour mapUnity.influenced = false; } influencePreviewPool.Clear(); + } public void StepPreviewInfluencedNode(int step)//可移动格子预览 diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AbnormalCondition.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AbnormalCondition.cs index 8a181f71..7157c19f 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AbnormalCondition.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AbnormalCondition.cs @@ -45,7 +45,10 @@ public class AbnormalCondition : Singleton //缠绕- public const string BanStep = "22"; - //后加敌方 //火种 public const string fireSeed = "23"; + //昏睡(叠层那个) + public const string levelSleep = "24"; + //寄生 + public const string parasitism = "25"; } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/BuffDataManager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/BuffDataManager.cs index 75ef83e6..91c20b89 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/BuffDataManager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/BuffDataManager.cs @@ -6,6 +6,8 @@ public class BuffDataManager : Singleton { public Dictionary abnormalCondition = new Dictionary();//异常状态 + + private void OnEnable() { abnormalCondition.Add("4", new Buff_Posion()); @@ -21,6 +23,8 @@ public class BuffDataManager : Singleton abnormalCondition.Add("21", new Buff_DownStepRange()); abnormalCondition.Add("22", new Buff_BanStepRange()); abnormalCondition.Add("23", new Buff_FireSeed()); + abnormalCondition.Add("24", new Buff_levelSeep()); + abnormalCondition.Add("25", new Buff_parasitism()); abnormalCondition.Add("101", new Buff_UpperAnger()); abnormalCondition.Add("102", new Buff_UpperShield()); @@ -28,6 +32,6 @@ public class BuffDataManager : Singleton abnormalCondition.Add("104", new Buff_DrawCardNumber()); abnormalCondition.Add("105", new Buff_UpperStepRange()); } - + } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs index 8c18a730..5bc611fe 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs @@ -16,6 +16,8 @@ public class Usermanager : Singleton [Header ("Buff状态")] public static Dictionary playerAbnormalCondition = new Dictionary();//异常状态 + public List buffSettleList = new List();//回合结束时结算 + [Header("Buff状态UI组件")] public List buffIconList = new List(); public GameObject buffPanle; @@ -32,6 +34,10 @@ public class Usermanager : Singleton public float sufferDamageMultiply = 1; //移动乘率 public float stepRangeMultiply = 1; + //昏睡昏迷等不能行动 + public bool coma; + public bool sleep; + public bool canAction; public Usermanager(int health) { @@ -121,6 +127,48 @@ public class Usermanager : Singleton SufferPlayerAbnormalCondition(UpperCondition.upperSpeed, value, buff); RefreshPlayerBuffIcon(); } + public void AddPlayerAbnormalCondition_coma(int value) + { + Buff buff = new Buff_coma(); + SufferPlayerAbnormalCondition(AbnormalCondition.coma, value, buff); + RefreshPlayerBuffIcon(); + } + public void AddPlayerAbnormalCondition_sleep(int value) + { + Buff buff = new Buff_sleep(); + SufferPlayerAbnormalCondition(AbnormalCondition.sleep, value, buff); + RefreshPlayerBuffIcon(); + } + public void AddPlayerAbnormalCondition_levelSleep(int value) + { + Buff buff = new Buff_levelSeep(); + SufferPlayerAbnormalCondition(AbnormalCondition.levelSleep, value, buff); + if(playerAbnormalCondition [AbnormalCondition .levelSleep ].value >=10) + { + AddPlayerAbnormalCondition_coma(1); + playerAbnormalCondition[AbnormalCondition.levelSleep].value -= 10; + } + RefreshPlayerBuffIcon(); + } + public void AddPlayerAbnormalCondition_vulnerable(int value) + { + Buff buff = new Buff_Vulnerable(); + SufferPlayerAbnormalCondition(AbnormalCondition.vulnerable, value, buff); + RefreshPlayerBuffIcon(); + } + public void AddPlayerAbnormalCondition_BanStep(int value) + { + Buff buff = new Buff_BanStepRange(); + SufferPlayerAbnormalCondition(AbnormalCondition.BanStep, value, buff); + RefreshPlayerBuffIcon(); + } + + public void AddPlayerAbnormalCondition_parasitism(int value) + { + Buff buff = new Buff_parasitism(); + SufferPlayerAbnormalCondition(AbnormalCondition.parasitism, value, buff); + RefreshPlayerBuffIcon(); + } #endregion //Buff施加 @@ -151,7 +199,21 @@ public class Usermanager : Singleton } } - + //回合结束时结算buff + public void BuffSettleInEndTurn() + { + foreach (var key in buffSettleList) + { + Buff buff = playerAbnormalCondition[key]; + buff.value--; + if (buff.value <= 0) + { + playerAbnormalCondition.Remove(key); + } + } + buffSettleList.Clear(); + RefreshPlayerBuffIcon(); + } //检查移除已归零buff public void AbnormalConditionEndCheck() { @@ -186,8 +248,11 @@ public class Usermanager : Singleton } } - - + public void SufferDamage(int damage) + { + GameManager.Instance.playerState.currentHP -= SufferDamageCalculation(damage); + } + #region Buff结算函数 //计算函数 @@ -212,6 +277,8 @@ public class Usermanager : Singleton damagemultiply = 1f; } damage = (int)((damage + angerUpperDamage - angerDownDamage) * damagemultiply); + + return damage; } @@ -283,7 +350,7 @@ public class Usermanager : Singleton stepRange = (int)((stepRange + addStepRange) *stepRangeMultiply); return stepRange; } - //易伤计算函数 + //受伤计算函数 public int SufferDamageCalculation(int damage) { if (playerAbnormalCondition.ContainsKey(AbnormalCondition.vulnerable)) @@ -294,10 +361,31 @@ public class Usermanager : Singleton { sufferDamageMultiply = 1f; } - damage =(int)( damagemultiply * damage); + damage =(int)(sufferDamageMultiply * damage); + + if (damage > 0 && playerAbnormalCondition.ContainsKey(AbnormalCondition.sleep)) + { + sleep = false; + playerAbnormalCondition.Remove(AbnormalCondition.sleep); + BanActionJudge(); + RefreshPlayerBuffIcon(); + } return damage; } + //寄生实现函数 + public void ParasitismnRealize(MapUnity start,MapUnity end) + { + if (playerAbnormalCondition.ContainsKey(AbnormalCondition.parasitism)&& playerAbnormalCondition[AbnormalCondition.parasitism].value>0) + { + List path = AStarManager.Instance.FindPathWithEndNode(start, end); + foreach (var node in path ) + { + node.whoColour = MapUnity.WhoColour.enemyColour; + } + } + + } //判断函数 //易伤判断 @@ -326,7 +414,37 @@ public class Usermanager : Singleton } return firm; } + + //昏睡昏迷判断函数(不能行动) + public void BanActionJudge() + { + if (playerAbnormalCondition.ContainsKey(AbnormalCondition.coma)) + { + coma = true; + } + else + { + coma = false; + } + if (playerAbnormalCondition.ContainsKey(AbnormalCondition.sleep)) + { + sleep = true; + } + else + { + sleep = false; + } + + if(coma==true ||sleep==true ) + { + TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.banAction; + } + else + { + TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none; + } + } #endregion - + }