//Attribute References private void UpdateMapAttributes() { var width = Options.MapWidth; var height = Options.MapHeight; for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { var att = Attributes[x, y]; if (att == null) { continue; } if (att.Type == MapAttributes.Animation) { var anim = AnimationBase.Get(((MapAnimationAttribute)att).AnimationId); if (anim == null) { continue; } if (!mAttributeAnimInstances.ContainsKey(att)) { var animInstance = new Animation(anim, true); animInstance.SetPosition( GetX() + x * Options.TileWidth + Options.TileWidth / 2, GetY() + y * Options.TileHeight + Options.TileHeight / 2, x, y, Id, 0 ); mAttributeAnimInstances.Add(att, animInstance); } mAttributeAnimInstances[att].Update(); } if (att.Type == MapAttributes.Critter) { var critterAttribute = ((MapCritterAttribute)att); var sprite = critterAttribute.Sprite; var anim = AnimationBase.Get(critterAttribute.AnimationId); if (anim == null && TextUtils.IsNone(sprite)) { continue; } if (!mAttributeCritterInstances.ContainsKey(att)) { var critter = new Critter(this, (byte)x, (byte)y, critterAttribute); Critters.Add(critter.Id, critter); mAttributeCritterInstances.Add(att, critter); } mAttributeCritterInstances[att].Update(); } } } }
public Critter(MapInstance map, byte x, byte y, MapCritterAttribute att) : base(Guid.NewGuid(), null, false) { mAttribute = att; //setup Sprite & Animation MySprite = att.Sprite; var anim = AnimationBase.Get(att.AnimationId); if (anim != null) { var animInstance = new Animation(anim, true); Animations.Add(animInstance); } //Define Location CurrentMap = map.Id; X = x; Y = y; //Determine Direction if (mAttribute.Direction == 0) { Dir = (byte)Globals.Random.Next(4); } else { Dir = (byte)(mAttribute.Direction - 1); } //Block Players? Passable = !att.BlockPlayers; }
//Attribute/Animations public Animation GetAttributeAnimation(MapAttribute attr, Guid animId) { if (attr == null) { return(null); } if (!mAttributeAnimInstances.ContainsKey(attr)) { mAttributeAnimInstances.Add(attr, new Animation(AnimationBase.Get(animId), true)); } return(mAttributeAnimInstances[attr]); }
private void lstAnimations_AfterSelect(object sender, TreeViewEventArgs e) { if (mChangingName) { return; } if (lstAnimations.SelectedNode == null || lstAnimations.SelectedNode.Tag == null) { return; } mEditorItem = AnimationBase.Get((Guid)lstAnimations.SelectedNode.Tag); UpdateEditor(); }
//Animations public void AddTileAnimation(Guid animId, int tileX, int tileY, int dir = -1) { var animBase = AnimationBase.Get(animId); if (animBase == null) { return; } var anim = new MapAnimation(animBase, tileX, tileY, dir); LocalAnimations.Add(anim); anim.SetPosition( GetX() + tileX * Options.TileWidth + Options.TileWidth / 2, GetY() + tileY * Options.TileHeight + Options.TileHeight / 2, tileX, tileY, Id, dir ); }
//Weather public void DrawWeather() { if (Globals.Me == null || Lookup.Get(Globals.Me.CurrentMap) == null) { return; } var anim = AnimationBase.Get(WeatherAnimationId); if (anim == null || WeatherIntensity == 0) { return; } _removeParticles.Clear(); if ((WeatherXSpeed != 0 || WeatherYSpeed != 0) && Globals.Me.MapInstance == this) { if (Globals.System.GetTimeMs() > _weatherParticleSpawnTime) { _weatherParticles.Add(new WeatherParticle(_removeParticles, WeatherXSpeed, WeatherYSpeed, anim)); var spawnTime = 25 + (int)(475 * (float)(1f - (float)(WeatherIntensity / 100f))); spawnTime = (int)(spawnTime * (480000f / (Graphics.Renderer.GetScreenWidth() * Graphics.Renderer.GetScreenHeight()))); _weatherParticleSpawnTime = Globals.System.GetTimeMs() + spawnTime; } } //Process and draw each weather particle foreach (var w in _weatherParticles) { w.Update(); } //Remove all old particles from the weather particles list from the removeparticles list. foreach (var r in _removeParticles) { r.Dispose(); _weatherParticles.Remove(r); } }
//Attribute References private void UpdateMapAttributes() { var width = Options.MapWidth; var height = Options.MapHeight; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var att = Attributes[x, y]; if (att == null) { continue; } if (att.Type != MapAttributes.Animation) { continue; } var anim = AnimationBase.Get(((MapAnimationAttribute)att).AnimationId); if (anim == null) { continue; } if (!mAttributeAnimInstances.ContainsKey(att)) { var animInstance = new Animation(anim, true); animInstance.SetPosition( GetX() + x * Options.TileWidth + Options.TileWidth / 2, GetY() + y * Options.TileHeight + Options.TileHeight / 2, x, y, Id, 0 ); mAttributeAnimInstances.Add(att, animInstance); } mAttributeAnimInstances[att].Update(); } } }
private void AddProjectileSpawns() { var spawn = FindSpawnAnimationData(); var animBase = AnimationBase.Get(mMyBase.Animations[spawn].AnimationId); 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) { var s = new ProjectileSpawns( FindProjectileRotationDir(Dir, d), X + FindProjectileRotationX(Dir, x - 2, y - 2), Y + FindProjectileRotationY(Dir, x - 2, y - 2), Z, CurrentMap, animBase, mMyBase.Animations[spawn].AutoRotate, mMyBase, this ); Spawns[mSpawnedAmount] = s; if (Collided(mSpawnedAmount)) { Spawns[mSpawnedAmount].Dispose(); Spawns[mSpawnedAmount] = null; mSpawnCount--; } mSpawnedAmount++; mSpawnCount++; } } } } mQuantity++; mSpawnTime = Globals.System.GetTimeMs() + mMyBase.Delay; }
public void InitEditor() { var selectedId = Guid.Empty; var folderNodes = new Dictionary <string, TreeNode>(); if (lstAnimations.SelectedNode != null && lstAnimations.SelectedNode.Tag != null) { selectedId = (Guid)lstAnimations.SelectedNode.Tag; } lstAnimations.Nodes.Clear(); //Collect folders var mFolders = new List <string>(); foreach (var anim in AnimationBase.Lookup) { if (!string.IsNullOrEmpty(((AnimationBase)anim.Value).Folder) && !mFolders.Contains(((AnimationBase)anim.Value).Folder)) { mFolders.Add(((AnimationBase)anim.Value).Folder); if (!mKnownFolders.Contains(((AnimationBase)anim.Value).Folder)) { mKnownFolders.Add(((AnimationBase)anim.Value).Folder); } } } mFolders.Sort(); mKnownFolders.Sort(); cmbFolder.Items.Clear(); cmbFolder.Items.Add(""); cmbFolder.Items.AddRange(mKnownFolders.ToArray()); lstAnimations.Sorted = !btnChronological.Checked; if (!btnChronological.Checked && !CustomSearch()) { foreach (var folder in mFolders) { var node = lstAnimations.Nodes.Add(folder); node.ImageIndex = 0; node.SelectedImageIndex = 0; folderNodes.Add(folder, node); } } foreach (var itm in AnimationBase.ItemPairs) { var node = new TreeNode(itm.Value); node.Tag = itm.Key; node.ImageIndex = 1; node.SelectedImageIndex = 1; var folder = AnimationBase.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 { lstAnimations.Nodes.Add(node); } if (CustomSearch()) { if (!node.Text.ToLower().Contains(txtSearch.Text.ToLower())) { node.Remove(); } } if (itm.Key == selectedId) { lstAnimations.SelectedNode = node; } } var selectedNode = lstAnimations.SelectedNode; if (!btnChronological.Checked) { lstAnimations.Sort(); } lstAnimations.SelectedNode = selectedNode; foreach (var node in mExpandedFolders) { if (folderNodes.ContainsKey(node)) { folderNodes[node].Expand(); } } }
private void cmbAttackAnimation_SelectedIndexChanged(object sender, EventArgs e) { mEditorItem.AttackAnimation = AnimationBase.Get(AnimationBase.IdFromList(cmbAttackAnimation.SelectedIndex - 1)); }
//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 AssignEditorItem(Guid id) { mEditorItem = AnimationBase.Get(id); UpdateEditor(); }
//PlayAnimationPacket private static void HandlePacket(PlayAnimationPacket packet) { var mapId = packet.MapId; var animId = packet.AnimationId; var targetType = packet.TargetType; var entityId = packet.EntityId; if (targetType == -1) { var map = MapInstance.Get(mapId); if (map != null) { map.AddTileAnimation(animId, packet.X, packet.Y, packet.Direction); } } else if (targetType == 1) { if (Globals.Entities.ContainsKey(entityId)) { if (Globals.Entities[entityId] != null && !Globals.EntitiesToDispose.Contains(entityId)) { var animBase = AnimationBase.Get(animId); if (animBase != null) { var animInstance = new Animation( animBase, false, packet.Direction == -1 ? false : true, -1, Globals.Entities[entityId] ); if (packet.Direction > -1) { animInstance.SetDir(packet.Direction); } Globals.Entities[entityId].Animations.Add(animInstance); } } } } else if (targetType == 2) { var map = MapInstance.Get(mapId); if (map != null) { if (map.LocalEntities.ContainsKey(entityId)) { if (map.LocalEntities[entityId] != null) { var animBase = AnimationBase.Get(animId); if (animBase != null) { var animInstance = new Animation( animBase, false, packet.Direction == -1 ? true : false, -1, map.LocalEntities[entityId] ); if (packet.Direction > -1) { animInstance.SetDir(packet.Direction); } map.LocalEntities[entityId].Animations.Add(animInstance); } } } } } }