internal void SetUp(TargetFlag flag, List <PrefabComponent> components, bool isNestedPrefab) { _components = components; switch (flag) { case TargetFlag.Add: SubIcon = Styles.AddTexture; break; case TargetFlag.Sub: SubIcon = Styles.SubTexture; break; case TargetFlag.None: // 追加削除が無い場合差分を見る var isModify = components.Any(c => c.Flag == TargetFlag.Add) | components.Any(c => c.Flag == TargetFlag.Sub) | components.Any(c => c.Diffs.Count > 0); if (isModify) { SubIcon = Styles.ModifyTexture; } break; } icon = isNestedPrefab ? Styles.NestedPrefabTexture : Styles.PrefabTexture; }
public void Add(TargetFlag code) { Bytes.Add(new byte[] { (byte)code }); }
public static void ReadSpellTargetData(Packet packet, ref TargetFlag targetFlags, WowGuid targetGUID, params object[] idx) { targetFlags = packet.ReadInt32E <TargetFlag>("Flags", idx); if (targetFlags.HasAnyFlag(TargetFlag.Unit | TargetFlag.CorpseEnemy | TargetFlag.GameObject | TargetFlag.CorpseAlly | TargetFlag.UnitMinipet)) { targetGUID = packet.ReadPackedGuid("Unit", idx); } if (targetFlags.HasAnyFlag(TargetFlag.Item | TargetFlag.TradeItem)) { packet.ReadPackedGuid("Item", idx); } if (targetFlags.HasAnyFlag(TargetFlag.SourceLocation)) { ReadLocation(packet, "SrcLocation"); } if (targetFlags.HasAnyFlag(TargetFlag.DestinationLocation)) { ReadLocation(packet, "DstLocation"); } if (targetFlags.HasAnyFlag(TargetFlag.NameString)) { packet.ReadCString("Name", idx); } }
static int IntToEnum(IntPtr L) { int arg0 = (int)LuaDLL.lua_tonumber(L, 1); TargetFlag o = (TargetFlag)arg0; ToLua.Push(L, o); return(1); }
public SpellCast(DateTime _time, int _number, int _spellId, TargetFlag _targetFlag, List<Misc.Guid> _hitTargets, List<Misc.Guid> _missTargets) { time = _time; number = _number; spellId = _spellId; targetFlag = _targetFlag; hitTargets = _hitTargets; missTargets = _missTargets; }
static int get_TargetFlag(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); Buff obj = (Buff)o; TargetFlag ret = obj.TargetFlag; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TargetFlag on a nil value" : e.Message)); } }
static int set_TargetFlag(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); Buff obj = (Buff)o; TargetFlag arg0 = (TargetFlag)ToLua.CheckObject(L, 2, typeof(TargetFlag)); obj.TargetFlag = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TargetFlag on a nil value" : e.Message)); } }
private void GetDiffItem( TreeViewItem root, string label, TargetFlag flag, Texture2D texture, Action <PrefabComponent, TreeViewItem> action = null ) { var finds = _components.Where(c => c.Flag == flag); if (!finds.Any()) { return; } var item = new TreeViewItem { id = GetId(), displayName = label, icon = texture, }; foreach (var find in finds) { var content = EditorGUIUtility.ObjectContent(null, find.Type); var child = new TreeViewItem { id = GetId(), displayName = find.Name, icon = (Texture2D)content.image, }; if (child.icon == null) { child.icon = Styles.ScriptTexture; } action?.Invoke(find, child); item.AddChild(child); } root.AddChild(item); }
static int FindTargets(IntPtr L) { try { ToLua.CheckArgsCount(L, 6); BattleController obj = (BattleController)ToLua.CheckObject(L, 1, typeof(BattleController)); long arg0 = (long)LuaDLL.luaL_checknumber(L, 2); UnityEngine.Vector3 arg1 = ToLua.ToVector3(L, 3); float arg2 = (float)LuaDLL.luaL_checknumber(L, 4); TeamFlag arg3 = (TeamFlag)ToLua.CheckObject(L, 5, typeof(TeamFlag)); TargetFlag arg4 = (TargetFlag)ToLua.CheckObject(L, 6, typeof(TargetFlag)); Actor[] o = obj.FindTargets(arg0, arg1, arg2, arg3, arg4); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// Create Prefab Data /// </summary> private static PrefabObject Recursive(Transform transform, TargetFlag flag) { var info = new PrefabObject(transform.name, flag); { if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(transform.gameObject, out string guid, out long id)) { info.ID = id; } } var nestedRoot = PrefabUtility.GetNearestPrefabInstanceRoot(transform); info.IsNestedPrefab = nestedRoot != null; var components = transform.GetComponents <Component>(); foreach (var component in components) { if (!AssetDatabase.TryGetGUIDAndLocalFileIdentifier(component, out string guid, out long id)) { continue; } var c = new PrefabComponent(component.GetType(), id, flag); info.Components.Add(c); } var count = transform.childCount; for (var i = 0; i < count; i++) { var child = transform.GetChild(i); info.Child.Add(Recursive(child, flag)); } return(info); }
// 寻找范围内的单位 public Actor FindTarget(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag, FindType findType) { List <Actor> allActors = GetActorList(); List <Actor> list = new List <Actor>(); foreach (var item in allActors) { // TODO 这里应该有错误 if (item == this) { continue; } if (Vector3.Distance(pos, item.Position) > radius) { // 超出范围 continue; } if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID) { // 要求目标是敌人 但是跟目标是同一队伍 continue; } else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID) { // 要求目标是友方 但是跟目标不是同一队伍 continue; } // 炸弹等不能被作为攻击目标 if (item.CanBeTarget) { list.Add(item); } } if (list.Count <= 0) { return(null); } if (findType == FindType.FIND_CLOSEST) { // 最近的 list.Sort((a, b) => { var lenA = Vector3.Distance(pos, a.Position); var lenB = Vector3.Distance(pos, b.Position); return(lenA.CompareTo(lenB)); }); } else if (findType == FindType.FIND_FARTHEST) { // 最远的 list.Sort((a, b) => { var lenA = Vector3.Distance(pos, a.Position); var lenB = Vector3.Distance(pos, b.Position); return(lenB.CompareTo(lenA)); }); } return(list[0]); }
public PrefabObject(string name, TargetFlag flag) { Name = name; Flag = flag; }
public PrefabComponent(Type type, long id, TargetFlag flag) { Type = type; ID = id; Flag = flag; }
protected Variable(TypeFlag flag, TargetFlag target) { Type = flag; Target = target; }
public static void ReadSpellCastData(Packet packet, params object[] idx) { bool isSpellGo = packet.Opcode == Opcodes.GetOpcode(Opcode.SMSG_SPELL_GO, Direction.ServerToClient); WowGuid targetGUID = new WowGuid64(); var casterGUID = packet.ReadPackedGuid("CasterGUID", idx); packet.ReadPackedGuid("CasterUnit", idx); packet.ReadByte("CastID", idx); var spellId = packet.ReadInt32 <SpellId>("SpellID", idx); CastFlag flags = packet.ReadInt32E <CastFlag>("CastFlags", idx); packet.ReadUInt32("CastFlagsEx", idx); packet.ReadUInt32("CastTime", idx); if (isSpellGo) { var hitTargetsCount = packet.ReadByte("HitTargetsCount", idx); for (var i = 0; i < hitTargetsCount; ++i) { packet.ReadGuid("HitTarget", idx, i); } var missCount = packet.ReadByte("MissStatusCount", idx); for (var i = 0; i < missCount; ++i) { ReadSpellMissStatus(packet, idx, "MissStatus", i); } } TargetFlag targetFlags = TargetFlag.Self; ReadSpellTargetData(packet, ref targetFlags, targetGUID, idx, "Target"); if (flags.HasAnyFlag(CastFlag.PredictedPower)) { packet.ReadUInt32("RemainingPower"); } if (flags.HasAnyFlag(CastFlag.RuneInfo)) { ReadRuneData(packet, idx, "RemainingRunes"); } if (isSpellGo) { if (flags.HasAnyFlag(CastFlag.AdjustMissile)) { ReadMissileTrajectoryResult(packet, idx, "MissileTrajectory"); } } if (flags.HasAnyFlag(CastFlag.Projectile)) { ReadSpellAmmo(packet, idx, "Ammo"); } if (isSpellGo) { if (flags.HasAnyFlag(CastFlag.VisualChain)) { ReadProjectileVisual(packet, idx, "ProjectileVisual"); } if (targetFlags.HasAnyFlag(TargetFlag.DestinationLocation)) { packet.ReadByte("DestLocSpellCastIndex", idx); } if (targetFlags.HasAnyFlag(TargetFlag.ExtraTargets)) { var targetPointsCount = packet.ReadInt32("TargetPointsCount", idx); for (var i = 0; i < targetPointsCount; ++i) { ReadTargetLocation(packet, idx, "TargetPoints", i); } } } else { if (flags.HasAnyFlag(CastFlag.Immunity)) { ReadCreatureImmunities(packet, idx, "Immunities"); } if (flags.HasAnyFlag(CastFlag.HealPrediction)) { ReadSpellHealPrediction(packet, idx, "Predict"); } } if (flags.HasAnyFlag(CastFlag.Unknown21) && !isSpellGo) { NpcSpellClick spellClick = new NpcSpellClick { SpellID = (uint)spellId, CasterGUID = casterGUID, TargetGUID = targetGUID }; Storage.SpellClicks.Add(spellClick, packet.TimeSpan); } if (isSpellGo) { packet.AddSniffData(StoreNameType.Spell, spellId, "SPELL_GO"); } }
public static TargetFlag ConvertTargetFlag(int i) { return(TargetFlag.GetTargetFlag(i)); }
public Actor[] FindTargets(float radius, TeamFlag teamFlag, TargetFlag targetFlag) { return(BattleController.Instance.FindTargets(UserID, Position, radius, teamFlag, targetFlag)); }
// 目标查找 public Actor FindTarget(float radius, TeamFlag teamFlag, TargetFlag targetFlag) { return(BattleController.Instance.FindTarget(UserID, Position, radius, teamFlag, targetFlag, FindType.FIND_CLOSEST)); }
public Actor[] FindTargets(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag) { List <Actor> allActors = GetActorList(); List <Actor> list = new List <Actor>(); foreach (var item in allActors) { if (item == this) { continue; } if (Vector3.Distance(pos, item.Position) > radius) { // 超出范围 continue; } if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID) { // 要求目标是敌人 continue; } else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID) { // 要求目标是友方 continue; } list.Add(item); } return(list.ToArray()); }