Inheritance: DropInteraction
Beispiel #1
0
    public void VariableSettings(BaseInteraction target)
    {
        GUILayout.Label("Variable conditions", EditorStyles.boldLabel);
        if(target.variableKey.Length > 0 || target.numberVarKey.Length > 0)
        {
            target.needed = (AIConditionNeeded)EditorGUILayout.EnumPopup("Needed", target.needed);
            target.autoDestroyOnVariables = EditorGUILayout.Toggle("Auto destroy",
                    target.autoDestroyOnVariables);
        }

        if(GUILayout.Button("Add Variable", GUILayout.Width(150)))
        {
            target.AddVariableCondition();
        }
        if(target.variableKey.Length > 0)
        {
            for(int i=0; i<target.variableKey.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();
                if(GUILayout.Button("Remove", GUILayout.Width(75)))
                {
                    target.RemoveVariableCondition(i);
                    return;
                }
                target.checkType[i] = EditorGUILayout.Toggle(target.checkType[i], GUILayout.Width(20));
                target.variableKey[i] = EditorGUILayout.TextField(target.variableKey[i]);
                if(target.checkType[i]) GUILayout.Label("== ");
                else GUILayout.Label(" != ");
                target.variableValue[i] = EditorGUILayout.TextField(target.variableValue[i]);
                EditorGUILayout.EndHorizontal();
            }
        }

        if(GUILayout.Button("Add Number Variable", GUILayout.Width(150)))
        {
            target.AddNumberVariableCondition();
        }
        if(target.numberVarKey.Length > 0)
        {
            for(int i=0; i<target.numberVarKey.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();
                if(GUILayout.Button("Remove", GUILayout.Width(75)))
                {
                    target.RemoveNumberVariableCondition(i);
                    return;
                }
                target.numberCheckType[i] = EditorGUILayout.Toggle(target.numberCheckType[i], GUILayout.Width(20));
                target.numberVarKey[i] = EditorGUILayout.TextField(target.numberVarKey[i]);
                if(!target.numberCheckType[i]) GUILayout.Label("not");
                target.numberValueCheck[i] = (ValueCheck)EditorGUILayout.EnumPopup(target.numberValueCheck[i]);
                target.numberVarValue[i] = EditorGUILayout.FloatField(target.numberVarValue[i]);
                EditorGUILayout.EndHorizontal();
            }
        }

        if(GUI.changed)
            EditorUtility.SetDirty(target);
    }
Beispiel #2
0
        private void OnInteractiveObjectStateChanged(Object p_sender, EventArgs p_args)
        {
            BaseObjectEventArgs baseObjectEventArgs = p_args as BaseObjectEventArgs;

            if (baseObjectEventArgs != null && baseObjectEventArgs.Object == MyController)
            {
                m_interaction = (BaseInteraction)p_sender;
                ObjectState(MyController.State == EInteractiveObjectState.LEVER_DOWN, false);
            }
        }
Beispiel #3
0
        private void OnDoorStateChanged(Object p_sender, EventArgs p_args)
        {
            DoorEntityEventArgs doorEntityEventArgs = (DoorEntityEventArgs)p_args;

            if (doorEntityEventArgs.Animate && doorEntityEventArgs.Object == MyController)
            {
                m_interaction = (BaseInteraction)p_sender;
                ObjectState(doorEntityEventArgs.TargetState == EInteractiveObjectState.DOOR_OPEN, false);
            }
        }
        private void OnInteractiveObjectStateChanged(Object p_sender, EventArgs p_args)
        {
            BaseObjectEventArgs baseObjectEventArgs = p_args as BaseObjectEventArgs;

            if (baseObjectEventArgs != null && baseObjectEventArgs.Object == MyController)
            {
                m_interaction = (BaseInteraction)p_sender;
                m_state       = !m_state;
                ObjectState(m_state);
            }
        }
Beispiel #5
0
    void OnInteractionTriggerExit(ChildCollider callingChildCollider, Collider other)
    {
        BaseInteraction interactable = other.gameObject.GetComponent <BaseInteraction>();

        if (interactable)
        {
            overlappingInteractables.Remove(other);
            if (overlappingInteractables.Count <= 0 && selectedInteractable)
            {
                selectedInteractable.OnDeselected();
                selectedInteractable = null;
            }
        }
    }
