Exemple #1
0
    public int createComponent(Type componentType = null, SG.Component component = null)

    /* Create a skill component which can be used in constructing other components and
     * ultimately a skill.
     *
     * :param Type componentType: One of the SG.Component types (e.g. Step, Status, etc.)
     * :param SG.Component component: If this is filled in
     *
     * :return int componentId: Id of the component that was created.
     */
    {
        if (component == null)
        {
            component = (SG.Component)Activator.CreateInstance(componentType);
        }

        componentMap[component.componentId] = component;

        // Run available components listeners.
        foreach (Action listener in availableComponentsListeners.Values)
        {
            listener();
        }

        return(component.componentId);
    }
    private void updateAvailableComponents()

    /* When an available component is added or removed, update the available components
     * list.
     */
    {
        // Sync available components between what's displayed and what's in state:
        // - Any in state and not displayed need to be added.
        // - Any displayed and not in state need to be removed.
        AvailableComponent[] displayedAvailableComponents =
            availableComponentsContentObj.GetComponentsInChildren <AvailableComponent>();
        List <int> displayedIds = displayedAvailableComponents.Select(
            ac => ac.component.componentId
            ).ToList();

        foreach (AvailableComponent availableComponent in displayedAvailableComponents)
        {
            int componentId = availableComponent.component.componentId;
            if (!skillCreationState.componentMap.ContainsKey(componentId))
            {
                Destroy(availableComponent);
            }
        }
        foreach (KeyValuePair <int, SG.Component> kvp in skillCreationState.componentMap)
        {
            int          componentId = kvp.Key;
            SG.Component component   = kvp.Value;

            // We don't show every component.
            if (!doDisplayComponent(component))
            {
                continue;
            }

            if (!displayedIds.Contains(componentId))
            {
                PrefabInstantiator.P.CreateAvailableComponent(
                    component, availableComponentsContentObj.transform
                    );
            }
        }
    }
    private bool doDisplayComponent(SG.Component component)

    /* Determine whether or not this component should be shown in the available
     * components list.
     *
     * :param SG.Component component:
     *
     * :return bool:
     */
    {
        bool doDisplay = true;

        // Don't show Step components in the available components list, since they are
        // the outermost component type (besides skills themselves).
        if (component.GetType() == typeof(SG.Step))
        {
            doDisplay = false;
        }

        return(doDisplay);
    }
Exemple #4
0
    public GameObject CreateAvailableComponent(
        SG.Component component, Transform parent = null
        )

    /* Create a display for a skill grammar component that is available to use within a
     * skill somehow.
     *
     * :param SG.Component component: Which skill grammar component this display is about.
     * :param Transform parent: If supplied, make this object a child of `parent`.
     *
     * :returns GameObject availableComponentObj:
     */
    {
        GameObject availableComponentObj = Instantiate(
            availableComponentPrefab, Vector3.zero, Quaternion.identity
            );

        AvailableComponent availableComponent =
            availableComponentObj.GetComponent <AvailableComponent>();

        availableComponent.component = component;

        // The available component is a UI object, so make it a child of Canvas.
        parent = parent != null ? parent : canvasObj.transform;
        availableComponentObj
        .GetComponent <RectTransform>()
        .transform.SetParent(parent);

        // Set position and size.
        Vector3 position =
            availableComponentObj.GetComponent <RectTransform>().localPosition;

        position.z = 0;
        availableComponentObj.GetComponent <RectTransform>().localPosition = position;
        availableComponentObj.GetComponent <RectTransform>().localScale    = Vector3.one;

        return(availableComponentObj);
    }