package fight
import "go_dreamfactory/modules/battle/fight/core"
///
/// 从roles里,过滤出符合设定的对象List
///
/// 筛选前List
/// 当前行动role
/// afterSkill里设置的From
///
func FightTargetFrom(roles []core.IFightRole, actionRole core.IFightRole, from int32) []core.IFightRole {
switch from {
case int32(core.AferSkillFromType_All):
// 选所有
return roles
case int32(core.AferSkillFromType_Friend):
// 只选友方
result := make([]core.IFightRole, 0)
// roles.FindAll(role => role.Data.Side == actionRole.Data.Side);
for _, v := range roles {
if v.GetData().Side == actionRole.GetData().Side {
result = append(result, v)
}
}
return result
case int32(core.AferSkillFromType_Enemy):
// 只选敌方
// return roles.FindAll(role => role.Data.Side != actionRole.Data.Side);
// 只选友方
result := make([]core.IFightRole, 0)
// roles.FindAll(role => role.Data.Side == actionRole.Data.Side);
for _, v := range roles {
if v.GetData().Side != actionRole.GetData().Side {
result = append(result, v)
}
}
return result
case int32(core.AferSkillFromType_Self):
// 只选自己
return []core.IFightRole{actionRole}
case int32(core.AferSkillFromType_PlayerChoose):
// 只选skillAtk里选择的目标
// return roles.FindAll(role => actionRole.Data.LastChooseTarget.Contains(role.Data.Rid));
result := make([]core.IFightRole, 0)
// roles.FindAll(role => role.Data.Side == actionRole.Data.Side);
for _, v := range roles {
for _, v1 := range actionRole.GetData().LastChooseTarget {
if v.GetData().Rid == v1 {
result = append(result, v)
break
}
}
}
return result
case int32(core.AferSkillFromType_FriendExceptSelf):
// 除自己外的友方
// return roles.FindAll(role => role.Data.Side == actionRole.Data.Side && role != actionRole);
result := make([]core.IFightRole, 0)
// roles.FindAll(role => role.Data.Side == actionRole.Data.Side);
for _, v := range roles {
if v.GetData().Side == actionRole.GetData().Side && v != actionRole {
result = append(result, v)
}
}
return result
case int32(core.AferSkillFromType_EnemyExceptChoose):
// 除选定目标外的其他敌方
// return roles.FindAll(role => role.Data.Side != actionRole.Data.Side && !actionRole.Data.LastChooseTarget.Contains(role.Data.Rid));
result := make([]core.IFightRole, 0)
for _, v := range roles {
if v.GetData().Side != actionRole.GetData().Side {
for _, v1 := range actionRole.GetData().LastChooseTarget {
if v.GetData().Rid == v1 {
result = append(result, v)
break
}
}
}
}
return result
case int32(core.AferSkillFromType_FriendExceptChoose):
// 除选定目标外的其他敌方
// return roles.FindAll(role => role.Data.Side != actionRole.Data.Side && !actionRole.Data.LastChooseTarget.Contains(role.Data.Rid));
result := make([]core.IFightRole, 0)
for _, v := range roles {
if v.GetData().Side != actionRole.GetData().Side {
for _, v1 := range actionRole.GetData().LastChooseTarget {
if v.GetData().Rid == v1 {
result = append(result, v)
break
}
}
}
}
return result
// 除选定目标外的其他友方
// return roles.FindAll(role => role.Data.Side == actionRole.Data.Side && !actionRole.Data.LastChooseTarget.Contains(role.Data.Rid));
}
return []core.IFightRole{}
}