public static void DrawSpawn(MapSpawnValues spawn, ISpriteBatch spriteBatch, IDrawableMap map, Font font) { var spawnArea = spawn.SpawnArea; // Only draw if it does not cover the whole map if (!spawnArea.X.HasValue && !spawnArea.Y.HasValue && !spawnArea.Width.HasValue && !spawnArea.Height.HasValue) { return; } // Draw spawn area Vector2 cameraOffset = map.Camera.Min; Rectangle rect = spawnArea.ToRectangle(map); rect.X -= (int)cameraOffset.X; rect.Y -= (int)cameraOffset.Y; RenderRectangle.Draw(spriteBatch, rect, new Color(0, 255, 0, 75), new Color(0, 0, 0, 125), 2); // Draw name CharacterTemplate charTemp = CharacterTemplateManager.Instance[spawn.CharacterTemplateID]; if (charTemp != null) { string text = string.Format("{0}x {1} [{2}]", spawn.SpawnAmount, charTemp.TemplateTable.Name, spawn.CharacterTemplateID); Vector2 textPos = new Vector2(rect.X, rect.Y); textPos -= new Vector2(0, font.MeasureString(text).Y); textPos = textPos.Round(); spriteBatch.DrawStringShaded(font, text, textPos, Color.White, Color.Black); } }
public void AddNewItem() { if (Map == null) { MessageBox.Show("The map must be set before a new spawn can be created!"); return; } var charID = CharacterTemplateManager.Instance.First().TemplateTable.ID; var newSpawn = new MapSpawnValues(DbControllerBase.GetInstance(), Map.ID, charID); this.AddItemAndReselect(newSpawn); }
/// <summary> /// Reloads the spawns in this list. This shouldn't need to be called manually unless the list is updated externally. /// However, calling this when the list hasn't changed will do no harm. /// </summary> public void ReloadSpawns() { var selected = SelectedItem; if (Map == null) { Items.Clear(); return; } // Grab the latest values var spawnInfo = MapSpawnValues.Load(DbControllerBase.GetInstance(), Map.ID); var asArray = spawnInfo.OrderBy(x => x.ID).Cast <object>().ToArray(); // Check if we are already up-to-date if (asArray.ContainSameElements(Items.Cast <object>().ToImmutable())) { return; } // Update the list try { BeginUpdate(); Items.Clear(); if (asArray.Length > 0) { Items.AddRange(asArray); if (selected != null && Items.Contains(selected)) { SelectedItem = selected; } } } finally { EndUpdate(); } }
public bool DeleteItem(MapSpawnValues item) { if (item == null) { return(false); } if (!Items.Contains(item)) { return(false); } var q = DbControllerBase.GetInstance().GetQuery <DeleteMapSpawnQuery>(); q.Execute(item.ID); ReloadSpawns(); return(true); }
/// <summary> /// Initializes a new instance of the <see cref="EditorMapSpawnValues"/> class. /// </summary> /// <param name="msv">The <see cref="MapSpawnValues"/>.</param> /// <param name="map">The map.</param> public EditorMapSpawnValues(MapSpawnValues msv, MapBase map) { _msv = msv; _map = map; }
static string GetDrawString(MapSpawnValues x) { return(string.Format("Char ID: {0} Count: {1} Region: {2}", x.CharacterTemplateID, x.SpawnAmount, x.SpawnArea)); }