public override void CalculateBehaviourItem(List <BattleBehaviourItem> behaviourItems, float weight) { BattleUnit battleUnit = null; for (int i = 0; i < baseData.ownBattleTeam.battleUnits.Count; ++i) { battleUnit = baseData.ownBattleTeam.battleUnits[i]; //别晃了!他已经...他已经...走了.... if (!battleUnit.CanAction) { continue; } BattleBehaviourItem behaviourItem = BattleBehaviourItem.CreateInstance(battleUnit, BehaviourType); //计算剩余血量 float hpLost = 1f - (float)battleUnit.battleUnitAttribute.hp / battleUnit.battleUnitAttribute.maxHp; //插值计算 //规则:损失 >= 60% -> 1f // 损失 <= 20% -> 0f float recoverWeight = Mathf.Lerp(0f, 0.95f, (hpLost - 0.2f) * 2.5f) + Mathf.Lerp(0, 0.05f, (hpLost - 0.6f) / 0.4f); //距离 int distance = baseData.hostBattleUnit.mapGrid.Distance(battleUnit.mapGrid); float distanceWeight = behaviourSystem.GetDistanceWeight(distance); behaviourItem.point = EGameConstL.BattleBehaviourChipMaxPoint * recoverWeight * distanceWeight * weight; battleBehaviourItems.Add(behaviourItem); } AddToTargetList(behaviourItems); }
public override void CalculateBehaviourItem(List <BattleBehaviourItem> behaviourItems, float weight) { var items = damageRecorder.Items(true, true); while (items.MoveNext()) { BattleUnitRecordItem recordItem = items.Current; //这个家伙已经无法行动了 if (!recordItem.maker.CanAction) { continue; } var behaviourItem = BattleBehaviourItem.CreateInstance(recordItem.maker, BehaviourType); int distance = baseData.hostBattleUnit.mapGrid.Distance(recordItem.maker.mapGrid); float distanceWeight = behaviourSystem.GetDistanceWeight(distance); //判断自己是否当前目标的攻击对象 float isHisTarget = 0.75f; if (recordItem.maker.targetBattleUnit != null) { isHisTarget = recordItem.maker.targetBattleUnit.Equals(baseData.hostBattleUnit) ? 0.5f : 1f; } behaviourItem.point = recordItem.point * weight * distanceWeight * isHisTarget; battleBehaviourItems.Add(behaviourItem); } AddToTargetList(behaviourItems); }
public override void CalculateBehaviourItem(List <BattleBehaviourItem> behaviourItems, float weight) { BattleUnit battleUnit = null; for (int i = 0; i < baseData.enemyBattleTeam.battleUnits.Count; ++i) { battleUnit = baseData.enemyBattleTeam.battleUnits[i]; if (!battleUnit.CanAction) { continue; } BattleBehaviourItem item = BattleBehaviourItem.CreateInstance(battleUnit, BehaviourType); int distance = baseData.hostBattleUnit.mapGrid.Distance(battleUnit.mapGrid); float distanceWeight = behaviourSystem.GetDistanceWeight(distance); item.point = EGameConstL.BattleBehaviourChipMaxPoint * weight * distanceWeight; battleBehaviourItems.Add(item); } //调整行为分数 AddToTargetList(behaviourItems); }