Beispiel #1
0
    void OnLoad()
    {
        var eventTypes = loader.Engine.FindTypesCastableTo <EventAction> ();

        foreach (var type in eventTypes)
        {
            var action = Activator.CreateInstance(type) as EventAction;

            var actionMeta = type.GetCustomAttributes(typeof(EventActionAttribute), false)[0] as EventActionAttribute;
            action.Meta = actionMeta;
            List <EventAction> catList = null;
            var cats = actionsByCategory;
            if (action.Meta.IsInteraction)
            {
                cats = interactionsByCategory;
            }
            else
            {
                actions.Add(action);
            }
            if (!cats.TryGetValue(action.Meta.Category, out catList))
            {
                catList = new List <EventAction>();
                cats.Add(action.Meta.Category, catList);
            }
            catList.Add(action);
        }

        weights = new ActionWeight[actions.Count];
        Loaded  = true;
    }
Beispiel #2
0
    void OnLoad()
    {
        var eventTypes = loader.Engine.FindTypesCastableTo <EventAction>();

        foreach (var type in eventTypes)
        {
            var action = Activator.CreateInstance(type) as EventAction;

            var actionMeta = type.GetCustomAttributes(typeof(EventActionAttribute), false)[0] as EventActionAttribute;
            action.Meta = actionMeta;
            eventActionsByType.Add(type, action);
            List <EventAction> catList = null;

            var cats = eventsByCategory;
            if (action.Meta.IsInteraction)
            {
                cats = interactionsByCategory;
            }
            else if (action.Meta.IsAIAction)
            {
                cats = actionsByCategory;
            }

            actions.Add(action);
            var categories = type.GetInterfaces();
            if (categories.Length > 1 && categories.First(x => x == typeof(DialogOption)) != null)
            {
                var cat = categories.First(x => x != typeof(DialogOption));

                action.Meta.Category = cat.Name;
                cats = dialogsByCategory;
                Debug.Log("Add dialog");
            }
            if (categories.Length == 1)
            {
                if (categories[0] == typeof(DialogOption))
                {
                    cats = dialogsByCategory;
                }
                action.Meta.Category = categories[0].Name;
            }
            else if (categories.Length == 0)
            {
                if (!cats.TryGetValue(typeof(EventAction), out catList))
                {
                    catList = new List <EventAction>();
                    cats.Add(typeof(EventAction), catList);
                }
                catList.Add(action);
            }



            foreach (var cat in categories)
            {
                if (!cats.TryGetValue(cat, out catList))
                {
                    catList = new List <EventAction>();
                    cats.Add(cat, catList);
                }
                catList.Add(action);
            }
        }

        weights = new ActionWeight[actions.Count];
        Loaded  = true;
    }