Example #1
0
        //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();
                    }
                }
            }
        }
Example #2
0
        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]);
        }
Example #4
0
        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();
        }
Example #5
0
        //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
                );
        }
Example #6
0
        //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);
            }
        }
Example #7
0
        //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();
                }
            }
        }
Example #8
0
        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;
        }
Example #9
0
        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();
                }
            }
        }
Example #10
0
 private void cmbAttackAnimation_SelectedIndexChanged(object sender, EventArgs e)
 {
     mEditorItem.AttackAnimation =
         AnimationBase.Get(AnimationBase.IdFromList(cmbAttackAnimation.SelectedIndex - 1));
 }
Example #11
0
        //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);
        }
Example #12
0
 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);
                            }
                        }
                    }
                }
            }
        }