private void ActivateReadyDoor() { InteractiveDoor door = currentInteractive as InteractiveDoor; if (door != null && door.isReady) { GameRoot.current.TriggerNextLevel(); } }
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; } } }
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); } } }
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; } }
// 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"); } } }
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); } } }