103 lines
3.4 KiB
Go
103 lines
3.4 KiB
Go
package fight
|
||
|
||
import "go_dreamfactory/modules/battle/fight/core"
|
||
|
||
/// <summary>
|
||
/// 从roles里,过滤出符合设定的对象List
|
||
/// </summary>
|
||
/// <param name="roles">筛选前List<FightRole></param>
|
||
/// <param name="actionRole">当前行动role</param>
|
||
/// <param name="from">afterSkill里设置的From</param>
|
||
/// <returns></returns>
|
||
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{}
|
||
}
|