hash Target

This commit is contained in:
Matthias Mailänder
2013-08-24 12:10:42 +02:00
parent 5f8d8beec1
commit aa86eb47aa

View File

@@ -14,6 +14,7 @@ using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using OpenRA.FileFormats;
using OpenRA.Traits;
namespace OpenRA
{
@@ -45,6 +46,7 @@ namespace OpenRA
{typeof(TypeDictionary), ((Func<TypeDictionary, int>)hash_tdict).Method},
{typeof(Actor), ((Func<Actor, int>)hash_actor).Method},
{typeof(Player), ((Func<Player, int>)hash_player).Method},
{typeof(Target), ((Func<Target, int>)hash_target).Method},
};
static void EmitSyncOpcodes(Type type, ILGenerator il)
@@ -146,6 +148,25 @@ namespace OpenRA
return 0;
}
public static int hash_target(Target t)
{
switch (t.Type)
{
case TargetType.Actor:
return (int)(t.Actor.ActorID << 16) * 0x567;
case TargetType.FrozenActor:
return (int)(t.FrozenActor.Actor.ActorID << 16) * 0x567;
case TargetType.Terrain:
return hash<WPos>(t.CenterPosition);
default:
case TargetType.Invalid:
return 0;
}
}
public static int hash<T>(T t)
{
return t.GetHashCode();