Esempio n. 1
0
    public void TryDoAction()
    {
        bool canDoAction = false;

        RaycastHit[] hits = Physics.SphereCastAll(transform.position, _actionRadius, Vector3.up, 10f);
        foreach (RaycastHit hit in hits)
        {
            AControlable controlable = hit.collider.gameObject.GetComponentInParent <AControlable>();
            if (controlable && hit.collider.gameObject != gameObject)
            {
                foreach (AActionable destActionable in controlable.actionables)
                {
                    if ((objectType & destActionable.objectActionable) != ObjectType.Undefined)
                    {
                        canDoAction = true;
                        Debug.Log($"ACTION: '{objectType}' is actioning '{controlable.objectType}'.");
                        destActionable.DoAction();
                    }
                }
            }
        }


        // Use bool to avoid doing action multiple times
        if (canDoAction || _hasSelfAction)
        {
            DoAction();
            DoChildAction();
        }
    }
Esempio n. 2
0
    void SnapObject(AControlable controlable)
    {
        Debug.Log("Snap Object");
        AControlable refControlable = _refMaison.GetObject(controlable.objectType);

        StartCoroutine(SnapObjectCoroutine(controlable, refControlable));
    }
Esempio n. 3
0
 void CheckObjectState(AControlable controlable)
 {
     if (_refMaison.CheckObjectState(controlable) && !IsNeeded(controlable))
     {
         Debug.Log("Object placed properly -> TODO add feedback");
         SnapObject(controlable);
         if (!_refMaison.CheckValidated(controlable))
         {
             return;
         }
         controlable.isLocked = true;
         SoundManager.PlaySound(Random.value > 0.5 ? Random.value > 0.5f ? "snap_1" : "snap_2" : "snap_3", controlable.transform.position);
         if (_refMaison.CheckObjects(_maisons[_currentHouse]))
         {
             Debug.Log("All objects are ok, opening next house.");
             OpenNextHouse();
             if (closeDoorIfValidate)
             {
                 foreach (var controlableClose in _maisons[_currentHouse - 1]._controlables)
                 {
                     controlableClose.isLocked = true;
                 }
             }
         }
     }
 }
Esempio n. 4
0
    public virtual bool IsSameState(AControlable controlable)
    {
        Vector3 position1 = transform.root.position - transform.position;
        Vector3 position2 = controlable.transform.root.position - controlable.transform.position;
        float   distance  = Vector3.Distance(position1, position2);

        return(distance < _distanceSnapMinimum);
    }
Esempio n. 5
0
 bool IsNeeded(AControlable controlable)
 {
     foreach (AControlable houseControlable in _maisons[_currentHouse]._controlables)
     {
         if (!houseControlable.ReactionableValidated())
         {
             foreach (AReactionable reactionable in houseControlable.reactionables)
             {
                 if (reactionable.objectActionable == controlable.objectType)
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Esempio n. 6
0
    IEnumerator SnapObjectCoroutine(AControlable controlable, AControlable refControlable)
    {
        Vector3    originPosition = controlable.transform.localPosition;
        Vector3    refPosition    = refControlable.transform.localPosition;
        Quaternion originRotation = controlable.transform.localRotation;
        Quaternion refRotation    = refControlable.transform.localRotation;
        float      time           = 1f;
        Renderer   renderer       = GetComponent <Renderer>();

        while (time > 0f)
        {
            time -= Time.deltaTime;
            controlable.transform.localRotation = Quaternion.Lerp(refRotation, originRotation, time);
            controlable.transform.localPosition = Vector3.Lerp(refPosition, originPosition, time);
            yield return(null);
        }
        yield return(null);
    }
Esempio n. 7
0
 public bool IsValidated(AControlable refControlable, AControlable controlable)
 {
     return(refControlable.IsValidated(controlable));
 }
Esempio n. 8
0
 public bool CheckValidated(AControlable controlable)
 {
     return(IsValidated(GetObject(controlable.objectType), controlable));
 }
Esempio n. 9
0
 public bool IsSameState(AControlable refControlable, AControlable controlable)
 {
     return(refControlable.IsSameState(controlable));
 }
Esempio n. 10
0
 public bool CheckObjectState(AControlable controlable)
 {
     return(IsSameState(GetObject(controlable.objectType), controlable));
 }
Esempio n. 11
0
 public virtual bool IsValidated(AControlable controlable)
 {
     return(ReactionableValidated() == controlable.ReactionableValidated());
 }
Esempio n. 12
0
    private void Update()
    {
        switch (_state)
        {
        case PlayerState.ControllingPlayer: {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit hit;
                if (Physics.Raycast(_camera.transform.position, _camera.transform.forward, out hit, Mathf.Infinity))
                {
                    AControlable controlable = hit.collider.gameObject.GetComponentInParent <AControlable>();
                    if (controlable != null)
                    {
                        if (!controlable.isLocked)
                        {
                            Debug.Log("Object Selected: " + controlable);
                            _controlledObject = controlable;

                            Vector3             positionControlledObject = _controlledObject.transform.position;
                            CharacterController controller = GetComponent <CharacterController>();
                            positionControlledObject.y = transform.position.y;

                            controller.enabled      = false;
                            transform.position      = positionControlledObject;
                            controller.enabled      = true;
                            _controlledObjectParent = _controlledObject.transform.parent;
                            _controlledObject.transform.SetParent(transform);
                            _controlledObject.transform.forward = transform.forward;
                            _camera.GetComponent <CameraOcclusionProtector>().distanceToTarget = 8f;
                            _state = PlayerState.ControllingObject;
                            _controlledObject.SetWalking(true);
                            SoundManager.PlaySound("control_1", _controlledObject.transform.position);
                        }
                        else
                        {
                            SoundManager.PlaySound(Random.value > 0.5 ? "lock_1" : "lock_2", hit.point);
                        }
                    }
                }
            }
            break;
        }

        case PlayerState.ControllingObject: {
            if (Input.GetMouseButtonDown(1))
            {
                _controlledObject.TryDoAction();
                OnDoAction.Invoke(_controlledObject);
            }
            else if (Input.GetMouseButtonDown(0))
            {
                Vector3 positionCamera    = _camera.transform.position;
                Vector3 controledPosition = _controlledObject.transform.position;
                positionCamera.y = transform.position.y;
                gameObject.GetComponent <CharacterController>().Move(positionCamera - transform.position);
                // transform.position = positionCamera;
                _controlledObject.transform.SetParent(_controlledObjectParent);
                _controlledObject.transform.position = controledPosition;
                _camera.GetComponent <CameraOcclusionProtector>().distanceToTarget = 0f;
                _controlledObject.SetWalking(false);
                OnObjectReleased.Invoke(_controlledObject);
                _state = PlayerState.ControllingPlayer;
                SoundManager.PlaySound("release_1", _controlledObject.transform.position);
                _controlledObject = null;
            }
            break;
        }
        }
        playerStateAccessor = _state;
    }