private void ActivateReadyDoor()
    {
        InteractiveDoor door = currentInteractive as InteractiveDoor;

        if (door != null && door.isReady)
        {
            GameRoot.current.TriggerNextLevel();
        }
    }
Esempio n. 2
0
    public void EnteredNewScreen()
    {
        UIManager.current.ToggleNextScreenArrow(false);

        isScreenReady = true;
        exitDoor      = null;
        enemyDoors.Clear();

        foreach (LevelInteractive interactive in interactivesOnCamera)
        {
            InteractiveDoor door = interactive as InteractiveDoor;
            if (door != null)
            {
                if (door.doorType == InteractiveDoor.DoorType.Exit)
                {
                    exitDoor = door;
                }
                else if (door.doorType == InteractiveDoor.DoorType.Enemy)
                {
                    enemyDoors.Add(door);
                }
            }
        }

        Vector3 warpPoint;

        warpPoint.x = gameCamera.leftBoundary.transform.localPosition.x +
                      ((BoxCollider)gameCamera.leftBoundary.collider).center.x +
                      ((BoxCollider)gameCamera.leftBoundary.collider).size.x * 0.5f;
        warpPoint.y = gameCamera.transform.localPosition.y + gameCamera.camera.orthographicSize;
        warpPoint.z = 12.5f;

        Ray        ray = new Ray(warpPoint, Vector3.down);
        RaycastHit hitInfo;

        Physics.Raycast(ray, out hitInfo);
        float xOffset = 8f;

        foreach (Player player in players)
        {
            if (player.transform.localPosition.x < gameCamera.leftBoundary.transform.localPosition.x)
            {
                Vector3 playerPosition = player.transform.localPosition;
                playerPosition.x = hitInfo.point.x + player.boxCollider.size.x * 0.5f + xOffset;
                playerPosition.y = hitInfo.point.y + player.boxCollider.size.y * 0.5f;
                player.transform.localPosition = playerPosition;
                xOffset += 8f;
            }
        }
    }
Esempio n. 3
0
    private void CreateEnemyDoor(Color pixelColor, Color objectColor, Color nextColor, GameObject prefab, GameObject rootObject, int x, int y, bool topAnchor = false)
    {
        GameObject enemyDoorObject = CreateObject(pixelColor, objectColor, prefab, rootObject, x, y, topAnchor);

        if (enemyDoorObject != null && pixelColor == objectColor && nextColor != Color.white)
        {
            InteractiveDoor door = enemyDoorObject.GetComponent <InteractiveDoor>();
            if (door != null)
            {
                door.enemyCount[0] = Mathf.RoundToInt(nextColor.r * 255f);
                door.enemyCount[1] = Mathf.RoundToInt(nextColor.g * 255f);
                door.enemyCount[2] = Mathf.RoundToInt(nextColor.b * 255f);
            }
        }
    }
