示例#1
0
文件: Map.cs 项目: Metibor/Ambermoon
        public void TriggerEvents(IRenderPlayer player, MapEventTrigger trigger, uint x, uint y, IMapManager mapManager, uint ticks)
        {
            var mapEventId = Type == MapType.Map2D ? Tiles[x, y].MapEventId : Blocks[x, y].MapEventId;

            if (mapEventId == 0)
            {
                return; // no map events at this position
            }
            var mapEvents = Events[(int)mapEventId - 1];

            switch (trigger)
            {
            case MapEventTrigger.Move:
                ExecuteEvent(player, x, y, mapManager, ticks, mapEvents);
                // TODO
                break;

            case MapEventTrigger.Hand:
                // TODO
                break;

            case MapEventTrigger.Eye:
                // TODO
                break;

            case MapEventTrigger.Mouth:
                // TODO
                break;
            }
        }
示例#2
0
文件: Map.cs 项目: Metibor/Ambermoon
 void ExecuteEvent(IRenderPlayer player, uint x, uint y, IMapManager mapManager, uint ticks, MapEvent mapEvent)
 {
     if (mapEvent.Type == MapEventType.MapChange)
     {
         // TODO: conditions?
         if (mapEvent is MapChangeEvent mapChangeEvent)
         {
             // The position (x, y) is 1-based in the data so we subtract 1.
             var map = mapManager.GetMap(mapChangeEvent.MapIndex);
             // Moreover the players position is 1 tile below its drawing position in 2D so subtract another 1 from y.
             player.MoveTo(map, mapChangeEvent.X - 1, mapChangeEvent.Y - (map.Type == MapType.Map2D ? 2u : 1u),
                           ticks, true, mapChangeEvent.Direction);
         }
     }
 }
示例#3
0
        public bool TriggerEvents(IRenderPlayer player, EventTrigger trigger,
                                  uint x, uint y, IMapManager mapManager, uint ticks, Savegame savegame)
        {
            if (trigger != EventTrigger.Always)
            {
                // First check character interaction
                var position = new Position((int)x, (int)y);
                foreach (var mapCharacter in mapCharacters.ToList())
                {
                    if (TestCharacterInteraction(mapCharacter.Value, trigger != EventTrigger.Move, position) &&
                        mapCharacter.Value.Interact(trigger, this[(uint)mapCharacter.Value.Position.X,
                                                                  (uint)mapCharacter.Value.Position.Y].Type == Map.TileType.Bed))
                    {
                        return(true);
                    }
                }
            }

            if (x >= Map.Width)
            {
                if (y >= Map.Height)
                {
                    return(adjacentMaps[2].TriggerEvents(game, trigger, x - (uint)Map.Width,
                                                         y - (uint)Map.Height, ticks, savegame));
                }
                else
                {
                    return(adjacentMaps[0].TriggerEvents(game, trigger, x - (uint)Map.Width,
                                                         y, ticks, savegame));
                }
            }
            else if (y >= Map.Height)
            {
                return(adjacentMaps[1].TriggerEvents(game, trigger, x, y - (uint)Map.Height,
                                                     ticks, savegame));
            }
            else
            {
                return(Map.TriggerEvents(game, trigger, x, y, ticks, savegame));
            }
        }