diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BoundSoul.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BoundSoul.asset index 5b9a418a..a345e2a4 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BoundSoul.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BoundSoul.asset @@ -21,14 +21,14 @@ MonoBehaviour: currentMoveCoolDown: 0 shieldValue: 0 upShieldValue: 0 - maxHP: 2 - currentHP: 2 + maxHP: 22 + currentHP: 22 sufferDamageMultiply: 1 colourType: 0 maxSkillCoolDown: 3 currentSkillCoolDown: 3 damageMultiplier: 1 - damage: 8 + damage: 4 attackRange: 1 aoeRange: 0 maxNumberOfHits: 0 diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ContaminatusImmortalis.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ContaminatusImmortalis.asset index ace5972c..460a65c0 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ContaminatusImmortalis.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ContaminatusImmortalis.asset @@ -28,8 +28,8 @@ MonoBehaviour: maxSkillCoolDown: 3 currentSkillCoolDown: 3 damageMultiplier: 1 - damage: 8 - attackRange: 4 + damage: 4 + attackRange: 2 aoeRange: 2 maxNumberOfHits: 0 currentNumberOfHits: 0 diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/FailedSample.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/FailedSample.asset index f611d5ae..05484683 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/FailedSample.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/FailedSample.asset @@ -21,8 +21,8 @@ MonoBehaviour: currentMoveCoolDown: 0 shieldValue: 0 upShieldValue: 0 - maxHP: 20 - currentHP: 20 + maxHP: 40 + currentHP: 40 sufferDamageMultiply: 1 colourType: 0 maxSkillCoolDown: 3 diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Twinbee.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Twinbee.asset index 587d4627..33c5245e 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Twinbee.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Twinbee.asset @@ -21,8 +21,8 @@ MonoBehaviour: currentMoveCoolDown: 0 shieldValue: 0 upShieldValue: 0 - maxHP: 30 - currentHP: 30 + maxHP: 50 + currentHP: 50 sufferDamageMultiply: 1 colourType: 0 maxSkillCoolDown: 3 diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset index fdb0c793..c6a8e37d 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 23280c7f867c4ca468ab73909d4f7707, type: 3} m_Name: LevelState_1 m_EditorClassIdentifier: - levelStep: 1 + levelStep: 3 mapLevel: 1 currentPoint: {x: 6, y: 1} levelSaveMap: diff --git a/ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Pollutinel.prefab b/ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Pollutinel.prefab index 3cede927..4508d7ef 100644 --- a/ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Pollutinel.prefab +++ b/ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Pollutinel.prefab @@ -119,7 +119,7 @@ MonoBehaviour: m_PostInfinity: 2 m_RotationOrder: 4 enemyType: 0 - enemyScript: 0 + enemyScript: 14 lineAim: {fileID: 7509110568895175458} canLineAppre: 1 disableAttack: {fileID: 0} diff --git a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity index 96365004..2af8dbc4 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity +++ b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity @@ -16465,6 +16465,7 @@ MonoBehaviour: buffInforOnMouse: {fileID: 365854629} buffInforOnMouseInStatus: {fileID: 14209053} expectDamage: 0 + expectOnceDamage: 0 --- !u!1 &498711090 GameObject: m_ObjectHideFlags: 0 @@ -49006,15 +49007,7 @@ MonoBehaviour: generatePoint: {fileID: 514899946} lineOffSet: {x: 1.43, y: 0, z: 0} columnOffSet: {x: 0, y: 0, z: 0.86} - enemyGenerateDataList: - - enemyPrefab: {fileID: 1253231568001379261, guid: 589ff9c9fe779f141b239dcae72b5b67, - type: 3} - locationX: 3 - locationY: 3 - - enemyPrefab: {fileID: 1253231568001379261, guid: 58d538ffd37498c4b945bf5571921770, - type: 3} - locationX: 4 - locationY: 3 + enemyGenerateDataList: [] mapUnityFather: {fileID: 471426433} playerNameText: {fileID: 742474145} playerMoneyText: {fileID: 506890230} diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs index 520e6060..388e5164 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs @@ -569,10 +569,10 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag private void setCastingRangePreview() { int castRange = GameManager.Instance.playerState.castRange; - if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Green)) + /*if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Green)) { castRange++; - } + }*/ if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.tempCastRange)) { castRange += Usermanager.playerAbnormalCondition[AbnormalCondition.tempCastRange].value; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AcidRainCloud.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AcidRainCloud.cs index 4c2af1f3..4f80fe62 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AcidRainCloud.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AcidRainCloud.cs @@ -18,10 +18,6 @@ public class AcidRainCloud : Enemy enemyNode.sufferAbnormalCondition(AbnormalCondition.vulnerable, 3); } - private void Update() - { - - } private void OnEnable() { @@ -43,6 +39,32 @@ public class AcidRainCloud : Enemy } + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_ShootAndPollute: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(5, 0.2f); + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + } + } + public override void SettlePlannText(EnemyAction currentAction) + { + switch (currentAction) + { + case EnemyAction_ShootAndPollute: + //改变文本 + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(), "对全场造成" + enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString() + "点伤害,随机污染6格地块"); + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(), "造成"+ enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString() + "点伤害,使玩家手牌中随机一张牌变为消耗"); + break; + } + + } public override IEnumerator MeleeAttackAction() { MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); @@ -55,7 +77,7 @@ public class AcidRainCloud : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.nextDrawCardisDisposable, 1); //RandomTurnHandCardTempIsDisposable(1); } @@ -72,7 +94,7 @@ public class AcidRainCloud : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.nextDrawCardisDisposable, 1); //RandomTurnHandCardTempIsDisposable(1); } @@ -109,7 +131,7 @@ public class AcidRainCloud : Enemy public IEnumerator PolluteAction() { - AttackDamage(5,1); + AttackDamage(enemyNode.currentActionScript.colA, 1); RandomPollute(getNodeTools.getAllNotBlackNodes(), 6); yield return new WaitForSeconds(0.5f); } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BoundSoul.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BoundSoul.cs index 9519d761..2cdf5431 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BoundSoul.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BoundSoul.cs @@ -34,15 +34,42 @@ public class BoundSoul : Enemy } } + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + enemyNode.currentActionScript.colB = 2; + break; + } + } + + private void Update() + { + if (enemyNode!=null&&enemyNode.currentActionScript != null) + { + if (MapUnityManager.Instance.enemyNodeCount > 15) + { + enemyNode.currentActionScript.colB=3; + } + else + { + enemyNode.currentActionScript.colB =2; + } + enemyNode.enemy.SettlePlannText(enemyNode.enemy.enemyAction); + } + + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); - enemyNode.currentActionScript.SettleText(enemyNode,attackText, "造成"+attackText +"点伤害并至多移动"+stepRangeText +"个格子"); + enemyNode.currentActionScript.SettleText(enemyNode,attackText+"*"+ enemyNode.currentActionScript.colB.ToString(), "造成"+attackText +"点伤害"+ enemyNode.currentActionScript.colB+"次并至多移动" +stepRangeText +"个格子"); break; } @@ -74,7 +101,7 @@ public class BoundSoul : Enemy { damageCount++; } - AttackDamage(enemyNode.EnemyState.damage, damageCount); + AttackDamage(enemyNode.currentActionScript.colA, enemyNode.currentActionScript.colB); } } else diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Climavista.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Climavista.cs index f33572a7..040e4a42 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Climavista.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Climavista.cs @@ -13,16 +13,11 @@ public class Climavista : Enemy private void Start() { actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.shield), 0.7f); - actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.random), 0.3f); + actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.summon), 0.3f); enemyNode = GetComponent(); enemyNode.sufferAbnormalCondition(AbnormalCondition.halfDamageInBlack, 1); } - private void Update() - { - - } - private void OnEnable() { @@ -36,13 +31,37 @@ public class Climavista : Enemy case EnemyActionAction_Shield: yield return StartCoroutine(ShieldAction()); break; - case EnemyActionAction_Random: + case EnemyAction_Summon: yield return StartCoroutine(SummonAction()); break; } } + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Shield: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(15, 0.1f); + break; + } + } + public override void SettlePlannText(EnemyAction currentAction) + { + switch (currentAction) + { + case EnemyActionAction_Shield: + //改变文本 + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "对生命值最低的一个单位施加" + enemyNode.currentActionScript.colA.ToString() + "点护盾"); + break; + case EnemyAction_Summon: + enemyNode.currentActionScript.SettleText(enemyNode, "", "复制一个当前状态的酸雨云"); + break; + } + + } + public override IEnumerator ShieldAction() { int minHp = 100; @@ -55,7 +74,7 @@ public class Climavista : Enemy index = i; } } - EnemyManager.Instance.enemySpeedSortingList[index].EnemyState.shieldValue += EnemyManager.Instance.enemySpeedSortingList[index].ShieldCalculation(15); + EnemyManager.Instance.enemySpeedSortingList[index].EnemyState.shieldValue += EnemyManager.Instance.enemySpeedSortingList[index].ShieldCalculation(enemyNode.currentActionScript.colA); yield return new WaitForSeconds(0.5f); } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ContaminatusImmortalis.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ContaminatusImmortalis.cs index ee52941f..80dbfaa6 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ContaminatusImmortalis.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ContaminatusImmortalis.cs @@ -24,17 +24,30 @@ public class ContaminatusImmortalis : Enemy { enemyNode.enemyUIBar.outAttackRange.SetActive(!enemyNode.rangePool.Contains(GameManager.Instance.playerOn)); } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + case EnemyAction_ShootAndPollute: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(9, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); - enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "*4点伤害并"); + enemyNode.currentActionScript.SettleText(enemyNode, attackText+ "*4", "造成" + attackText + "*4点伤害"); break; case EnemyAction_ShootAndPollute: - enemyNode.currentActionScript.SettleText(enemyNode, "9", "污染炮击:对场地随机14格地面造成9点伤害,污染地面"); + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "对场地随机14格地面造成"+ enemyNode.currentActionScript.colA+"点伤害,污染地面"); break; } @@ -61,7 +74,7 @@ public class ContaminatusImmortalis : Enemy public IEnumerator PolluteAction() { HashSet targets = MathTool.GetRandomElements(getNodeTools.getAllNotBlackNodes(), 14); - PolluteAndDamageNodes(targets,Name.NodeColor.Black,9,1); + PolluteAndDamageNodes(targets,Name.NodeColor.Black, enemyNode.currentActionScript.colA, 1); yield return new WaitForSeconds(0.5f); } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Enemy.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Enemy.cs index 3fb0e904..f595e86d 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Enemy.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Enemy.cs @@ -46,8 +46,23 @@ public class Enemy : MonoBehaviour enemyAction = enemyNode.GetRandomAction(actionPool); Debug.Log("行动是:" + enemyAction); enemyNode.enemyUIBar.SwitchIntention(enemyAction); + ActionValRandom(); + enemyNode.enemy.SettlePlannText(enemyNode.enemy.enemyAction); + } + + public void Update() + { + if (enemyNode != null && enemyNode.currentActionScript != null) + { + enemyNode.enemy.SettlePlannText(enemyNode.enemy.enemyAction); + } + } + + public virtual void ActionValRandom() + { + } public virtual void SettlePlannText(EnemyAction currentAction) { @@ -102,6 +117,7 @@ public class Enemy : MonoBehaviour result = playCount; GameManager.Instance.playerState.money = 0; } + PlayerStatsManager.Instance.BroadCastSyncMoneyText();//同步UI return result; } @@ -153,7 +169,7 @@ public class Enemy : MonoBehaviour yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage,1); + AttackDamage(enemyNode.currentActionScript.colA, 1); } } else @@ -168,7 +184,7 @@ public class Enemy : MonoBehaviour yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); } } } @@ -184,7 +200,7 @@ public class Enemy : MonoBehaviour yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, damageCount); + AttackDamage(enemyNode.currentActionScript.colA, damageCount); } } else @@ -199,7 +215,7 @@ public class Enemy : MonoBehaviour yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, damageCount); + AttackDamage(enemyNode.currentActionScript.colA, damageCount); } } } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs index 358b60e4..dea298c2 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs @@ -33,7 +33,6 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver public List rangePool = new List();//范围预览 public List aoeRangePool = new List();//范围预览 - public string stateText=new string(""); [Header("走路参数")] diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Enemy/EnemyUIBar.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Enemy/EnemyUIBar.cs index 1f07544e..6ae47939 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Enemy/EnemyUIBar.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Enemy/EnemyUIBar.cs @@ -48,6 +48,7 @@ public class EnemyUIBar : MonoBehaviour HPBar.fillAmount = enemyNode .EnemyState .currentHP /enemyNode .EnemyState .maxHP; maxHPText.text = enemyNode.EnemyState.maxHP.ToString(); + } @@ -59,7 +60,7 @@ public class EnemyUIBar : MonoBehaviour enemyNode .currentActionScript = enemyPlanAction; enemyNode.currentActionScript.AttackRange(enemyNode); - enemyNode.enemy.SettlePlannText(enemyPlanAction); + //enemyNode.enemy.SettlePlannText(enemyNode.enemy.enemyAction); } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/FailedSample.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/FailedSample.cs index 0eabf051..1213a3e2 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/FailedSample.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/FailedSample.cs @@ -23,6 +23,16 @@ public class FailedSample: Enemy { GameManager.Instance.PlayerMove -= SettleRangeAttack; } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_AttackAndPollution: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + } + } public override void SettleRangeAttack() { switch (enemyNode.currentActionScript) @@ -39,8 +49,7 @@ public class FailedSample: Enemy { case EnemyAction_AttackAndPollution: //改变文本 - //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并随机污染附近三个地块。至多移动" + stepRangeText + "个格子。移动时污染所站地块。"); break; @@ -82,7 +91,7 @@ public class FailedSample: Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage,1); + AttackDamage(enemyNode.currentActionScript.colA, 1); RandomPollute(targets, 3); RandomPollute(new HashSet { currentNode }, 1); } @@ -99,7 +108,7 @@ public class FailedSample: Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage,1); + AttackDamage(enemyNode.currentActionScript.colA,1); RandomPollute(targets, 3); RandomPollute(new HashSet { currentNode }, 1); } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Gravitus.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Gravitus.cs index 4d4320c9..118a4520 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Gravitus.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Gravitus.cs @@ -36,18 +36,28 @@ public class Gravitus : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_AttackAndPollution: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyAction_Spell: - enemyNode.currentActionScript.SettleText(enemyNode, " ", "重力领域:在玩家周围3圈释放重力领域,持续2回合(使玩家移动消耗+1)"); + enemyNode.currentActionScript.SettleText(enemyNode, " ", "对玩家施加一层致残"); break; case EnemyAction_SpellAndShield: enemyNode.currentActionScript.SettleText(enemyNode, " ", "吸收2范围内污染地块,获得吸收数量*2的护盾"); break; case EnemyAction_AttackAndPollution: - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并污染其1范围地块"); break; @@ -85,7 +95,7 @@ public class Gravitus : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); PolluteNodes(targetSet,Name.NodeColor.Black); } } @@ -101,7 +111,7 @@ public class Gravitus : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); PolluteNodes(targetSet, Name.NodeColor.Black); } } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Leviathan.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Leviathan.cs index 3293c195..42827e5d 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Leviathan.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Leviathan.cs @@ -42,15 +42,25 @@ public class Leviathan : Enemy } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_AttackAndPollution: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.2f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyAction_AttackAndPollution: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); - enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并污染周围一格地块,至多移动" + stepRangeText + "个格子"); + enemyNode.currentActionScript.SettleText(enemyNode, attackText, "以玩家为中心1格投射,造成" + attackText + "点伤害并污染周围一格地块,至多移动" + stepRangeText + "个格子"); break; case EnemyAction_SpellAndAttack: enemyNode.currentActionScript.SettleText(enemyNode, "", "消耗所有污染地块,对全场造成伤害"); @@ -71,7 +81,7 @@ public class Leviathan : Enemy yield return StartCoroutine(AoeAction()); break; case EnemyAction_AttackAndPollution: - yield return StartCoroutine(ThrowAttackAction(1, 25, 1, aimNode)); + yield return StartCoroutine(ThrowAttackAction(1, enemyNode.currentActionScript.colA, 1, aimNode)); break; case EnemyAction_Spell: yield return StartCoroutine(HealAction()); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/LivingArmor.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/LivingArmor.cs index ed8cdf17..d1aef345 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/LivingArmor.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/LivingArmor.cs @@ -15,7 +15,7 @@ public class LivingArmor : Enemy enemyNode = GetComponent(); enemyNode.sufferAbnormalCondition(AbnormalCondition.shedding, 1); enemyNode.sufferAbnormalCondition(AbnormalCondition.Buff_LivingArmor, 1); - actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.spell), 1.0f); + actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.pollution), 1.0f); GameManager.Instance.PlayerMove += SettleRangeAttack; } @@ -27,7 +27,7 @@ public class LivingArmor : Enemy { switch (enemyNode.currentActionScript) { - case EnemyAction_Spell: + case EnemyAction_Pollution: enemyNode.enemyUIBar.outAttackRange.SetActive(!enemyNode.rangePool.Contains(GameManager.Instance.playerOn)); break; } @@ -37,11 +37,30 @@ public class LivingArmor : Enemy switch (currentAction) { case EnemyAction_Spell: - enemyNode.currentActionScript.SettleText(enemyNode, " ", "附身:获得等于活化铠甲生命值加值,获得脱落被动;脱落:被攻击时对周围随机产生一格污染"); + enemyNode.currentActionScript.SettleText(enemyNode, " ", "附身旁边的怪物"); + break; + case EnemyAction_Pollution: + enemyNode.currentActionScript.SettleText(enemyNode, " ", "脚下+随机污染周围四格地块"); break; } } + private void Update() + { + + if (canPossession()) + { + enemyNode.currentActionScript = new EnemyAction_Spell(); + } + else + { + enemyNode.currentActionScript = new EnemyAction_Pollution(); + } + if (enemyNode != null && enemyNode.currentActionScript != null) + { + enemyNode.enemy.SettlePlannText(enemyNode.currentActionScript); + } + } public override IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走 { Debug.Log("真正行动是:" + enemyAction); @@ -49,8 +68,8 @@ public class LivingArmor : Enemy { switch (enemyAction) { - case EnemyAction_Spell: - yield return StartCoroutine(MeleeAttackAction()); + case EnemyAction_Pollution: + yield return StartCoroutine(PollutionAction()); break; } } @@ -79,7 +98,27 @@ public class LivingArmor : Enemy return isSuccessful; } - public override IEnumerator MeleeAttackAction() + + public bool canPossession() + { + bool isSuccessful = false; + MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); + HashSet targets = new HashSet { currentNode }; + getNodeTools.getCircleNode(targets, 1); + targets.Remove(currentNode); + foreach (MapUnity target in targets) + { + if (Name.NodeColor.EnemyColor.Contains(target.whoColour) && target.enemyNode != null && target.enemyNode.enemyType == EnemyNode.EnemyType.enemy) + { + Debug.Log("canPossession成功"); + isSuccessful = true; + return isSuccessful; + } + } + return isSuccessful; + + } + public IEnumerator PollutionAction() { MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); HashSet playerNode = new HashSet { GameManager.Instance.playerOn }; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pharmacist.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pharmacist.cs index bc3ff748..779a9682 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pharmacist.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pharmacist.cs @@ -8,7 +8,6 @@ public class Pharmacist : Enemy { - public MapUnity aimMapunity=new MapUnity(); @@ -41,21 +40,35 @@ public class Pharmacist : Enemy } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_ShootAndPollute: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + case EnemyAction_ShieldAndPollution: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(8, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { + Debug.Log("currentAction是:" + currentAction); switch (currentAction) { case EnemyAction_ShootAndPollute: Debug.Log("技能文本1"); //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并将伤害作用范围内变为污染"); break; case EnemyAction_ShieldAndPollution: Debug.Log("技能文本2"); //改变文本 - enemyNode.currentActionScript.SettleText(enemyNode, "8", "使生命最低的单位获得8点护盾,并将其周围7格变为污染"); + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "使生命最低的单位获得"+ enemyNode.currentActionScript.colA+"点护盾,并将其周围7格变为污染"); break; } @@ -64,21 +77,6 @@ public class Pharmacist : Enemy { RewardManager.Instance.AddRewardTips(RewardManager.RewardType.potion, 1.ToString()); } - public override void ChooseAction() - { - aimMapunity = GameManager.Instance.playerOn; - enemyAction = new EnemyAction_Nothing(); - Debug.Log("actionPool大小" + actionPool.Count()); - if (enemyNode == null) - { - Debug.Log("enemyNode大小"); - } - enemyAction = enemyNode.GetRandomAction(actionPool); - Debug.Log("行动是:" + enemyAction); - enemyNode.enemyUIBar.SwitchIntention(enemyAction); - - - } public override IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走 { @@ -138,9 +136,9 @@ public class Pharmacist : Enemy public override IEnumerator MeleeAttackAction() { MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); - HashSet targets = new HashSet { aimMapunity }; + HashSet targets = new HashSet { aimNode }; getNodeTools.getCircleNode(targets, 1); - if (getNodeTools.canRemoteAttackAboutTwoNode(currentNode, aimMapunity, enemyNode.EnemyState.attackRange)) + if (getNodeTools.canRemoteAttackAboutTwoNode(currentNode, aimNode, enemyNode.EnemyState.attackRange)) { if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm)) { diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pollutinel.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pollutinel.cs index 98794248..488743f3 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pollutinel.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Pollutinel.cs @@ -20,6 +20,22 @@ public class Pollutinel : Enemy { GameManager.Instance.PlayerMove -= SettleRangeAttack; } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_DeBuff: + enemyNode.currentActionScript.colA=1; + break; + case EnemyAction_Spell: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage,0.1f); + break; + case EnemyActionAction_Shield: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(11, 0.1f); + break; + } + } public override void SettleRangeAttack() { switch (enemyNode.currentActionScript) @@ -41,13 +57,13 @@ public class Pollutinel : Enemy switch (currentAction) { case EnemyActionAction_DeBuff: - enemyNode.currentActionScript.SettleText(enemyNode, "", "展开2范围领域,使友方单位收到伤害-25%,可叠加。持续2回合"); + enemyNode.currentActionScript.SettleText(enemyNode, "", "对玩家施加一层虚弱"); break; case EnemyAction_Spell: - enemyNode.currentActionScript.SettleText(enemyNode, "", "和玩家之间连线,回合开始时对玩家造成8点伤害,污染其周围1范围地块超出4格范围连线断开,对双方造成7点伤害"); + enemyNode.currentActionScript.SettleText(enemyNode, "", "开启监视,对踏入自身2格范围内的敌人造成" + enemyNode.currentActionScript.colA + "点伤害"); break; case EnemyActionAction_Shield: - enemyNode.currentActionScript.SettleText(enemyNode,"10", "使全体友方获得10~13点护盾"); + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(), "使全体友方获得" + enemyNode.currentActionScript.colA + "点护盾"); break; } @@ -64,7 +80,7 @@ public class Pollutinel : Enemy yield return StartCoroutine(SurveillanceAction()); break; case EnemyActionAction_Shield: - yield return StartCoroutine(ShieldAction(12)); + yield return StartCoroutine(ShieldAction(enemyNode.currentActionScript.colA)); break; } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PollutionSpreader.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PollutionSpreader.cs index a3ad5d8c..dd4d3044 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PollutionSpreader.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PollutionSpreader.cs @@ -23,6 +23,47 @@ public class PollutionSpreader : Enemy { GameManager.Instance.PlayerMove -= SettleRangeAttack; } + + private void Update() + { + if (enemyNode != null && enemyNode.currentActionScript != null) + { + MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); + if (currentNode.whoColour == Name.NodeColor.Black) + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_SpellAndAttack: + enemyNode.currentActionScript.colA = 3; + break; + case EnemyAction_Pollution: + enemyNode.currentActionScript.colA = 3; + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = 5; + enemyNode.currentActionScript.colB = 3; + break; + } + } + else + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_SpellAndAttack: + enemyNode.currentActionScript.colA = 2; + break; + case EnemyAction_Pollution: + enemyNode.currentActionScript.colA = 2; + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = 4; + enemyNode.currentActionScript.colB = 2; + break; + } + } + enemyNode.enemy.SettlePlannText(enemyNode.currentActionScript); + } + } public override void SettleRangeAttack() { switch (enemyNode.currentActionScript) @@ -38,22 +79,38 @@ public class PollutionSpreader : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_SpellAndAttack: + enemyNode.currentActionScript.colA = 2; + break; + case EnemyAction_Pollution: + enemyNode.currentActionScript.colA = 2; + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = 4; + enemyNode.currentActionScript.colB = 2; + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); - string strongAttackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage+1).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); - enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "*2点伤害;强化:造成" + strongAttackText + "*2点伤害并至多移动"); + enemyNode.currentActionScript.SettleText(enemyNode, attackText+"*"+ enemyNode.currentActionScript.colB.ToString(), "造成" + attackText + "*"+ enemyNode.currentActionScript.colB.ToString()+"点伤害"); break; case EnemyAction_Pollution: - enemyNode.currentActionScript.SettleText(enemyNode, "", "散播:随机选择2格污染地块使其扩散1范围;强化:(3格)"); + enemyNode.currentActionScript.SettleText(enemyNode, "", "散播:随机选择"+ enemyNode.currentActionScript.colA.ToString()+"格污染地块使其扩散1范围"); break; case EnemyAction_SpellAndAttack: - enemyNode.currentActionScript.SettleText(enemyNode, "", "瞄准玩家周围2范围,造成当前污染地块数量的伤害;强化:(3范围)"); + enemyNode.currentActionScript.SettleText(enemyNode, "", "瞄准玩家周围"+ enemyNode.currentActionScript.colA.ToString()+"范围,造成当前污染地块数量的伤害"); break; } @@ -94,7 +151,7 @@ public class PollutionSpreader : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(damage, count); + AttackDamage(enemyNode.currentActionScript.colA, enemyNode.currentActionScript.colB); } } else diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PrismReflector.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PrismReflector.cs index 5d591dbf..c82bfa64 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PrismReflector.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/PrismReflector.cs @@ -34,12 +34,22 @@ public class PrismReflector : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_ShieldAndPollution: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(10, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyAction_ShieldAndPollution: - enemyNode.currentActionScript.SettleText(enemyNode, "10", "对生命值最低的单位施加10点护盾并随机污染三格地块"); + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "对生命值最低的单位施加"+ enemyNode.currentActionScript.colA + "点护盾并随机污染三格地块"); break; case EnemyAction_Spell: enemyNode.currentActionScript.SettleText(enemyNode, "", "吸收前方1范围的玩家颜色地块"); @@ -84,7 +94,7 @@ public class PrismReflector : Enemy index = i; } } - EnemyManager.Instance.enemySpeedSortingList[index].EnemyState.shieldValue += EnemyManager.Instance.enemySpeedSortingList[index].ShieldCalculation(10); + EnemyManager.Instance.enemySpeedSortingList[index].EnemyState.shieldValue += EnemyManager.Instance.enemySpeedSortingList[index].ShieldCalculation(enemyNode.currentActionScript.colA); HashSet targets = getNodeTools.getAllNotBlackNodes(); RandomPollute(targets, 3); yield return new WaitForSeconds(0.5f); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/RatWarrior.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/RatWarrior.cs index fc6ce3ac..d0d8019b 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/RatWarrior.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/RatWarrior.cs @@ -35,13 +35,23 @@ public class RatWarrior : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage + (int)enemyNode.EnemyState.currentHP / 5).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA + (int)enemyNode.EnemyState.currentHP / 5).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并至多移动" + stepRangeText + "个格子。生命越低造成的伤害越低"); break; @@ -79,7 +89,7 @@ public class RatWarrior : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage+(int)enemyNode.EnemyState.currentHP/5, 1); + AttackDamage(enemyNode.currentActionScript.colA + (int)enemyNode.EnemyState.currentHP/5, 1); RandomPollute(playerNode, 1); } } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ReconnaissanceBee.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ReconnaissanceBee.cs index ed3a09f0..45e4b0f0 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ReconnaissanceBee.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ReconnaissanceBee.cs @@ -34,15 +34,26 @@ public class ReconnaissanceBee : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.2f); + enemyNode.currentActionScript.colB = 2; + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); - enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "*2点伤害"); + enemyNode.currentActionScript.SettleText(enemyNode, attackText+"*"+ enemyNode.currentActionScript.colB.ToString(), "造成" + attackText + "*2点伤害"); break; case EnemyAction_ShootAndPollute: //改变文本 @@ -77,7 +88,7 @@ public class ReconnaissanceBee : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 2); + AttackDamage(enemyNode.currentActionScript.colA, 2); if (currentNode.whoColour.Equals(Name.NodeColor.Black)) { Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.disable,1); @@ -96,7 +107,7 @@ public class ReconnaissanceBee : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 2); + AttackDamage(enemyNode.currentActionScript.colA, 2); if (currentNode.whoColour.Equals(Name.NodeColor.Black)) { Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.disable,1); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SoulMaker.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SoulMaker.cs index a4383719..a69b1c17 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SoulMaker.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SoulMaker.cs @@ -38,6 +38,16 @@ public class SoulMaker : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_Spell: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(10, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) @@ -50,7 +60,7 @@ public class SoulMaker : Enemy case EnemyAction_Spell: Debug.Log("技能文本2"); //改变文本 - enemyNode.currentActionScript.SettleText(enemyNode, "10", "全体敌人回复10点生命"); + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "全体敌人回复"+ enemyNode.currentActionScript.colA+"点生命"); break; } @@ -62,7 +72,7 @@ public class SoulMaker : Enemy switch (enemyAction) { case EnemyAction_Summon: - yield return StartCoroutine(MeleeAttackAction());//召唤 + yield return StartCoroutine(SummonAction());//召唤 break; case EnemyAction_Spell: yield return StartCoroutine(HeallAction());//回血 @@ -82,7 +92,7 @@ public class SoulMaker : Enemy yield return new WaitForSeconds(0.5f); for (int i = 0; i < EnemyManager.Instance.enemySpeedSortingList.Count; i++) { - EnemyManager.Instance.enemySpeedSortingList[i].enemy.RecoverHp(10); + EnemyManager.Instance.enemySpeedSortingList[i].enemy.RecoverHp(enemyNode.currentActionScript.colA); isSpeedUp = false; } @@ -98,7 +108,7 @@ public class SoulMaker : Enemy yield return new WaitForSeconds(0.5f); for (int i = 0; i < EnemyManager.Instance.enemySpeedSortingList.Count; i++) { - EnemyManager.Instance.enemySpeedSortingList[i].enemy.RecoverHp(10); + EnemyManager.Instance.enemySpeedSortingList[i].enemy.RecoverHp(enemyNode.currentActionScript.colA); isSpeedUp = false; } @@ -106,7 +116,7 @@ public class SoulMaker : Enemy } } - public override IEnumerator MeleeAttackAction() + public IEnumerator SummonAction() { List enemyPrefabList = EnemyPool.getEnemyPrefab(enemyList); MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Thief.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Thief.cs index 56047fd9..562e1bcf 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Thief.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Thief.cs @@ -17,7 +17,7 @@ public class Thief : Enemy enemyNode = GetComponent(); enemyNode.sufferAbnormalCondition(AbnormalCondition.Buff_Thief, 1); actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.attack), 0.7f); - actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.shootAndPollute), 0.3f); + actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.spell), 0.3f); //actionPool.Add(EnemyPlanUIManager.Instance.NewAction(EnemyPlanUIFunction.sleep), 0.4f); GameManager.Instance.PlayerMove += SettleRangeAttack; } @@ -36,8 +36,58 @@ public class Thief : Enemy case EnemyAction_ShootAndPollute: enemyNode.enemyUIBar.outAttackRange.SetActive(!enemyNode.rangePool.Contains(GameManager.Instance.playerOn)); break; + case EnemyAction_Nothing: + enemyNode.enemyUIBar.outAttackRange.SetActive(false); + break; + } + } + + private void Update() + { + if (enemyNode != null && enemyNode.currentActionScript != null) + { + if (aliveCount >= 3) + { + enemyNode.currentActionScript = EnemyPlanUIManager.enemyPlanUIIconDictionary[EnemyPlanUIFunction.nothing].NewAction(); + enemyAction = EnemyPlanUIManager.enemyPlanUIIconDictionary[EnemyPlanUIFunction.nothing].NewAction(); + enemyNode.enemyUIBar.SwitchIntention(enemyAction); + enemyNode.enemyUIBar.outAttackRange.SetActive(false); + } + SettlePlannText(enemyNode.currentActionScript); + } + + } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyAction_Spell: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(12, 0.1f); + enemyNode.currentActionScript.colB = MathTool.RandomTarget(22, 0.1f); + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; } } + public override void SettlePlannText(EnemyAction currentAction) + { + switch (currentAction) + { + case EnemyAction_Spell: + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "瞬移至玩家周围随机一格,造成"+ enemyNode.currentActionScript.colA+"点伤害,偷取"+ enemyNode.currentActionScript.colB+"金币"); + break; + case EnemyActionAction_Attack: + enemyNode.currentActionScript.SettleText(enemyNode, enemyNode.currentActionScript.colA.ToString(), "造成" + enemyNode.currentActionScript.colA + "点伤害"); + break; + case EnemyAction_Nothing: + enemyNode.currentActionScript.SettleText(enemyNode, " ", "回合开始时撤离战场"); + break; + + } + + } public override void enemyTurnEnd() { aliveCount++; @@ -61,10 +111,10 @@ public class Thief : Enemy public override void enemyTurnBegin() { - if (aliveCount == 3) + /*if (aliveCount >= 3) { enemyNode.RunAway(); - } + }*/ } public override IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走 { @@ -74,13 +124,16 @@ public class Thief : Enemy case EnemyActionAction_Attack: yield return StartCoroutine(MeleeAttackAction()); break; - case EnemyAction_ShootAndPollute: - yield return StartCoroutine(TeleportAction(enemyNode.EnemyState.damage,1,20)); + case EnemyAction_Spell: + yield return StartCoroutine(TeleportAction(enemyNode.currentActionScript.colA, 1, enemyNode.currentActionScript.colB)); + break; + case EnemyAction_Nothing: + yield return StartCoroutine(RunAwayAction()); break; } - } + public override IEnumerator MeleeAttackAction() { MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY); @@ -93,7 +146,7 @@ public class Thief : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); if (currentNode.whoColour == Name.NodeColor.Black) { stolenForgingPointCount += stealForgingPoint(4); @@ -112,7 +165,7 @@ public class Thief : Enemy yield return StartCoroutine(enemyNode.MeleeAttackAim()); // enemyNode.anim.SetTrigger("MeleeAttack"); // yield return new WaitForSeconds(0.5f); - AttackDamage(enemyNode.EnemyState.damage, 1); + AttackDamage(enemyNode.currentActionScript.colA, 1); if (currentNode.whoColour == Name.NodeColor.Black) { stolenForgingPointCount += stealForgingPoint(4); @@ -126,11 +179,22 @@ public class Thief : Enemy { HashSet targets = new HashSet { GameManager.Instance.playerOn }; - getNodeTools.getCircleNode(targets, 1); - HashSet targetNode = MathTool.GetRandomElements(targets, 1); - yield return StartCoroutine(moveOneStep(targetNode.ElementAt(0))); - AttackDamage(damage, damageCount); - stolenMoney += stealMoney(15); + getNodeTools.getCircleNodeForEnemy(targets, 1); + targets.Remove(GameManager.Instance.playerOn); + if (targets.Count > 0) + { + HashSet targetNode = MathTool.GetRandomElements(targets, 1); + yield return StartCoroutine(moveOneStep(targetNode.ElementAt(0))); + AttackDamage(damage, damageCount); + stolenMoney += stealMoney(stealMoneyCount); + } + yield return null; + } + + public IEnumerator RunAwayAction() + { + EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing; + enemyNode.RunAway(); yield return null; } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Twinbee.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Twinbee.cs index 0ae9f084..b7514a17 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Twinbee.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Twinbee.cs @@ -34,18 +34,31 @@ public class Twinbee : Enemy break; } } + + public override void ActionValRandom() + { + switch (enemyNode.currentActionScript) + { + case EnemyActionAction_Attack: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(enemyNode.EnemyState.damage, 0.1f); + break; + case EnemyActionAction_Aoe: + enemyNode.currentActionScript.colA = MathTool.RandomTarget(24, 0.1f); + break; + } + } public override void SettlePlannText(EnemyAction currentAction) { switch (currentAction) { case EnemyActionAction_Attack: //改变文本 - string attackText = enemyNode.DamageCalculation(enemyNode.EnemyState.damage).ToString(); + string attackText = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); string stepRangeText = enemyNode.getStepRange().ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackText, "造成" + attackText + "点伤害并至多移动" + stepRangeText + "个格子"); break; case EnemyActionAction_Aoe: - string attackTextAoe = enemyNode.DamageCalculation(24).ToString(); + string attackTextAoe = enemyNode.DamageCalculation(enemyNode.currentActionScript.colA).ToString(); enemyNode.currentActionScript.SettleText(enemyNode, attackTextAoe, "以玩家为中心2格投射,造成" + attackTextAoe + "点伤害"); break; @@ -80,7 +93,7 @@ public class Twinbee : Enemy yield return StartCoroutine(MeleeAttackAction()); break; case EnemyActionAction_Aoe: - yield return StartCoroutine(ThrowAttackAction(2,24,1,aimNode)); + yield return StartCoroutine(ThrowAttackAction(2, enemyNode.currentActionScript.colA, 1,aimNode)); break; } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs index 1f7a4572..78b15783 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs @@ -8,6 +8,8 @@ public class EnemyAction { public Sprite sprite; public bool isAiming =true ;//是否需要连线 + public int colA; + public int colB; public virtual void SettleText(EnemyNode enemyNode ,string damageValue,string planInforText) { Debug.Log("基本"); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs index 2e4261ca..f27d45e4 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs @@ -3,10 +3,12 @@ using System.Buffers.Text; using System.Collections; using System.Collections.Generic; using System.Linq; +using Unity.Mathematics; using UnityEngine; public class MathTool { + private static readonly System.Random random = new System.Random(); // Start is called before the first frame update public static List GetRandomNumbers(int max, int count) { @@ -344,6 +346,14 @@ public class MathTool return result; } + + public static int RandomTarget(int target, float percentage) + { + float deviation = target * percentage; + // 生成偏差值,范围在 -deviation 到 +deviation 之间 + double offset = (random.NextDouble() * 2 - 1) * deviation; + return (int)Math.Round(target + offset); + } } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/EnemyPlanUIManager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/EnemyPlanUIManager.cs index dedc9a65..e6a9c6b8 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/EnemyPlanUIManager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/EnemyPlanUIManager.cs @@ -5,7 +5,7 @@ using UnityEngine.UI; public class EnemyPlanUIManager : Singleton { - public static Dictionary enemyPlanUIIconDictionary = new Dictionary();//异常状态 + public static Dictionary enemyPlanUIIconDictionary = new Dictionary(); [Header("意图图标")] public Sprite attackIcon; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs index d081d7ef..5efafa07 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/manager/Usermanager.cs @@ -318,6 +318,10 @@ public class Usermanager : Singleton AbnormalConditionEndCheck(); RefreshPlayerBuffIcon(); } + if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Blue)) + { + Usermanager.Instance.Shield += Usermanager.Instance.ShieldCalculation(5); + } } public void PlayerTurnBeginSettle() @@ -458,11 +462,11 @@ public class Usermanager : Singleton public void SufferDamage(int damage,EnemyNode enemyNode) { - if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Blue)) +/* if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Blue)) { damage -= 2; MathTool.keepNature(ref damage); - } + }*/ if (enemyNode != null) { thornCal(enemyNode); @@ -472,6 +476,7 @@ public class Usermanager : Singleton { enemyNode.sufferAbnormalCondition(AbnormalCondition.fireSeed, 2); } + MathTool.keepNature(ref damage); SufferDamageCalculation(damage,enemyNode); checkDeath(); @@ -586,6 +591,10 @@ public class Usermanager : Singleton { int addStepRange =0; + if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Yellow)) + { + addStepRange++; + } if (playerAbnormalCondition.ContainsKey(AbnormalCondition.upSpeed)) { addStepRange += 1; @@ -606,9 +615,9 @@ public class Usermanager : Singleton { stepRangeMultiply = 1f; } - stepRange = (int)((stepRange + addStepRange) *stepRangeMultiply); - MathTool.keepNature(ref stepRange); - return stepRange; + int trueStepRange = (int)((stepRange + addStepRange) *stepRangeMultiply); + MathTool.keepNature(ref trueStepRange); + return trueStepRange; } //受伤计算函数 public int SufferTrueDamageCalculation(int damage)