Beispiel #6
0
    void OnInteractionTriggerEnter(ChildCollider callingChildCollider, Collider other)
    {
        BaseInteraction interactable = other.gameObject.GetComponent <BaseInteraction>();

        if (interactable)
        {
            overlappingInteractables.Add(other);
            if (overlappingInteractables.Count < 2)
            {
                selectedInteractable = interactable;
                selectedInteractable.OnSelected();
            }
        }

        return;
    }
Beispiel #7
0
        private void OnDoorStateChanged(Object p_sender, EventArgs p_args)
        {
            DoorEntityEventArgs doorEntityEventArgs = (DoorEntityEventArgs)p_args;

            if (doorEntityEventArgs.Animate && doorEntityEventArgs.Object == MyController)
            {
                m_interaction = (BaseInteraction)p_sender;
                if (doorEntityEventArgs.TargetState == EInteractiveObjectState.DOOR_OPEN || doorEntityEventArgs.TargetState == EInteractiveObjectState.DOOR_CLOSED)
                {
                    ObjectState(doorEntityEventArgs.TargetState, true);
                }
                else
                {
                    Debug.LogError("Secret Door State Change - Wrong TargetState: " + doorEntityEventArgs.TargetState);
                }
            }
        }
Beispiel #8
0
    public void EventStartSettings(BaseInteraction target)
    {
        target.startType = (EventStartType)EditorGUILayout.EnumPopup("Start type",
                    target.startType);

        if(EventStartType.INTERACT.Equals(target.startType))
        {
            target.maxMouseDistance = EditorGUILayout.FloatField("Max mouse distance",
                    target.maxMouseDistance);
        }
        else if(EventStartType.KEY_PRESS.Equals(target.startType))
        {
            target.keyToPress = EditorGUILayout.TextField("Key to press",
                    target.keyToPress);
            target.keyPressInTrigger = EditorGUILayout.Toggle("In trigger",
                    target.keyPressInTrigger);
        }
        else if(EventStartType.DROP.Equals(target.startType))
        {
            target.dropType = (ItemDropType)EditorGUILayout.EnumPopup("Item type",
                    target.dropType);
            if(ItemDropType.ITEM.Equals(target.dropType))
            {
                target.dropID = EditorGUILayout.Popup("Item",
                        target.dropID, DataHolder.Items().GetNameList(true));
            }
            else if(ItemDropType.WEAPON.Equals(target.dropType))
            {
                target.dropID = EditorGUILayout.Popup("Weapon",
                        target.dropID, DataHolder.Weapons().GetNameList(true));
            }
            else if(ItemDropType.ARMOR.Equals(target.dropType))
            {
                target.dropID = EditorGUILayout.Popup("Armor",
                        target.dropID, DataHolder.Armors().GetNameList(true));
            }
            target.consumeDrop = EditorGUILayout.Toggle("Consume item",
                    target.consumeDrop);
        }

        if(GUI.changed)
            EditorUtility.SetDirty(target);
    }
