public virtual object GetEntity( IEntityType entityType, EntityKey entityKey, EntityLoadInfo entityLoadInfo, bool queryStateManager) { // hot path Debug.Assert(entityType != null); Debug.Assert(entityKey != null); if (entityKey == EntityKey.InvalidEntityKey) { throw new InvalidOperationException( CoreStrings.InvalidEntityKeyOnQuery(entityType.DisplayName())); } if (queryStateManager) { var entry = _stateManager.TryGetEntry(entityKey); if (entry != null) { return(entry.Entity); } } object entity; WeakReference <object> weakReference; if (!_identityMap.TryGetValue(entityKey, out weakReference) || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { GarbageCollectIdentityMap(); _identityMap.Add(entityKey, new WeakReference <object>(entity)); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return(entity); }
public virtual object GetEntity( IKey key, EntityLoadInfo entityLoadInfo, bool queryStateManager, bool throwOnNullKey) { if (queryStateManager) { var entry = _stateManager.TryGetEntry(key, entityLoadInfo.ValueBuffer, throwOnNullKey); if (entry != null) { return(entry.Entity); } } var identityMap = GetOrCreateIdentityMap(key); bool hasNullKey; var weakReference = identityMap.TryGetEntity(entityLoadInfo.ValueBuffer, out hasNullKey); if (hasNullKey) { if (throwOnNullKey) { throw new InvalidOperationException(CoreStrings.InvalidKeyValue(key.DeclaringEntityType.DisplayName())); } return(null); } object entity; if (weakReference == null || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { identityMap.CollectGarbage(); identityMap.Add(entityLoadInfo.ValueBuffer, entity); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return(entity); }
public virtual object GetEntity( IEntityType entityType, EntityKey entityKey, EntityLoadInfo entityLoadInfo, bool queryStateManager) { // hot path Debug.Assert(entityType != null); Debug.Assert(entityKey != null); if (entityKey == EntityKey.InvalidEntityKey) { throw new InvalidOperationException( CoreStrings.InvalidEntityKeyOnQuery(entityType.DisplayName())); } if (queryStateManager) { var entry = _stateManager.TryGetEntry(entityKey); if (entry != null) { return entry.Entity; } } object entity; WeakReference<object> weakReference; if (!_identityMap.TryGetValue(entityKey, out weakReference) || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { GarbageCollectIdentityMap(); _identityMap.Add(entityKey, new WeakReference<object>(entity)); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return entity; }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual object GetEntity( IKey key, EntityLoadInfo entityLoadInfo, bool queryStateManager, bool throwOnNullKey) { if (queryStateManager) { var entry = _stateManager.TryGetEntry(key, entityLoadInfo.ValueBuffer, throwOnNullKey); if (entry != null) { return entry.Entity; } } var identityMap = GetOrCreateIdentityMap(key); bool hasNullKey; var weakReference = identityMap.TryGetEntity(entityLoadInfo.ValueBuffer, out hasNullKey); if (hasNullKey) { if (throwOnNullKey) { throw new InvalidOperationException(CoreStrings.InvalidKeyValue(key.DeclaringEntityType.DisplayName())); } return null; } object entity; if (weakReference == null || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { identityMap.CollectGarbage(); identityMap.Add(entityLoadInfo.ValueBuffer, entity); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return entity; }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual object GetEntity( IKey key, EntityLoadInfo entityLoadInfo, bool queryStateManager, bool throwOnNullKey) { if (queryStateManager) { var entry = _stateManager.Value.TryGetEntry(key, entityLoadInfo.ValueBuffer, throwOnNullKey); if (entry != null) { return(entry.Entity); } } var identityMap = GetOrCreateIdentityMap(key); bool hasNullKey; var weakReference = identityMap.TryGetEntity(entityLoadInfo.ValueBuffer, throwOnNullKey, out hasNullKey); if (hasNullKey) { return(null); } object entity; if (weakReference == null || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { identityMap.CollectGarbage(); identityMap.Add(entityLoadInfo.ValueBuffer, entity); } _valueBuffers.Add(entity, entityLoadInfo.ForType(entity.GetType())); } return(entity); }
public virtual object GetEntity( IKeyValue keyValue, EntityLoadInfo entityLoadInfo, bool queryStateManager) { // hot path Debug.Assert(keyValue != null); if (queryStateManager) { var entry = _stateManager.TryGetEntry(keyValue); if (entry != null) { return(entry.Entity); } } object entity; WeakReference <object> weakReference; if (!_identityMap.TryGetValue(keyValue, out weakReference) || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { GarbageCollectIdentityMap(); _identityMap.Add(keyValue, new WeakReference <object>(entity)); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return(entity); }
public virtual object GetEntity( IKeyValue keyValue, EntityLoadInfo entityLoadInfo, bool queryStateManager) { // hot path Debug.Assert(keyValue != null); if (queryStateManager) { var entry = _stateManager.TryGetEntry(keyValue); if (entry != null) { return entry.Entity; } } object entity; WeakReference<object> weakReference; if (!_identityMap.TryGetValue(keyValue, out weakReference) || !weakReference.TryGetTarget(out entity)) { entity = entityLoadInfo.Materialize(); if (weakReference != null) { weakReference.SetTarget(entity); } else { GarbageCollectIdentityMap(); _identityMap.Add(keyValue, new WeakReference<object>(entity)); } _valueBuffers.Add(entity, entityLoadInfo.ValueBuffer); } return entity; }
public override string SelectFragment(IJoinable rhs, string rhsAlias, string lhsAlias, string collectionSuffix, bool includeCollectionColumns, EntityLoadInfo entityInfo) { // we need to determine the best way to know that two joinables // represent a single many-to-many... if (rhs != null && IsManyToMany && !rhs.IsCollection) { IAssociationType elementType = (IAssociationType)ElementType; if (rhs.Equals(elementType.GetAssociatedJoinable(Factory))) { return(ManyToManySelectFragment(rhs, rhsAlias, lhsAlias, collectionSuffix, elementType)); } } return(includeCollectionColumns ? SelectFragment(lhsAlias, collectionSuffix) : string.Empty); }
public override string SelectFragment(IJoinable rhs, string rhsAlias, string lhsAlias, string collectionSuffix, bool includeCollectionColumns, EntityLoadInfo entityInfo) { var buf = new StringBuilder(); if (includeCollectionColumns) { buf.Append(SelectFragment(lhsAlias, collectionSuffix)).Append(StringHelper.CommaSpace); } //6.0 TODO: Remove #pragma warning disable 618 if (entityInfo.IncludeLazyProps) { var selectMode = ReflectHelper.CastOrThrow <ISupportSelectModeJoinable>(ElementPersister, "fetch lazy properties"); if (selectMode != null) { return(buf.Append(selectMode.SelectFragment(null, null, lhsAlias, entityInfo.EntitySuffix, null, false, true)).ToString()); } } #pragma warning restore 618 if (entityInfo.LazyProperties?.Count > 0) { var selectMode = ReflectHelper.CastOrThrow <ISupportLazyPropsJoinable>(ElementPersister, "fetch lazy properties"); if (selectMode != null) { return(buf.Append(selectMode.SelectFragment(null, null, lhsAlias, null, false, entityInfo)).ToString()); } } var ojl = (IOuterJoinLoadable)ElementPersister; return(buf.Append(ojl.SelectFragment(lhsAlias, entityInfo.EntitySuffix)).ToString()); //use suffix for the entity columns }
public void AddLoadNPC(EntityLoadInfo npc) { loadNPCs.Add(npc); }
private Map LoadMap(XElement root, string fileId) { Map map = null; string name = (string)root.Attribute("name"); string title = (string)root.Attribute("title"); string orientation = (string)root.Attribute("orientation"); int? width = (int?)root.Attribute("width"); int? height = (int?)root.Attribute("height"); int? tileWidth = (int?)root.Attribute("tileWidth"); int? tileHeight = (int?)root.Attribute("tileHeight"); int? startX = (int?)root.Attribute("startX"); int? startY = (int?)root.Attribute("startY"); string music = (string)root.Attribute("music"); if (name != null && orientation != null && width != null && height != null && tileWidth != null && tileHeight != null) { MapOrientation mapOrientation; if (Enum.TryParse(orientation, true, out mapOrientation)) { map = new Map(title, (int)width, (int)height, (int)tileWidth, (int)tileHeight, mapOrientation); map.MusicName = music; map.StartX = startX ?? ((int)width / 2); map.StartY = startY ?? ((int)height / 2); foreach (var node in from item in root.Descendants("layer") select item) { string layerName = (string)node.Attribute("name"); int? layerWidth = (int?)node.Attribute("width"); int? layerHeight = (int?)node.Attribute("height"); bool? visible = (bool?)node.Attribute("visible"); bool? objects = (bool?)node.Attribute("objects"); string tileSetName = (string)node.Attribute("tileset"); var data = node.Descendants().FirstOrDefault(); if (layerName != null && layerWidth != null && layerHeight != null && data != null && tileSetName != null) { TileSet tileSet = null; tileSet = engine.GetTileSet(tileSetName); string encoding = (string)data.Attribute("encoding"); if (encoding != null && tileSet != null) { Layer layer = map.AddLayer(layerName); if (visible != null && visible == false) { layer.Visible = false; } if (objects != null && objects == true) { layer.ObjectLayer = true; } layer.TileSet = tileSet; if (encoding.Equals("csv", StringComparison.OrdinalIgnoreCase)) { layer.SetCSV(data.Value); } } } } foreach (var node in from item in root.Descendants("npc") select item) { string npcName = (string)node.Attribute("name"); string npcEntity = (string)node.Attribute("entity"); int? posX = (int?)node.Attribute("posX"); int? posY = (int?)node.Attribute("posY"); if (npcName != null && npcEntity != null && posX != null && posY != null) { EntityLoadInfo npc = new EntityLoadInfo(npcName, npcEntity, (int)posX, (int)posY); map.AddLoadNPC(npc); } } } } return(map); }
public void SetNextPlayer(string pname, string name, int posX = -1, int posY = -1, int dir = -1) { playerName = pname; playerId = name; nextPlayer = new EntityLoadInfo(playerName, playerId, posX, posY, dir); }
private Map InternalLoadMap(IniFile ini, string fileId) { Map map = null; int width = ini.ReadInt("header", "width"); int height = ini.ReadInt("header", "height"); int tileWidth = ini.ReadInt("header", "tilewidth"); int tileHeight = ini.ReadInt("header", "tileheight"); string orientation = ini.ReadString("header", "orientation"); string title = ini.ReadString("header", "title"); string tileSetId = ini.ReadString("header", "tileset"); int[] startPos = ini.ReadString("header", "hero_pos").ToIntValues(); TileSet tileSet = engine.LoadTileSet(tileSetId); if (tileSet != null) { MapOrientation mapOrientation; if (Enum.TryParse(orientation, true, out mapOrientation)) { map = new Map(title, width, height, tileWidth, tileHeight, mapOrientation); string data = null; int[] values = null; string[] sValues = null; if (startPos.Length >= 2) { map.StartX = startPos[0]; map.StartY = startPos[1]; } foreach (var sec in ini.Sections) { switch (sec.Name) { case "layer": string layerType = sec.ReadString("type"); StringBuilder sb = new StringBuilder(); foreach (var k in sec.KeyList) { if (k.Ident.Equals("")) { sb.Append(k.Value); } } data = sb.ToString(); values = data.ToIntValues(); Layer layer = map.AddLayer(layerType); layer.TileSet = tileSet; if (layerType.Equals("collision", StringComparison.OrdinalIgnoreCase)) { Texture colTex = engine.Graphics.CreateTexture("Collision", tileWidth, tileHeight); layer.TileSet = TileSet.GetCollisionTileSet(colTex); layer.Visible = false; } else if (layerType.Equals("object", StringComparison.OrdinalIgnoreCase)) { layer.ObjectLayer = true; } for (int i = 0; i < values.Length; i++) { if (values[i] >= 0) { layer[i].TileId = values[i]; } } break; case "event": string evtType = sec.ReadString("type"); EventType evtActivate = sec.ReadString("activate").ToEventType(); string evtLocation = sec.ReadString("location"); values = evtLocation.ToIntValues(); if (values.Length >= 4 && evtType.Equals("event") && evtActivate != EventType.None) { Event evt = new Event(engine, evtActivate, evtType); evt.PosX = values[0]; evt.PosY = values[1]; evt.Width = values[2]; evt.Height = values[3]; if (evt.CenterX == -1 && evt.CenterY == -1) { evt.CenterX = evt.PosX + evt.Width / 2.0f; evt.CenterY = evt.PosY + evt.Height / 2.0f; } foreach (var k in sec.KeyList) { switch (k.Ident) { case "hotspot": if (k.Value.Equals("location", StringComparison.OrdinalIgnoreCase)) { evt.HotSpotFromLocation(); evt.HotSpot = true; } else { values = k.Value.ToIntValues(); if (values.Length >= 4) { evt.HotPosX = values[0]; evt.HotPosY = values[1]; evt.HotWidth = values[2]; evt.HotHeight = values[3]; evt.HotSpot = true; } } evt.CenterX = evt.HotPosX + evt.HotWidth / 2.0f; evt.CenterY = evt.HotPosY + evt.HotHeight / 2.0f; break; case "mapmod": var mmEc = evt.AddComponent(EventComponentType.MapMod, 0); mmEc.MapMods = ParseMapMods(k.Value); break; case "spawn": var spEc = evt.AddComponent(EventComponentType.Spawn, 0); spEc.MapSpawns = ParseMapSpawns(k.Value); break; case "msg": evt.AddComponent(EventComponentType.Msg, k.Value); break; case "repeat": evt.AddComponent(EventComponentType.Repeat, k.Value.ToBoolValue()); break; case "stash": evt.AddComponent(EventComponentType.Stash, k.Value.ToBoolValue()); break; case "shakycam": evt.AddComponent(EventComponentType.ShakyCam, k.Value.ToDuration()); break; case "requires_status": evt.AddComponent(EventComponentType.RequiresStatus, k.Value.ToStrValues()); break; case "requires_not_status": evt.AddComponent(EventComponentType.RequiresNotStatus, k.Value.ToStrValues()); break; case "set_status": evt.AddComponent(EventComponentType.SetStatus, k.Value.ToStrValues()); break; case "unset_status": evt.AddComponent(EventComponentType.UnsetStatus, k.Value.ToStrValues()); break; case "intermap": sValues = k.Value.ToStrValues(); if (sValues.Length >= 3) { var imEc = evt.AddComponent(EventComponentType.InterMap, sValues[0]); imEc.MapX = sValues[1].ToIntValue(); imEc.MapY = sValues[2].ToIntValue(); } break; case "intramap": values = k.Value.ToIntValues(); if (values.Length >= 2) { var imEc = evt.AddComponent(EventComponentType.IntraMap, 0); imEc.MapX = values[0]; imEc.MapY = values[1]; } break; case "tooltip": evt.AddComponent(EventComponentType.Tooltip, k.Value); break; case "soundfx": sValues = k.Value.ToStrValues(); if (sValues.Length >= 1) { var fxEc = evt.AddComponent(EventComponentType.SoundFX, sValues[0]); fxEc.MapX = -1; fxEc.MapY = -1; if (sValues.Length >= 3) { fxEc.MapX = sValues[0].ToIntValue(); fxEc.MapY = sValues[1].ToIntValue(); } } break; case "cooldown": evt.Cooldown = k.Value.ToDuration(); break; case "delay": evt.Delay = k.Value.ToDuration(); break; case "music": evt.AddComponent(EventComponentType.Music, k.Value); break; } } map.AddLoadEvent(evt); } break; case "npc": EntityLoadInfo npc = new EntityLoadInfo(); string npcFilename = sec.ReadString("filename"); if (!string.IsNullOrEmpty(npcFilename)) { npc.EntityId = npcFilename; string npcLocation = sec.ReadString("location"); values = npcLocation.ToIntValues(); if (values.Length >= 2) { npc.PosX = values[0]; npc.PosY = values[1]; map.AddLoadNPC(npc); } } break; case "enemy": string enemyName = sec.ReadString("type"); if (!string.IsNullOrEmpty(enemyName)) { EnemyGroup enemy = new EnemyGroup(enemyName); foreach (var k in sec.KeyList) { switch (k.Ident) { case "category": enemy.Category = k.Value; break; case "chance": enemy.Chance = k.Value.ToIntValue(100); break; case "location": values = k.Value.ToIntValues(); if (values.Length >= 2) { enemy.PosX = values[0]; enemy.PosY = values[1]; } if (values.Length >= 4) { enemy.Width = values[2]; enemy.Height = values[3]; } break; case "level": values = k.Value.ToIntValues(); if (values.Length >= 2) { enemy.MinLevel = values[0]; enemy.MaxLevel = Math.Max(enemy.MinLevel, values[1]); } else if (values.Length >= 1) { enemy.MinLevel = values[0]; enemy.MaxLevel = values[0]; } break; case "number": values = k.Value.ToIntValues(); if (values.Length >= 2) { enemy.MinNumber = values[0]; enemy.MaxNumber = Math.Max(enemy.MinNumber, values[1]); } else if (values.Length >= 1) { enemy.MinNumber = values[0]; enemy.MaxNumber = values[0]; } break; case "direction": enemy.Direction = k.Value.ToDirection(); break; case "waypoints": var lValues = new List <int>(k.Value.ToIntValues()); while (lValues.Count >= 2) { int x = lValues[0]; int y = lValues[1]; lValues.RemoveAt(0); lValues.RemoveAt(0); enemy.WayPoints.Add(new FPoint(x + 0.5f, y + 0.5f)); } enemy.WanderRadius = 0; break; case "wander_radius": enemy.WanderRadius = Math.Max(0, k.Value.ToIntValue()); enemy.WayPoints.Clear(); break; } } map.AddLoadEnemyGroup(enemy); } break; } } map.MusicName = ini.ReadString("header", "music"); map.BackgroundColor = ini.ReadString("header", "background_color").ToColor(); map.AddMapParallax(engine.LoadParallax(ini.ReadString("header", "parallax_layers"))); } } return(map); }