private static void Teleport(GameObject go, Character chr) { if (go.Handler.CanBeUsedBy(chr)) { // We need to enqueue a message when moving/removing/adding Objects in this method var portal = (Portal)go; chr.AddMessage(() => chr.TeleportTo(portal.Target)); } }