bool OnTextEvent(TextEvent e, Action continuation)
        {
            var eventManager = Resolve <IEventManager>();
            var mapManager   = Resolve <IMapManager>();

            var(useEventText, textSourceId) = eventManager.Context?.Source switch
            {
                EventSource.Map map => (false, (int)map.MapId),
                EventSource.EventSet eventSet => (true, (int)eventSet.EventSetId),
                _ => (false, (int)mapManager.Current.MapId)
            };

            var textEvent =
                useEventText
                    ?  (BaseTextEvent) new EventTextEvent(
                    (EventSetId)textSourceId,
                    e.TextId,
                    e.Location,
                    e.PortraitId)
                    : new MapTextEvent(
                    (MapDataId)textSourceId,
                    e.TextId,
                    e.Location,
                    e.PortraitId);

            return(OnBaseTextEvent(textEvent, continuation));
        }
Exemple #2
0
        bool Run(DoScriptEvent doScriptEvent, Action continuation)
        {
            var assets     = Resolve <IAssetManager>();
            var mapManager = Resolve <IMapManager>();

            var events = assets.LoadScript(doScriptEvent.ScriptId);
            var nodes  = new EventNode[events.Count];
            var chain  = new EventChain(0);

            // Create, link and add all the nodes.
            for (ushort i = 0; i < events.Count; i++)
            {
                nodes[i] = new EventNode(i, events[i]);
            }
            for (ushort i = 0; i < events.Count - 1; i++)
            {
                nodes[i].Next = nodes[i + 1];
            }
            for (ushort i = 0; i < events.Count; i++)
            {
                chain.Events.Add(nodes[i]);
            }

            var source  = new EventSource.Map(mapManager.Current.MapId, TriggerType.Default, 0, 0); // TODO: Is there a better trigger type for this?
            var trigger = new TriggerChainEvent(chain, chain.FirstEvent, source);

            return(RaiseAsync(trigger, continuation) > 0);
        }
        bool OnPartyMemberTextEvent(PartyMemberTextEvent e, Action continuation)
        {
            var state        = Resolve <IGameState>();
            var party        = Resolve <IParty>();
            var sheet        = state.GetPartyMember(e.MemberId ?? party.Leader);
            var eventManager = Resolve <IEventManager>();
            var mapManager   = Resolve <IMapManager>();

            var(useEventText, textSourceId) = eventManager.Context?.Source switch
            {
                EventSource.Map map => (false, (int)map.MapId),
                EventSource.EventSet eventSet => (true, (int)eventSet.EventSetId),
                _ => (false, (int)mapManager.Current.MapId)
            };

            var textEvent =
                useEventText
                    ?  (BaseTextEvent) new EventTextEvent(
                    (EventSetId)textSourceId,
                    e.TextId,
                    TextLocation.TextInWindowWithPortrait,
                    sheet.PortraitId)
                    : new MapTextEvent(
                    (MapDataId)textSourceId,
                    e.TextId,
                    TextLocation.TextInWindowWithPortrait,
                    sheet.PortraitId);

            return(OnBaseTextEvent(textEvent, continuation));
        }