Beispiel #9
0
 /// <summary>
 /// 인스펙터에서 공통적으로 사용될 Editor UI 함수 - 시작 타입 설정하는 곳에 사용됨.
 /// </summary>
 /// <param name="p_Target"></param>
 public void EventStartSettings(BaseInteraction p_Target)
 {
     //+ 시작 타입을 지정.
     p_Target.startType = (EventStartType)EditorGUILayout.EnumPopup("Start type", p_Target.startType);
     //+ 만약 마우스 클릭이나 터치가 시작타입이라면 클릭영역 크기를 지정.
     if (EventStartType.INTERACT.Equals(p_Target.startType))
     {
         p_Target.maxMouseDistance = EditorGUILayout.FloatField("Max mouse distance", p_Target.maxMouseDistance);
     } //+ 만약 시작타입이 키입력이라면 입력 키를 지정할 수 있다.
     else if (EventStartType.KEY_PRESS.Equals(p_Target.startType))
     {
         p_Target.keyToPress        = EditorGUILayout.TextField("Key to press", p_Target.keyToPress); //ex) p,space,alpha1..
         p_Target.keyPressInTrigger = EditorGUILayout.Toggle("In trigger", p_Target.keyPressInTrigger);
     }
     //+ 수정되었다면 Dirty를 발생시켜 적용시켜 준다.
     if (GUI.changed)
     {
         EditorUtility.SetDirty(p_Target);
     }
 }
        public override void Execute(Grid p_grid)
        {
            m_allSatisfied = (m_conditions.Count > 0);
            foreach (ObjectCondition objectCondition in m_conditions)
            {
                InteractiveObject interactiveObject = p_grid.FindInteractiveObject(objectCondition.id);
                if (interactiveObject == null)
                {
                    m_allSatisfied = false;
                    break;
                }
                if (interactiveObject.State != objectCondition.wantedState)
                {
                    m_allSatisfied = false;
                    break;
                }
            }
            EInteractionTiming einteractionTiming = EInteractionTiming.ON_FAIL;

            if (m_allSatisfied)
            {
                einteractionTiming = EInteractionTiming.ON_SUCCESS;
            }
            for (Int32 i = 0; i < Commands.Count; i++)
            {
                SpawnCommand spawnCommand = Commands[i];
                if ((spawnCommand.Timing == einteractionTiming || spawnCommand.Timing == EInteractionTiming.ON_EXECUTE) && (spawnCommand.ActivateCount == -1 || spawnCommand.ActivateCount > 0))
                {
                    BaseInteraction baseInteraction = InteractionFactory.Create(this, spawnCommand, SpawnerID, i);
                    if (baseInteraction.Valid && (spawnCommand.RequiredState == EInteractiveObjectState.NONE || StateIsMatching(spawnCommand, baseInteraction)))
                    {
                        Interactions.Add(baseInteraction);
                    }
                }
                m_stateMachine.ChangeState(EState.IDLE);
            }
            if (einteractionTiming == EInteractionTiming.ON_SUCCESS && QuestObjectives != null && QuestObjectives.Count > 0)
            {
                LegacyLogic.Instance.WorldManager.QuestHandler.ObjectInteraction(this);
            }
        }
    private void HandleInteractionStrategy()
    {
        switch (interactionOption)
        {
        case InteractionOption.Custom:
            if (interactionBehaviour == null)
            {
                Debug.LogError("No BaseInteraction assigned to Interactable", gameObject);
            }
            if (noItemInteractionBehaviour == null && addNoRequiredItemInteraction)
            {
                Debug.LogError("No BaseInteraction for no Item assigned to Interactable", gameObject);
            }
            break;

        case InteractionOption.CustomAuto:
            interactionBehaviour = gameObject.GetComponent <BaseInteraction>();
            if (interactionBehaviour == null)
            {
                Debug.LogError("No Script with BaseInteraction on Object to be auto added to Interactable", gameObject);
            }
            break;

        case InteractionOption.ConsoleLog:
            interactionBehaviour = gameObject.AddComponent <ConsoleInteraction>();
            break;

        case InteractionOption.Rotate:
            interactionBehaviour = gameObject.AddComponent <RotateInteraction>();
            break;

        case InteractionOption.Empty:
            interactionBehaviour = gameObject.AddComponent <EmptyInteraction>();
            break;

        default:
            interactionBehaviour = gameObject.AddComponent <EmptyInteraction>();
            break;
        }
    }
        private void UpdateName(InteractiveObject p_interactiveObject)
        {
            Boolean flag = false;
            IEnumerable <InteractiveObjectTooltipStaticData> iterator = StaticDataHandler.GetIterator <InteractiveObjectTooltipStaticData>(EDataType.INTERACTIVE_OBJECT_TOOLTIPS);
            KeyCode keyCode = KeyConfigManager.KeyBindings[EHotkeyType.INTERACT].Key1;

            if (keyCode == KeyCode.None)
            {
                keyCode = KeyConfigManager.KeyBindings[EHotkeyType.INTERACT].AltKey1;
            }
            String text = m_actionColorHex + "[" + LocaManager.GetText("OPTIONS_INPUT_KEYNAME_" + keyCode.ToString().ToUpper()) + "][-]";

            if (!String.IsNullOrEmpty(p_interactiveObject.Prefab))
            {
                String directoryName = Path.GetDirectoryName(p_interactiveObject.Prefab);
                foreach (InteractiveObjectTooltipStaticData interactiveObjectTooltipStaticData in iterator)
                {
                    if (interactiveObjectTooltipStaticData.PrefabFolder == directoryName || interactiveObjectTooltipStaticData.PrefabFolder == p_interactiveObject.Prefab)
                    {
                        m_label.text = LocaManager.GetText(interactiveObjectTooltipStaticData.LocaKey, text);
                        flag         = true;
                        break;
                    }
                }
            }
            if (p_interactiveObject is Button)
            {
                if (!flag)
                {
                    m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_BUTTON", text);
                }
                return;
            }
            if (p_interactiveObject is Lever)
            {
                if (!flag)
                {
                    m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_LEVER", text);
                }
                return;
            }
            if (!(p_interactiveObject is Barrel))
            {
                if (p_interactiveObject is Container)
                {
                    Container container = p_interactiveObject as Container;
                    if (!container.IsEmpty())
                    {
                        if (!flag)
                        {
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_CONTAINER", text);
                        }
                    }
                    else
                    {
                        foreach (SpawnCommand spawnCommand in container.Commands)
                        {
                            if (spawnCommand.Type == EInteraction.CHANGE_ATTRIBUTE)
                            {
                                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_CONTAINER", text);
                                return;
                            }
                        }
                        m_label.text = String.Empty;
                    }
                    return;
                }
                if (p_interactiveObject is Door)
                {
                    if (LegacyLogic.Instance.WorldManager.Party.SelectedInteractiveObject == null || p_interactiveObject.IsSecret)
                    {
                        m_label.text = String.Empty;
                        return;
                    }
                    if (((Door)p_interactiveObject).State == EInteractiveObjectState.DOOR_OPEN)
                    {
                        m_label.text = String.Empty;
                    }
                    else
                    {
                        m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_DOOR", text);
                    }
                    return;
                }
                else
                {
                    if (p_interactiveObject is Sign)
                    {
                        if (!flag)
                        {
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_SIGN", text);
                        }
                        return;
                    }
                    if (p_interactiveObject is Entrance)
                    {
                        if (flag)
                        {
                            return;
                        }
                        Entrance entrance = (Entrance)p_interactiveObject;
                        String   text2    = entrance.MinimapTooltipLocaKey;
                        if (!String.IsNullOrEmpty(text2))
                        {
                            text2        = LocaManager.GetText(entrance.MinimapTooltipLocaKey);
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_ENTRANCE", text, text2);
                            return;
                        }
                        text2 = null;
                        foreach (SpawnCommand spawnCommand2 in entrance.Commands)
                        {
                            if (spawnCommand2.Type == EInteraction.USE_ENTRANCE)
                            {
                                String[] array = spawnCommand2.Extra.Split(new Char[]
                                {
                                    ','
                                });
                                text2 = array[0].Replace(".xml", String.Empty);
                                break;
                            }
                        }
                        if (text2 != null)
                        {
                            GridInfo gridInfo = LegacyLogic.Instance.MapLoader.FindGridInfo(text2);
                            if (gridInfo != null)
                            {
                                text2 = LocaManager.GetText(gridInfo.LocationLocaName);
                                if (LegacyLogic.Instance.MapLoader.Grid.Type == EMapType.DUNGEON)
                                {
                                    text2 = text2.Replace("@", ", ");
                                }
                                else if (text2.LastIndexOf('@') != -1)
                                {
                                    text2 = text2.Remove(text2.LastIndexOf('@'));
                                }
                                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_ENTRANCE", text, text2);
                                return;
                            }
                            Debug.LogError("Grid Info not found " + text2);
                        }
                    }
                    else if (p_interactiveObject is NpcContainer)
                    {
                        NpcContainer npcContainer = (NpcContainer)p_interactiveObject;
                        if (!npcContainer.IsEnabled)
                        {
                            m_label.text = String.Empty;
                            return;
                        }
                        String minimapTooltipLocaKey = npcContainer.MinimapTooltipLocaKey;
                        if (!String.IsNullOrEmpty(npcContainer.IndoorScene))
                        {
                            if (!String.IsNullOrEmpty(minimapTooltipLocaKey))
                            {
                                String text3 = LocaManager.GetText(minimapTooltipLocaKey);
                                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_BUILDING_DEFAULT", text, text3);
                                return;
                            }
                            foreach (InteractiveObjectTooltipStaticData interactiveObjectTooltipStaticData2 in iterator)
                            {
                                if (interactiveObjectTooltipStaticData2.PrefabFolder == npcContainer.IndoorScene)
                                {
                                    m_label.text = LocaManager.GetText(interactiveObjectTooltipStaticData2.LocaKey, text);
                                    return;
                                }
                            }
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_INDOOR_CONTEXT", text);
                            return;
                        }
                        else
                        {
                            if (!npcContainer.Npcs[0].IsEnabled)
                            {
                                m_label.text = String.Empty;
                                return;
                            }
                            foreach (SpawnCommand spawnCommand3 in npcContainer.Commands)
                            {
                                if (spawnCommand3.Type == EInteraction.START_DEFINED_DIALOG && !String.IsNullOrEmpty(spawnCommand3.Precondition) && spawnCommand3.Precondition.StartsWith("PARTY_CHECK"))
                                {
                                    BasePrecondition basePrecondition = BaseInteraction.ParsePrecondition(spawnCommand3.Precondition);
                                    if (basePrecondition is PartyCheckPrecondition && !((PartyCheckPrecondition)basePrecondition).Evaluate())
                                    {
                                        m_label.text = String.Empty;
                                        return;
                                    }
                                }
                            }
                            if (flag)
                            {
                                return;
                            }
                            if (!String.IsNullOrEmpty(minimapTooltipLocaKey))
                            {
                                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_NPC", text, minimapTooltipLocaKey);
                                return;
                            }
                            if (npcContainer.Npcs[0].StaticID != 224 && npcContainer.Npcs[0].StaticID != 225)
                            {
                                String text4 = LocaManager.GetText(npcContainer.Npcs[0].StaticData.NameKey);
                                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_NPC", text, text4);
                                return;
                            }
                        }
                    }
                    else if (p_interactiveObject is RechargingObject)
                    {
                        RechargingObject rechargingObject = (RechargingObject)p_interactiveObject;
                        if (rechargingObject.IsFountain())
                        {
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_FOUNTAIN", text);
                        }
                        else if (rechargingObject.IsCrystal())
                        {
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_CRYSTAL", text);
                        }
                        else
                        {
                            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_STATUE", text);
                        }
                        return;
                    }
                    m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_FALLBACK", text);
                }
                return;
            }
            Barrel barrel = p_interactiveObject as Barrel;

            if (barrel.State == EInteractiveObjectState.BARREL_EMPTY)
            {
                m_label.text = String.Empty;
                return;
            }
            if (barrel.State == EInteractiveObjectState.BARREL_OPEN)
            {
                m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_FALLBACK", text);
                return;
            }
            m_label.text = LocaManager.GetText("INTERACT_TOOLTIP_BARREL", text);
        }
