private void lstProjectiles_AfterSelect(object sender, TreeViewEventArgs e) { if (mChangingName) { return; } if (lstProjectiles.SelectedNode == null || lstProjectiles.SelectedNode.Tag == null) { return; } mEditorItem = ProjectileBase.Get((Guid)lstProjectiles.SelectedNode.Tag); UpdateEditor(); }
public override void Load(EntityPacket packet) { if (mLoaded) { return; } base.Load(packet); var pkt = (ProjectileEntityPacket)packet; ProjectileId = pkt.ProjectileId; Dir = pkt.ProjectileDirection; TargetId = pkt.TargetId; mOwner = pkt.OwnerId; mMyBase = ProjectileBase.Get(ProjectileId); if (mMyBase != null) { for (var x = 0; x < ProjectileBase.SPAWN_LOCATIONS_WIDTH; x++) { for (var y = 0; y < ProjectileBase.SPAWN_LOCATIONS_WIDTH; y++) { for (var d = 0; d < ProjectileBase.MAX_PROJECTILE_DIRECTIONS; d++) { if (mMyBase.SpawnLocations[x, y].Directions[d] == true) { mTotalSpawns++; } } } } mTotalSpawns *= mMyBase.Quantity; } Spawns = new ProjectileSpawns[mTotalSpawns]; mLoaded = true; }
//GameObjectPacket private static void HandlePacket(GameObjectPacket packet) { var id = packet.Id; var deleted = packet.Deleted; var json = ""; if (!packet.Deleted) { json = packet.Data; } switch (packet.Type) { case GameObjectType.Animation: if (deleted) { var anim = AnimationBase.Get(id); anim.Delete(); } else { var anim = new AnimationBase(id); anim.Load(json); try { AnimationBase.Lookup.Set(id, anim); } catch (Exception exception) { Log.Error($"Another mystery NPE. [Lookup={AnimationBase.Lookup}]"); if (exception.InnerException != null) { Log.Error(exception.InnerException); } Log.Error(exception); Log.Error($"{nameof(id)}={id},{nameof(anim)}={anim}"); throw; } } break; case GameObjectType.Class: if (deleted) { var cls = ClassBase.Get(id); cls.Delete(); } else { var cls = new ClassBase(id); cls.Load(json); ClassBase.Lookup.Set(id, cls); } break; case GameObjectType.Item: if (deleted) { var itm = ItemBase.Get(id); itm.Delete(); } else { var itm = new ItemBase(id); itm.Load(json); ItemBase.Lookup.Set(id, itm); } break; case GameObjectType.Npc: if (deleted) { var npc = NpcBase.Get(id); npc.Delete(); } else { var npc = new NpcBase(id); npc.Load(json); NpcBase.Lookup.Set(id, npc); } break; case GameObjectType.Projectile: if (deleted) { var proj = ProjectileBase.Get(id); proj.Delete(); } else { var proj = new ProjectileBase(id); proj.Load(json); ProjectileBase.Lookup.Set(id, proj); } break; case GameObjectType.Quest: if (deleted) { var qst = QuestBase.Get(id); qst.Delete(); } else { var qst = new QuestBase(id); qst.Load(json); foreach (var tsk in qst.Tasks) { qst.OriginalTaskEventIds.Add(tsk.Id, tsk.CompletionEventId); } QuestBase.Lookup.Set(id, qst); } break; case GameObjectType.Resource: if (deleted) { var res = ResourceBase.Get(id); res.Delete(); } else { var res = new ResourceBase(id); res.Load(json); ResourceBase.Lookup.Set(id, res); } break; case GameObjectType.Shop: if (deleted) { var shp = ShopBase.Get(id); shp.Delete(); } else { var shp = new ShopBase(id); shp.Load(json); ShopBase.Lookup.Set(id, shp); } break; case GameObjectType.Spell: if (deleted) { var spl = SpellBase.Get(id); spl.Delete(); } else { var spl = new SpellBase(id); spl.Load(json); SpellBase.Lookup.Set(id, spl); } break; case GameObjectType.CraftTables: if (deleted) { var cft = CraftingTableBase.Get(id); cft.Delete(); } else { var cft = new CraftingTableBase(id); cft.Load(json); CraftingTableBase.Lookup.Set(id, cft); } break; case GameObjectType.Crafts: if (deleted) { var cft = CraftBase.Get(id); cft.Delete(); } else { var cft = new CraftBase(id); cft.Load(json); CraftBase.Lookup.Set(id, cft); } break; case GameObjectType.Map: //Handled in a different packet break; case GameObjectType.Event: var wasCommon = false; if (deleted) { var evt = EventBase.Get(id); wasCommon = evt.CommonEvent; evt.Delete(); } else { var evt = new EventBase(id); evt.Load(json); wasCommon = evt.CommonEvent; EventBase.Lookup.Set(id, evt); } if (!wasCommon) { return; } break; case GameObjectType.PlayerVariable: if (deleted) { var pvar = PlayerVariableBase.Get(id); pvar.Delete(); } else { var pvar = new PlayerVariableBase(id); pvar.Load(json); PlayerVariableBase.Lookup.Set(id, pvar); } break; case GameObjectType.ServerVariable: if (deleted) { var svar = ServerVariableBase.Get(id); svar.Delete(); } else { var svar = new ServerVariableBase(id); svar.Load(json); ServerVariableBase.Lookup.Set(id, svar); } break; case GameObjectType.Tileset: var obj = new TilesetBase(id); obj.Load(json); TilesetBase.Lookup.Set(id, obj); if (Globals.HasGameData && !packet.AnotherFollowing) { GameContentManager.LoadTilesets(); } break; default: throw new ArgumentOutOfRangeException(); } GameObjectUpdatedDelegate?.Invoke(packet.Type); }
private void cmbProjectile_SelectedIndexChanged(object sender, EventArgs e) { mEditorItem.Projectile = ProjectileBase.Get(ProjectileBase.IdFromList(cmbProjectile.SelectedIndex - 1)); }
public static void RegisterProjectiles() { ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.DigSmall, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size4, MaxAge = 600, Speed = 500, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.DigMedium, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size6, MaxAge = 600, Speed = 520, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.DigLarge, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size7, MaxAge = 600, Speed = 540, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.DigExtraLarge, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size9, MaxAge = 600, Speed = 560, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Blaster, BaseDamage = 5, MaxAge = 600, Speed = 750, InitialParticleBurst = 10, UseTierParticleColor = true, UseTierTextures = true, ParticleStream = true, FireSound = Sound.BlasterFire, HitSound = Sound.BlasterHit, Knockback = 1000, }); var blasterCharged = ProjectileBase.Get(ProjectileId.Blaster).Clone(); blasterCharged.Name = null; blasterCharged.Id = ProjectileId.BlasterCharged; blasterCharged.BaseDamage = 20; blasterCharged.Speed = 1000; blasterCharged.Knockback = 10; blasterCharged.UseTierTextures = true; blasterCharged.FireSound = Sound.BlasterChargedFire; ProjectileBase.AddType(blasterCharged); var slowBlaster = ProjectileBase.Get(ProjectileId.Blaster).Clone(); slowBlaster.TechName = slowBlaster.Name; slowBlaster.Name = null; slowBlaster.Id = ProjectileId.SlowBlaster; slowBlaster.UseTierTextures = false; slowBlaster.BaseDamage = 8; slowBlaster.Speed = 300; slowBlaster.MaxAge = 6000; ProjectileBase.AddType(slowBlaster); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.LongRangeBlaster, BaseDamage = 4, MaxAge = 4000, Speed = 650, Penetrate = true, InitialParticleBurst = 10, UseTierParticleColor = true, //UseTierTextures = true, FireSound = Sound.BlasterFire, HitSound = Sound.BlasterHit, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.BallLightning, BaseDamage = 20, MaxAge = 6000, Speed = 500, Penetrate = true, InitialParticleBurst = 10, ParticleColor = Color.LightBlue, HitSound = Sound.ElectricityHit, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Disruptor, BaseDamage = 6, MaxAge = 200, Speed = 750, InitialParticleBurst = 5, UseTierTextures = true, UseTierParticleColor = true, FireSound = Sound.DisruptorFire, HitSound = Sound.DisruptorHit, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.LaserRifle, BaseDamage = 13, MaxAge = 1000, Speed = 1000, //CoolDown = 500, InitialParticleBurst = 15, UseTierTextures = true, UseTierParticleColor = true, FireSound = Sound.LaserRifleFire, HitSound = Sound.LaserRifleHit, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.PoisonDart, BaseDamage = 5, MaxAge = 2000, Speed = 700, InitialParticleBurst = 10, ParticleColor = Color.Green, FireSound = Sound.Spike, HitSound = Sound.BlasterHit, }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.HomingMissile, BaseDamage = 11, MaxAge = 3000, Speed = 500, IsHoming = true, UseTierTextures = true, InitialParticleBurst = 30, ParticleColor = Color.LightGray, ParticleStream = true, FireSound = Sound.HomingMissileFire, HitSound = Sound.HomingMissileHit, OnHitParticleBurst = 75, }); var acidSpit = ProjectileBase.Get(ProjectileId.HomingMissile).Clone(); acidSpit.Id = ProjectileId.AcidSpit; acidSpit.Name = "AcidSpit"; acidSpit.UseTierTextures = false; acidSpit.ParticleColor = Color.FromNonPremultiplied(194, 245, 65, 200); acidSpit.FireSound = Sound.FireBreath; acidSpit.HitSound = Sound.AcidSplat; ProjectileBase.AddType(acidSpit); //var explosiveAcidSpit = ProjectileBase.Get(ProjectileId.HomingMissile).Clone(); //explosiveAcidSpit.Id = ProjectileId.ExplosiveAcidSpit; //explosiveAcidSpit.Name = "Explosive AcidSpit"; //explosiveAcidSpit.Penetrate = true; //explosiveAcidSpit.IsHoming = false; //explosiveAcidSpit.UseTierTextures = false; //explosiveAcidSpit.MaxAge = 6000; //explosiveAcidSpit.Speed = 400; //explosiveAcidSpit.ParticleColor = Color.FromNonPremultiplied(194, 245, 65, 200); //explosiveAcidSpit.FireSound = Sound.FireBreath; //explosiveAcidSpit.HitSound = Sound.AcidSplat; //explosiveAcidSpit.OnProjectileHitTerrain = (projectile, material) => { // projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Acid, 0); // }; //explosiveAcidSpit.OnProjectileHit = (projectile, target, amount) => { // projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Acid, 0); //}; //ProjectileBase.AddType(explosiveAcidSpit); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.FlameThrower, Speed = 1000, ParticleColor = Color.Red, OnProjectileMove = (projectile, material) => { if (material != Material.Fire && MaterialInfo.IsLiquid(material)) { projectile.Remove(); } else { if (projectile.Age > 150) { projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0); } } }, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Fireball, BaseDamage = 25, Speed = 1000, MaxAge = 2000, DigBrush = Brush.Size10, DigStrength = 7, FireSound = Sound.FireBreath, ParticleColor = Color.FromNonPremultiplied(255, 113, 95, 200), ParticleStream = true, InitialParticleBurst = 20, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size5, Material.Fire, 0); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size5, Material.Fire, 0); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Fireball_2, BaseDamage = 8, Speed = 800, MaxAge = 3000, Penetrate = true, FireSound = Sound.FireBreath, ParticleColor = Color.FromNonPremultiplied(255, 113, 95, 200), ParticleStream = true, InitialParticleBurst = 20, OnProjectileHit = (projectile, target, amount) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size10, Material.Fire, 0); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Comet, BaseDamage = 10, Speed = 500, ParticleColor = Color.FromNonPremultiplied(255, 43, 61, 175), ParticleStream = true, InitialParticleBurst = 20, MaxAge = 2000, DigBrush = Brush.Size10, DigStrength = 7, HasGravity = true, FireSound = Sound.FireBreath, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0); }, OnProjectileHit = (projectile, target, amount) => { } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Spike, BaseDamage = 10, MaxAge = 2000, Speed = 750, InitialParticleBurst = 15, ParticleColor = Color.FromNonPremultiplied(114, 118, 20, 255), ParticleStream = true, FireSound = Sound.Spike, }); var project = ProjectileBase.Get(ProjectileId.Spike).Clone(); project.TechName = project.Name; project.Name = null; project.Id = ProjectileId.SproutSpike; project.BaseDamage = 7; ProjectileBase.AddType(project); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.BoseEinsteinCondenser, BaseDamage = 5, MaxAge = 1000, Speed = 500, FireSound = Sound.BoseEinsteinCondenserFire, InitialParticleBurst = 5, ParticleColor = Color.LightBlue, ParticleStream = true, OnProjectileMove = (projectile, material) => { if (MaterialInfo.IsLiquid(material)) { projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0); projectile.Remove(); } }, OnProjectileHitTerrain = (projectile, material) => { //if (projectile.Age > 150) projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.DiggingAndDamaging, BaseDamage = 10, DigBrush = Brush.Size7, DigStrength = 7, ParticleColor = Color.FromNonPremultiplied(248, 113, 241, 100), ParticleStream = true, MaxAge = 3000, Speed = 600, FireSound = Sound.SpaceShipBlaster, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size8, Material.Fire, 1); }, }); //Final Boss Grenades ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Grenade, BaseDamage = 5, ParticleColor = Color.FromNonPremultiplied(109, 247, 27, 255), ParticleStream = true, Speed = 500, MaxAge = 3000, FireSound = Sound.HomingMissileFire, HitSound = Sound.HomingMissileHit, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.Explode(projectile.Position, 250, 9); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.Explode(projectile.Position, 250, 9); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.Grenade_2, BaseDamage = 1, Speed = 1000, MaxAge = 6000, HasGravity = true, FireSound = Sound.GrenadeFire, ParticleColor = Color.FromNonPremultiplied(109, 247, 27, 255), ParticleStream = true, //OnProjectileMove = (projectile, material) => //{ // if (projectile.Age > 2800) // projectile.Map.Explode(projectile.Position, 5, 1); //}, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.Explode(projectile.Position, 5, 1); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.Explode(projectile.Position, 5, 1); } }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.MiniFlame, BaseDamage = 5, DigBrush = Brush.Size7, DigStrength = 8, ParticleColor = Color.FromNonPremultiplied(255, 80, 98, 255), ParticleStream = true, InitialParticleBurst = 30, MaxAge = 5000, Speed = 300, Penetrate = true }); ProjectileBase.AddType(new ProjectileType() { Id = ProjectileId.MiniFlame_2, BaseDamage = 5, ParticleColor = Color.FromNonPremultiplied(255, 80, 98, 255), ParticleStream = true, MaxAge = 5000, Speed = 650, FireSound = Sound.MiniFlame, OnProjectileHitTerrain = (projectile, material) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size3, Material.Fire, 0); }, OnProjectileHit = (projectile, target, amount) => { projectile.Map.RenderBrush(projectile.Position, Brush.Size3, Material.Fire, 0); } }); }
public SpellDescWindow(Guid spellId, int x, int y, bool centerHorizontally = false) { var spell = SpellBase.Get(spellId); if (spell == null) { return; } mDescWindow = new ImagePanel(Interface.GameUi.GameCanvas, "SpellDescWindowExpanded"); var icon = new ImagePanel(mDescWindow, "SpellIcon"); var spellName = new Label(mDescWindow, "SpellName"); spellName.Text = spell.Name; var spellType = new Label(mDescWindow, "SpellType"); spellType.Text = Strings.SpellDesc.spelltypes[(int)spell.SpellType]; var spellDesc = new RichLabel(mDescWindow, "SpellDesc"); var spellStats = new RichLabel(mDescWindow, "SpellStats"); var spellDescText = new Label(mDescWindow, "SpellDescText"); spellDescText.Font = spellDescText.Parent.Skin.DefaultFont; var spellStatsText = new Label(mDescWindow, "SpellStatsText"); spellStatsText.Font = spellStatsText.Parent.Skin.DefaultFont; spellDescText.IsHidden = true; spellStatsText.IsHidden = true; //Load this up now so we know what color to make the text when filling out the desc mDescWindow.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString()); if (spell.Description.Length > 0) { spellDesc.AddText( Strings.SpellDesc.desc.ToString(spell.Description), spellDesc.RenderColor, spellDescText.CurAlignments.Count > 0 ? spellDescText.CurAlignments[0] : Alignments.Left, spellDescText.Font ); spellDesc.AddLineBreak(); spellDesc.AddLineBreak(); } if (spell.SpellType == (int)SpellTypes.CombatSpell) { if (spell.Combat.TargetType == SpellTargetTypes.Projectile) { var proj = ProjectileBase.Get(spell.Combat.ProjectileId); spellType.Text = Strings.SpellDesc.targettypes[(int)spell.Combat.TargetType] .ToString(proj?.Range ?? 0, spell.Combat.HitRadius); } else { spellType.Text = Strings.SpellDesc.targettypes[(int)spell.Combat.TargetType] .ToString(spell.Combat.CastRange, spell.Combat.HitRadius); } } if (spell.SpellType == (int)SpellTypes.CombatSpell && (spell.Combat.TargetType == SpellTargetTypes.AoE || spell.Combat.TargetType == SpellTargetTypes.Single) && spell.Combat.HitRadius > 0) { spellStats.AddText( Strings.SpellDesc.radius.ToString(spell.Combat.HitRadius), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); spellStats.AddLineBreak(); } if (spell.CastDuration > 0) { var castDuration = (float)spell.CastDuration / 1000f; spellStats.AddText( Strings.SpellDesc.casttime.ToString(castDuration), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); if (spell.CooldownDuration <= 0) { spellStats.AddLineBreak(); } } if (spell.CooldownDuration > 0) { var cdr = 1 - Globals.Me.GetCooldownReduction() / 100; var cd = (float)(spell.CooldownDuration * cdr) / 1000f; spellStats.AddText( Strings.SpellDesc.cooldowntime.ToString(cd), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); spellStats.AddLineBreak(); } var requirements = spell.VitalCost[(int)Vitals.Health] > 0 || spell.VitalCost[(int)Vitals.Mana] > 0; if (requirements == true) { spellStats.AddText( Strings.SpellDesc.prereqs, spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); if (spell.VitalCost[(int)Vitals.Health] > 0) { spellStats.AddText( Strings.SpellDesc.vitalcosts[(int)Vitals.Health] .ToString(spell.VitalCost[(int)Vitals.Health]), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } if (spell.VitalCost[(int)Vitals.Mana] > 0) { spellStats.AddText( Strings.SpellDesc.vitalcosts[(int)Vitals.Mana].ToString(spell.VitalCost[(int)Vitals.Mana]), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } spellStats.AddLineBreak(); } var stats = ""; if (spell.SpellType == (int)SpellTypes.CombatSpell) { stats = Strings.SpellDesc.effects; spellStats.AddText( stats, spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); if (spell.Combat.Effect > 0) { spellStats.AddText( Strings.SpellDesc.effectlist[(int)spell.Combat.Effect], spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } for (var i = 0; i < (int)Vitals.VitalCount; i++) { var vitalDiff = spell.Combat.VitalDiff?[i] ?? 0; if (vitalDiff == 0) { continue; } var vitalSymbol = vitalDiff < 0 ? Strings.SpellDesc.addsymbol : Strings.SpellDesc.removesymbol; if (spell.Combat.Effect == StatusTypes.Shield) { stats = Strings.SpellDesc.shield.ToString(Math.Abs(vitalDiff)); } else { stats = Strings.SpellDesc.vitals[i].ToString(vitalSymbol, Math.Abs(vitalDiff)); } spellStats.AddText( stats, spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } if (spell.Combat.Duration > 0) { for (var i = 0; i < (int)Stats.StatCount; i++) { if (spell.Combat.StatDiff[i] != 0) { spellStats.AddText( Strings.SpellDesc.stats[i] .ToString( (spell.Combat.StatDiff[i] > 0 ? Strings.SpellDesc.addsymbol.ToString() : Strings.SpellDesc.removesymbol.ToString()) + Math.Abs(spell.Combat.StatDiff[i]) ), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } } var duration = (float)spell.Combat.Duration / 1000f; spellStats.AddText( Strings.SpellDesc.duration.ToString(duration), spellStats.RenderColor, spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left, spellStatsText.Font ); spellStats.AddLineBreak(); } } spellStats.SizeToChildren(false, true); if (spellStats.Children.Count == 0) { mDescWindow.Name = "SpellDescWindow"; spellStats.Name = ""; spellStatsText.Name = ""; } //Load Again for positioning purposes. mDescWindow.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString()); spellDescText.IsHidden = true; spellStatsText.IsHidden = true; icon.Texture = Globals.ContentManager.GetTexture(GameContentManager.TextureType.Spell, spell.Icon); spellStats.SizeToChildren(false, true); if (centerHorizontally) { mDescWindow.MoveTo(x - mDescWindow.Width / 2, y + mDescWindow.Padding.Top); } else { mDescWindow.MoveTo(x - mDescWindow.Width - mDescWindow.Padding.Right, y + mDescWindow.Padding.Top); } }
private void AssignEditorItem(Guid id) { mEditorItem = ProjectileBase.Get(id); UpdateEditor(); }
public void InitEditor() { var selectedId = Guid.Empty; var folderNodes = new Dictionary <string, TreeNode>(); if (lstProjectiles.SelectedNode != null && lstProjectiles.SelectedNode.Tag != null) { selectedId = (Guid)lstProjectiles.SelectedNode.Tag; } lstProjectiles.Nodes.Clear(); //Collect folders var mFolders = new List <string>(); foreach (var itm in ProjectileBase.Lookup) { if (!string.IsNullOrEmpty(((ProjectileBase)itm.Value).Folder) && !mFolders.Contains(((ProjectileBase)itm.Value).Folder)) { mFolders.Add(((ProjectileBase)itm.Value).Folder); if (!mKnownFolders.Contains(((ProjectileBase)itm.Value).Folder)) { mKnownFolders.Add(((ProjectileBase)itm.Value).Folder); } } } mFolders.Sort(); mKnownFolders.Sort(); cmbFolder.Items.Clear(); cmbFolder.Items.Add(""); cmbFolder.Items.AddRange(mKnownFolders.ToArray()); lstProjectiles.Sorted = !btnChronological.Checked; if (!btnChronological.Checked && !CustomSearch()) { foreach (var folder in mFolders) { var node = lstProjectiles.Nodes.Add(folder); node.ImageIndex = 0; node.SelectedImageIndex = 0; folderNodes.Add(folder, node); } } foreach (var itm in ProjectileBase.ItemPairs) { var node = new TreeNode(itm.Value); node.Tag = itm.Key; node.ImageIndex = 1; node.SelectedImageIndex = 1; var folder = ProjectileBase.Get(itm.Key).Folder; if (!string.IsNullOrEmpty(folder) && !btnChronological.Checked && !CustomSearch()) { var folderNode = folderNodes[folder]; folderNode.Nodes.Add(node); if (itm.Key == selectedId) { folderNode.Expand(); } } else { lstProjectiles.Nodes.Add(node); } if (CustomSearch()) { if (!node.Text.ToLower().Contains(txtSearch.Text.ToLower())) { node.Remove(); } } if (itm.Key == selectedId) { lstProjectiles.SelectedNode = node; } } var selectedNode = lstProjectiles.SelectedNode; if (!btnChronological.Checked) { lstProjectiles.Sort(); } lstProjectiles.SelectedNode = selectedNode; foreach (var node in mExpandedFolders) { if (folderNodes.ContainsKey(node)) { folderNodes[node].Expand(); } } }