Esempio n. 4
0
    public void EnteredNewScreen()
    {
        UIManager.current.ToggleNextScreenArrow(false);

        isScreenReady = true;
        exitDoor = null;
        enemyDoors.Clear();

        foreach (LevelInteractive interactive in interactivesOnCamera)
        {
            InteractiveDoor door = interactive as InteractiveDoor;
            if (door != null)
            {
                if (door.doorType == InteractiveDoor.DoorType.Exit)
                {
                    exitDoor = door;
                }
                else if (door.doorType == InteractiveDoor.DoorType.Enemy)
                {
                    enemyDoors.Add(door);
                }
            }
        }

        Vector3 warpPoint;
        warpPoint.x = gameCamera.leftBoundary.transform.localPosition.x +
            ((BoxCollider)gameCamera.leftBoundary.collider).center.x +
                ((BoxCollider)gameCamera.leftBoundary.collider).size.x * 0.5f;
        warpPoint.y = gameCamera.transform.localPosition.y + gameCamera.camera.orthographicSize;
        warpPoint.z = 12.5f;

        Ray ray = new Ray(warpPoint, Vector3.down);
        RaycastHit hitInfo;
        Physics.Raycast(ray, out hitInfo);
        float xOffset = 8f;

        foreach (Player player in players)
        {
            if (player.transform.localPosition.x < gameCamera.leftBoundary.transform.localPosition.x)
            {
                Vector3 playerPosition = player.transform.localPosition;
                playerPosition.x = hitInfo.point.x + player.boxCollider.size.x * 0.5f + xOffset;
                playerPosition.y = hitInfo.point.y + player.boxCollider.size.y * 0.5f;
                player.transform.localPosition = playerPosition;
                xOffset += 8f;
            }
        }
    }
    protected override void OnTriggerEnter(Collider other)
    {
        base.OnTriggerEnter(other);

        LevelInteractive interactive = other.gameObject.GetComponent <LevelInteractive>();

        if (interactive != null)
        {
            InteractiveTerminal terminal = interactive as InteractiveTerminal;
            InteractiveDoor     door     = interactive as InteractiveDoor;

            if (terminal != null ||
                door != null && door.doorType == InteractiveDoor.DoorType.Exit && door.isReady)
            {
                isInteracting      = true;
                currentInteractive = interactive;
            }
        }
    }
    private void Update()
    {
        bool foundSomethingToInteractWith = false;

        RaycastHit hitInfo;

        foreach (Transform checkOrigin in _checkOrigins)
        {
            LayerMask layerMask = LayerMask.GetMask("Interactive");

            // If we are holding an item, we are only going to interact with the objects that the item we are holding can interact with
            if (_player.PlayerPickAnimator.HoldingItem)
            {
                layerMask = _player.PlayerPickAnimator.InteractivePickable.InteractLayerMask;
            }

            if (Physics.Raycast(checkOrigin.position, checkOrigin.transform.forward, out hitInfo, _checkDistance, layerMask) ||
                _player.PlayerWallClimb.CanMount)
            {
                foundSomethingToInteractWith = true;
                UIManager.Instance.SetInteractiveSignal(true);

                if (_player.PlayerPickAnimator.HoldingItem && GameManager.Instance.InputManager.Interact)
                {
                    // Here, we use the item we are holding
                    _player.PlayerPickAnimator.Use(hitInfo.transform);
                    _player.transform.forward = -hitInfo.normal;
                }
                else
                {
                    // We don't need to interact with objects when we are in climb mode
                    if (_player.PlayerState.PlayerMoveState != PlayerMoveState.WallClimbing)
                    {
                        if (GameManager.Instance.InputManager.Interact && hitInfo.transform != null)
                        {
                            InteractiveObject interactiveObject = hitInfo.transform.GetComponentInChildren <InteractiveObject>();
                            if (interactiveObject != null)
                            {
                                // If it's a breakable door, then we play the kick animation first
                                InteractiveDoor interactiveDoor = interactiveObject.GetComponent <InteractiveDoor>();
                                if (interactiveDoor != null && interactiveDoor.Breakable && interactiveDoor.IsClosed)
                                {
                                    _interactiveDoor = interactiveDoor;
                                    Quaternion lookRotation = Quaternion.LookRotation((interactiveDoor.transform.position - _player.transform.position).normalized);
                                    _player.transform.rotation = Quaternion.Euler(_player.transform.rotation.eulerAngles.x, lookRotation.eulerAngles.y, _player.transform.rotation.eulerAngles.z);
                                    //_player.transform.forward = (interactiveDoor.transform.position - _player.transform.position).normalized;

                                    _player.Animator.SetTrigger("Kick");
                                }
                                else
                                {
                                    interactiveObject.Interact(transform);
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        if (!foundSomethingToInteractWith)
        {
            UIManager.Instance.SetInteractiveSignal(false);
        }

        // if we are holding an item and we are in front of a target object of the item we are holding, then we should set the canuse variable of playerPickAnimator script
        if (_player.PlayerPickAnimator.HoldingItem && foundSomethingToInteractWith)
        {
            _player.PlayerPickAnimator.CanUse = true;
        }
        else
        {
            _player.PlayerPickAnimator.CanUse = false;
        }
    }
Esempio n. 7
0
    // Update is called once per frame
    void Update()
    {
        if (isDriving)
        {
            //Debug.Log("isDriving is true");
            if (Input.GetKeyDown(KeyCode.E))
            {
                isDriving = false;
                Camera.main.GetComponent <BoxCollider>().enabled = true;
                avatarRig.transform.position = avatarRig.transform.position - avatarRig.transform.right * 8;
            }
            else
            {
                Vector3 newPos = vehicle.transform.position;
                newPos.y += 5.0f;
                avatarRig.transform.position = newPos;


                //Debug.Log("avatarRig: " + avatarRig.transform.position + ", vehicle: " + avatarRig.transform.position);
            }
        }
        else if (isSelecting)
        {
            if (!_holdObject.activeSelf || Input.GetAxis(m_hold) < 0)
            {
                ResetRightController();
                isSelecting = false;
                var selectionRenderer = _selection.GetComponent <Renderer>();
                selectionRenderer.material = defaultMaterial;
                //Vector3 releasePos = avatarRig.transform.position + _disVec;
                ////releasePos.y = 0.0f;
                //_holdObject.transform.position = releasePos;
                _holdObject = null;
                _selection  = null;
            }
            else
            {
                //_holdObject.transform.position = avatarRig.transform.position + _disVec;

                ////Tranform
                //Vector3 force = avatarRig.transform.position - _holdObject.transform.position;
                //force.x = force.x * 0.003f;
                //force.y = 0;
                //force.z = force.z * 0.003f;
                //Debug.Log(force);
                //_holdObject.transform.position -= force * Input.GetAxis(m_transform);

                ////Raise
                //force = new Vector3(0, -1, 0);
                //_holdObject.transform.position -= force * Input.GetAxis(m_raise);

                ////Rotate
                //yaw += rotateSpeed * Input.GetAxis(m_rotate);
                //_holdObject.transform.eulerAngles = new Vector3(0, yaw, 0);
                //Debug.Log(_holdObject.transform.eulerAngles);

                ////Scale
                //Vector3 boost = new Vector3(0.01f, 0.01f, 0.01f);
                //_holdObject.transform.localScale += boost * Input.GetAxis(m_scale);

                //_disVec = _holdObject.transform.position - avatarRig.transform.position;


                float leftAngleY = leftController.transform.rotation.eulerAngles.y - avatarRig.transform.rotation.eulerAngles.y;
                if (leftAngleY > 180)
                {
                    leftAngleY -= 360;
                }
                if (leftAngleY < -180)
                {
                    leftAngleY += 360;
                }
                leftAngleY = leftAngleY < 60f ? leftAngleY : 60f;
                leftAngleY = leftAngleY > -60f ? leftAngleY : -60f;
                _dis      += leftAngleY * 0.01f;
                Vector3 vz = avatarRig.transform.forward * _dis;


                float rightAngleY = rightController.transform.rotation.eulerAngles.y - avatarRig.transform.rotation.eulerAngles.y;
                if (rightAngleY > 180)
                {
                    rightAngleY -= 360;
                }
                if (rightAngleY < -180)
                {
                    rightAngleY += 360;
                }
                rightAngleY = rightAngleY < 60f ? rightAngleY : 60f;
                rightAngleY = rightAngleY > -60f ? rightAngleY : -60f;
                Vector3 vx = avatarRig.transform.right * (_dis * Mathf.Tan(rightAngleY * Mathf.PI / 180));

                float rightAngleX = rightController.transform.rotation.eulerAngles.x - avatarRig.transform.rotation.eulerAngles.x;
                if (rightAngleX > 180)
                {
                    rightAngleX -= 360;
                }
                if (rightAngleX < -180)
                {
                    rightAngleX += 360;
                }
                rightAngleX = rightAngleX < 60f ? rightAngleX : 60f;
                rightAngleX = rightAngleX > -60f ? rightAngleX : -60f;
                Vector3 vy = avatarRig.transform.up * (_dis * Mathf.Tan(rightAngleX * Mathf.PI / 180)) * -1f;
                //Debug.Log("Position of RightController: " + rightController.transform.position + ", Rotation of RightController: " + rightController.transform.rotation);
                //Debug.Log(rightController.transform.rotation.x + " " + rightController.transform.rotation.y + " " + rightController.transform.rotation.z + " " + rightController.transform.rotation.w);
                //Debug.Log(rightController.transform.rotation.eulerAngles - avatarRig.transform.rotation.eulerAngles);
                //Debug.Log(angleX + " " + angleY + " " + Mathf.Tan(angleX * Mathf.PI / 180) + " " + Mathf.Tan(angleY * Mathf.PI / 180));
                //Debug.Log("vx: " + vx + ", vy: " + vy);
                _holdObject.transform.position = vz + vy + vx + rightController.transform.position;
            }
        }
        else
        {
            if (_selection != null)
            {
                //Debug.Log("Lose selction");
                var selectionRenderer = _selection.GetComponent <Renderer>();
                selectionRenderer.material = defaultMaterial;
                _selection = null;
            }

            var ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

            //Debug.Log("ray's direction: " + ray.direction + ". ray's origin: " + ray.origin);
            //Debug.DrawRay(ray.origin, ray.direction * 20, Color.yellow);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 20))
            {
                var selection = hit.transform;

                //Debug.Log("Object caught");

                if (selection.gameObject.CompareTag(selectableTag) || selection.gameObject.CompareTag(hayTag))
                {
                    //Debug.Log("Object is selectable");
                    var selectionRenderer = selection.GetComponent <Renderer>();
                    if (selectionRenderer != null)
                    {
                        selectionRenderer.material = highlightMaterial;
                    }
                    _selection = selection;
                    if (Input.GetAxis(m_hold) > 0)
                    {
                        ResetRightController();
                        Debug.Log("Select successfully");
                        _holdObject = _selection.gameObject;
                        //_disVec = _holdObject.transform.position - avatarRig.transform.position;
                        _dis        = Vector3.Distance(_holdObject.transform.position, avatarRig.transform.position);
                        isSelecting = true;
                    }
                }
                else if (selection.gameObject.CompareTag(drivibleTag))
                {
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        isDriving = true;
                        Vector3 newPos = vehicle.transform.position;
                        newPos.y += 5.0f;
                        avatarRig.transform.position = newPos;
                        Camera.main.GetComponent <BoxCollider>().enabled = false;
                    }
                }
                else if (selection.gameObject.CompareTag(doorTag))
                {
                    Debug.Log("find door!");
                    if (Input.GetMouseButton(0))
                    {
                        Debug.Log("Click!");

                        InteractiveDoor door = selection.GetComponent <InteractiveDoor>();
                        if (door)
                        {
                            Debug.Log("This is a interactive door!");

                            door.TriggerInteraction();
                        }
                    }
                }
                else if (selection.gameObject.CompareTag(ignitableTag))
                {
                    // TODO:
                }
            }
            else
            {
                //Debug.Log("Object not caught");
            }
        }
    }
Esempio n. 8
0
    private void Update()
    {
        // For testing:
        _targetName = _currentTarget != null ? _currentTarget.transform.name : "";
        if (GoneWrong.Player.instance != null)
        {
            _distanceToPlayer = (GoneWrong.Player.instance.transform.position - transform.position).magnitude;
        }

        // If we are dead, we need to make sure that all the attacks are deactivated
        if (_dead)
        {
            foreach (GameObject attack in _attacks)
            {
                if (attack != null && attack.gameObject.activeSelf)
                {
                    attack.SetActive(false);
                }
            }
        }

        // If we are still spawning, we don't do anything:
        if (_spawning)
        {
            return;
        }

        if (_dead)
        {
            return;
        }

        // Incrementing the scream timer (so that we don't spam screaming)
        if (_screamTimer < _screamDelay)
        {
            _screamTimer += Time.deltaTime;
        }

        // To handle opening doors:
        Debug.DrawRay(transform.position, transform.forward, Color.red);
        RaycastHit[] hits = Physics.RaycastAll(transform.position, transform.forward, 1f, LayerMask.GetMask("Interactive"));
        if (hits.Length > 0)
        {
            InteractiveDoor door = hits[0].transform.GetComponent <InteractiveDoor>();
            if (door != null)
            {
                if (!door.open && door.canOpen)
                {
                    bool canOpenDoor = door.Interact(transform);
                    ChangeState(AIStateType.Idle);

                    // If we can't open the door, we are going to turn around and reset path and target
                    if (!canOpenDoor || !door.ProgressionConditionsMet())
                    {
                        _currentTarget = null;
                        _navMeshAgent.ResetPath();
                        transform.rotation = Quaternion.LookRotation(-transform.forward);

                        // Also make sure the zombies don't try to go through the door by stopping them
                        _animator.SetFloat(_speedHash, 0);
                    }
                }
            }
        }

        if (_currentState != null)
        {
            AIStateType nextStateType = _currentState.OnUpdate();

            if (_currentStateType != nextStateType)
            {
                ChangeState(nextStateType);
            }
        }
    }