Beispiel #13
0
    // Update is called once per frame
    void Update()
    {
        // Cache local variables
        Vector3 movementAcceleration = Vector3.zero;
        float   deltaTime            = Time.deltaTime;
        bool    moveAxisPressed      = PlayerInputManager.PlayerActions.moveAxis.IsPressed && CanWalk();

        // Update lateral movement if appropriate
        if (moveAxisPressed || ownerCharacterController.velocity.sqrMagnitude > 0.0f)
        {
            // Transform camera space input into world space
            // If movement is pressed use the pressed direction
            // Otherwise, use the current velocity
            Vector3 horizontalDirection;
            float   horizontalAccelerationScalar = 1.0f;
            if (moveAxisPressed)
            {
                Vector2 moveInput = new Vector2(PlayerInputManager.PlayerActions.moveAxis.X, PlayerInputManager.PlayerActions.moveAxis.Y);
                horizontalDirection          = ownerCamera.transform.TransformDirection(new Vector3(moveInput.x, 0.0f, moveInput.y));
                horizontalDirection.y        = 0.0f;
                horizontalAccelerationScalar = Mathf.Clamp(moveInput.magnitude, -1.0f, 1.0f);
            }
            else
            {
                horizontalDirection = new Vector3(ownerCharacterController.velocity.x, 0.0f, ownerCharacterController.velocity.z);
            }

            if (horizontalDirection != Vector3.zero)
            {
                // Normalize to get the final movement direction
                horizontalDirection.Normalize();

                // Get the acceleration based on the movement direction
                movementAcceleration = GetHorizontalAcceleration(horizontalDirection, horizontalAccelerationScalar, deltaTime);

                // Rotate towards the movement direction
                transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(horizontalDirection), movementTurningSpeed * deltaTime);
            }

            characterAnimator.SetBool(walkAnimKey, true);
        }
        else
        {
            characterAnimator.SetBool(walkAnimKey, false);
        }

        // Update jump state
        if (ownerCharacterController.isGrounded)
        {
            // Start when pressed
            if (PlayerInputManager.PlayerActions.jump.WasPressed && CanJump())
            {
                verticalSpeed      = jumpAcceleration;
                fatJumping         = true;
                jumpStartTimeStamp = Time.time;
                characterAnimator.SetBool(jumpAnimKey, true);
            }
            // Stop when on the ground
            else
            {
                verticalSpeed = -gravity;
                fatJumping    = false;
                characterAnimator.SetBool(jumpAnimKey, false);
            }
        }

        // Update falling state
        else
        {
            // Update fat jumping
            if (fatJumping)
            {
                // End fat jump when jump released or we go beyond the maximum time
                if (!PlayerInputManager.PlayerActions.jump.IsPressed || Time.time - jumpStartTimeStamp > fatJumpTime)
                {
                    fatJumping     = false;
                    verticalSpeed -= gravity * Time.deltaTime;
                }

                // Otherwise, continue fat jumping
                // Do nothing in that case
            }

            // Handle gradual deceleration
            else
            {
                // Double deceleration at jump maximum
                verticalSpeed -= gravity * deltaTime * (verticalSpeed < 0.0f ? 2.0f : 1.0f);
            }
        }

        // Combine and apply horizontal and vertical movement
        movementAcceleration.y = verticalSpeed * deltaTime;
        if (movementAcceleration != Vector3.zero)
        {
            ownerCharacterController.Move(movementAcceleration);
        }

        // Update the best interactable if appropriate
        if (overlappingInteractables.Count > 1)
        {
            // Find the interactable we are closest to
            BaseInteraction bestInteractable = null;
            float           smallestDistance = 9999.0f;
            foreach (Collider interactable in overlappingInteractables)
            {
                float distanceToInteractable = Vector3.Distance(ownerCharacterController.transform.position, interactable.transform.position);
                if (distanceToInteractable < smallestDistance)
                {
                    bestInteractable = interactable.gameObject.GetComponent <BaseInteraction>();
                    smallestDistance = distanceToInteractable;
                }
            }

            // Update our best interactable
            if (bestInteractable != selectedInteractable)
            {
                // Deselect old best
                if (selectedInteractable)
                {
                    selectedInteractable.OnDeselected();
                }

                // Select new best
                selectedInteractable = bestInteractable;
                if (selectedInteractable)
                {
                    selectedInteractable.OnSelected();
                }
            }
        }

        // Interact with selected interactable if appropriate
        if (PlayerInputManager.PlayerActions.interact.WasPressed && selectedInteractable && CanInteract())
        {
            selectedInteractable.TryInteract();
            for (int i = 0; i < overlappingInteractables.Count; i++)
            {
                if (selectedInteractable.gameObject.name == overlappingInteractables[i].gameObject.name)
                {
                    EnableDisable overlap = overlappingInteractables[i].GetComponent <EnableDisable>();
                    for (int x = 0; x < overlap.toDisable.Length; x++)
                    {
                        if (overlap.toDisable[x].gameObject.name == selectedInteractable.gameObject.name)
                        {
                            overlappingInteractables.RemoveAt(i);
                        }
                    }
                }
            }
        }
    }
 public IInteractionService RegisterAction(BaseInteraction Action)
 {
     actions.Add(Action);
     return(this);
 }
