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); }
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); }