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{} }