Beispiel #15
0
 /// <summary>
 /// 인스펙터에서 공통적으로 사용될 Editor UI함수 - 시작 값이나 필요 값들을 설정하는 곳에 사용됨.
 /// </summary>
 /// <param name="p_Target"></param>
 public void VariableSettings(BaseInteraction p_Target)
 {
     //+ 타이틀.
     GUILayout.Label("Variable conditions", EditorStyles.boldLabel);
     //+ 필요 조건과 조건이 일회성으로 자동 삭제 될것인지 설정.
     if (p_Target.variableKey.Length > 0 || p_Target.numberVarKey.Length > 0)
     {
         p_Target.needed = (AIConditionNeeded)EditorGUILayout.EnumPopup("Needed", p_Target.needed);
         p_Target.autoDestroyOnVariables = EditorGUILayout.Toggle("Auto destroy", p_Target.autoDestroyOnVariables);
     }
     //+ 값 추가 버튼.
     if (GUILayout.Button("Add Variable", GUILayout.Width(150)))
     {
         p_Target.AddVariableCondition();
     }
     if (p_Target.variableKey.Length > 0)
     {
         for (int i = 0; i < p_Target.variableKey.Length; i++)
         {
             EditorGUILayout.BeginHorizontal();
             if (GUILayout.Button("Remove", GUILayout.Width(75)))
             {
                 p_Target.RemoveVariableCondition(i);
                 return;
             }
             //+값 설정.
             p_Target.checkType[i]   = EditorGUILayout.Toggle(p_Target.checkType[i], GUILayout.Width(20));
             p_Target.variableKey[i] = EditorGUILayout.TextField(p_Target.variableKey[i]);
             if (p_Target.checkType[i])
             {
                 GUILayout.Label("== ");
             }
             else
             {
                 GUILayout.Label(" != ");
             }
             p_Target.variableValue[i] = EditorGUILayout.TextField(p_Target.variableValue[i]);
             EditorGUILayout.EndHorizontal();
         }
     }
     //+ 숫자 값 추가.
     if (GUILayout.Button("Add Number Variable", GUILayout.Width(150)))
     {
         p_Target.AddNumberVariableCondition();
     }
     if (p_Target.numberVarKey.Length > 0)
     {
         for (int i = 0; i < p_Target.numberVarKey.Length; i++)
         {
             EditorGUILayout.BeginHorizontal();
             if (GUILayout.Button("Remove", GUILayout.Width(75)))
             {
                 p_Target.RemoveNumberVariableCondition(i);
                 return;
             }
             //+ 숫자 값 설정.
             p_Target.numberCheckType[i] = EditorGUILayout.Toggle(p_Target.numberCheckType[i], GUILayout.Width(20));
             p_Target.numberVarKey[i]    = EditorGUILayout.TextField(p_Target.numberVarKey[i]);
             if (!p_Target.numberCheckType[i])
             {
                 GUILayout.Label("not");
             }
             p_Target.numberValueCheck[i] = (ValueCheck)EditorGUILayout.EnumPopup(p_Target.numberValueCheck[i]);
             p_Target.numberVarValue[i]   = EditorGUILayout.FloatField(p_Target.numberVarValue[i]);
             EditorGUILayout.EndHorizontal();
         }
     }
     //+ 수정된 것이 있다면  Dirty를 발생시켜 화면에 적용시켜 준다.
     if (GUI.changed)
     {
         EditorUtility.SetDirty(p_Target);
     }
 }