예제 #1
0
        public Engine.Events.TileEvent AddTileEvent(int x, int y, Engine.Events.EventInfo eventInfo)
        {
            TileData         data   = GetTile(x, y);
            ExtendedTileData exdata = data.IsExtended ? data.Extended : data.Extend(x, y);

            Engine.Events.TileEvent ev = new Events.TileEvent(eventInfo, exdata);

            exdata.AddEvent(ev);
            events.Add(ev);

            SetTile(x, y, exdata);

            return(ev);
        }
예제 #2
0
        public static ExtendedTileData Deserialize(System.IO.Stream stream, int data, int x, int y)
        {
            System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
            int count = reader.ReadInt32();

            Events.TileEvent[] events = new Events.TileEvent[count];

            for (int i = 0; i < events.Length; i++)
            {
                events[i] = Engine.Events.TileEvent.Deserialize(stream);
            }

            ExtendedTileData exdata = new ExtendedTileData(data, x, y);

            exdata.AddEvents(events);

            return(exdata);
        }
예제 #3
0
        public static TileEvent Deserialize(System.IO.Stream stream)
        {
            System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);

            int       id   = reader.ReadInt32();
            EventInfo info = EventInfo.Manager.GetByID(id);

            object[] parameters = new object[info.Parameters.Count];

            for (int i = 0; i < parameters.Length; i++)
            {
                parameters[i] = Storage.SerialUtility.ReadAs(stream, info.Parameters[i]);
            }

            TileEvent ev = new TileEvent(info);

            ev.SetParameters(parameters);

            return(ev);
        }
예제 #4
0
        public void AddEvent(Events.TileEvent ev)
        {
            if (events == null)
            {
                events = new List <Events.TileEvent>();
            }

            if (!ev.Info.CanBeMulitple)
            {
                for (int i = 0; i < events.Count; i++)
                {
                    if (events[i].Info == ev.Info)
                    {
                        throw new Exception("This event cannot be added multiple times to one tile!");
                    }
                }
            }

            ev.TileData = this;
            events.Add(ev);
        }
예제 #5
0
        protected void OnHandleEvent(Sprites.Sprite sprite, TileEvent ev, bool handled = false)
        {
            if (handled)
            {
                return;
            }

            if (ev.Info.IsGlobal)
            {
                return;
            }

            if (ev.Info == EventInfo.Warp)
            {
                for (int i = 0; i < level.Events.Count; i++)
                {
                    if (level.Events[i].Info == EventInfo.WarpTarget)
                    {
                        sprite.Position = new Vector2(level.Events[i].TileData.X * GFX.TileSet.TileSize, level.Events[i].TileData.Y * GFX.TileSet.TileSize);
                    }
                }
            }
        }
예제 #6
0
 public void HandleEvent(Sprites.Sprite sprite, TileEvent ev)
 {
     OnHandleEvent(sprite, ev);
 }
예제 #7
0
 public void AddEvent(Events.TileEvent ev, params object[] parameters)
 {
     AddEvent(ev);
     ev.SetParameters(parameters);
 }