static void setHidePosition(FishAIStateManager manager) { //if (XRDemo.Instance.recontructWall != null) //{ //random get a wall manager.fishAI.fishHidingWall = ReconstructManager.Instance.selectedWallRoot.transform.GetChild(Random.Range(0, ReconstructManager.Instance.selectedWallRoot.transform.childCount)); Vector3 wallForward = manager.fishAI.fishHidingWall.forward; Vector3 dir2Player = manager.fishAI.PlayerEye.transform.position - manager.fishAI.fishHidingWall.position; if (Vector3.Dot(dir2Player, wallForward) < 0) { wallForward *= -1f; } Vector3 hidePosition = manager.fishAI.fishHidingWall.position - wallForward * manager.fishAI.hideSize; List <Vector3> hideWorldPoss = Get3HideWorldPosList(manager); for (int a = 0; a < hideWorldPoss.Count; a++) { Vector3 dirHide = hideWorldPoss[a] - manager.fishAI.fishHidingWall.position; float hideLength = dirHide.magnitude; dirHide /= hideLength; Vector3 hidePos = hidePosition + dirHide * hideLength * 0.5f; manager.fishAI.SetHidePos(a, hidePos); Vector3 outPos = hidePos + wallForward * manager.fishAI.hideSize * 2; manager.fishAI.SetOutPos(a, outPos); } manager.WaitToSwitchState(FishAIStateManager.FishState.hideOpenDoor); }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; Vector3 goal; float moveTime; if (manager.fishAI.moveGoal.HasValue) { goal = manager.fishAI.moveGoal.Value; manager.fishAI.moveGoal = null; moveTime = manager.fishAI.moveTime; } else { goal = FishMoveState.GetPlayerFrontPosition(manager); moveTime = 3; } manager.GetTransform().DOMove(goal, moveTime).SetEase(Ease.InOutQuad).OnComplete(_moveDone); manager.GetTransform().DOLookAt((goal - manager.GetTransform().position).normalized, 2); int moveAni = Random.Range((int)FishAIStateManager.FishAni.Move1, (int)FishAIStateManager.FishAni.MoveEnd); manager.WaitToTriggerAnimation((FishAIStateManager.FishAni)moveAni); manager.PlaySound("MovingSound", Random.Range(0.1f, 1.5f)); manager.PlaySound("MovingSound", Random.Range(1.5f, 2.5f)); manager.fishAI.StartShakeFishPosScale(); }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; manager.WaitToSwitchState(FishAIStateManager.FishState.move, 2); Vector3 goal = FishMoveState.GetPlayerFrontPosition(manager); manager.fishAI.moveGoal = goal; manager.fishAI.moveTime = 1.5f; manager.fishAI.moveDoneState = FishAIStateManager.FishState.angry; int punchAni = Random.Range(0, 3); if (punchAni == 0) { manager.WaitToTriggerAnimation(FishAIStateManager.FishAni.Angry); } else if (punchAni == 1) { manager.WaitToTriggerAnimation(FishAIStateManager.FishAni.WryFace); } else if (punchAni == 2) { manager.WaitToTriggerAnimation(FishAIStateManager.FishAni.Scared); } manager.fishAI.countFishHit++; }
//int canUpdateWorldPosMatrix; public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; GameManager.Instance.StartPaintBallWallGame(); MRWallManager.instance.UpdateWorldPosMatrix(); firstEnter = true; gamePlaying = false; manager.fishAI.transform.GetChild(0).gameObject.SetActive(false); //canUpdateWorldPosMatrix = 2; }
static void setHidePosition(out Vector3 hidePos, out Vector3 outPos, FishAIStateManager manager, Vector3 goOutVec) { hidePos = manager.fishAI.fishHidingWall.position - manager.fishAI.fishHidingWall.forward * manager.fishAI.hideSize; goOutVec = manager.fishAI.fishHidingWall.TransformPoint(goOutVec); goOutVec.y = Mathf.Max(goOutVec.y, 1);//saturate not lower then 1m Vector3 dirWall = goOutVec - manager.fishAI.fishHidingWall.position; float hideSize = dirWall.magnitude; dirWall /= hideSize; outPos = hidePos + dirWall * hideSize * ((goOutVec.y == 1) ? 2f : 1.3f); }
public static Vector3 GetPlayerFrontPosition(FishAIStateManager manager) { Transform head = manager.GetPlayerHead(); Vector3 goal; goal = head.forward; goal.y = 0; goal.Normalize(); goal = head.position + goal * Random.Range(0.7f, 1.0f); goal += head.right * Random.Range(-0.3f, 0.3f); //goal += Vector3.up * Random.Range(-0.1f, 0.1f); return(goal); }
static List <Vector3> Get3HideWorldPosList(FishAIStateManager manager) { //random get 3 position MeshFilter mf = manager.fishAI.fishHidingWall.GetComponent <MeshFilter>(); List <Vector3> meshvertices = new List <Vector3>(); foreach (Vector3 v in mf.mesh.vertices) { meshvertices.Add(v); } List <Vector3> hidePoss = new List <Vector3>(); while (meshvertices.Count > 0) { int ranINDX = Random.Range(0, meshvertices.Count - 1); Vector3 pos = meshvertices[ranINDX]; meshvertices.RemoveAt(ranINDX); pos = manager.fishAI.fishHidingWall.TransformPoint(pos); pos.y = Mathf.Max(pos.y, 1);//saturate not lower then 1m Vector3 dir = pos - manager.fishAI.fishHidingWall.position; float length = dir.magnitude; dir = dir / length; //pick position min length > 0.5m if (length < 0.5f) { continue; } //saturate not lower then 1m if (pos.y < 1) { pos.y = 1; } hidePoss.Add(pos); if (hidePoss.Count == 3) { break; } } if (hidePoss.Count != 3) { Debug.LogError("[FishAngryState][setHidePosition] : hidePoss.Count != 3 : " + hidePoss.Count); } return(hidePoss); }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; Vector3 toward = manager.GetPlayerHead().position - manager.GetTransform().position; toward.Normalize(); manager.GetTransform().DOLookAt(toward, 2, AxisConstraint.None, Vector3.up).SetEase(Ease.InOutElastic).OnComplete(_faceToDone); _firstEnter = true; isfaceToDone = false; manager.fishAI.gameObject.GetComponent <Rigidbody>().velocity = Vector3.zero; manager.fishAI.gameObject.GetComponent <Rigidbody>().angularVelocity = Vector3.zero; }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; Vector3 toward = manager.GetPlayerHead().position - manager.GetTransform().position; toward.Normalize(); manager.GetTransform().DOLookAt(-toward, 2, AxisConstraint.None, Vector3.up).SetEase(Ease.InBounce); manager.PlaySound("MovingSound", Random.Range(0.5f, 1.5f)); int moveAni = Random.Range((int)FishAIStateManager.FishAni.Move1, (int)FishAIStateManager.FishAni.MoveEnd); manager.WaitToTriggerAnimation((FishAIStateManager.FishAni)moveAni); manager.GetTransform().DOScale(0, 2).OnComplete(fishScaleDone); }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; Vector3 toward = manager.GetPlayerHead().position - manager.GetTransform().position; toward.Normalize(); manager.GetTransform().DOLookAt(toward, 1, AxisConstraint.None, Vector3.up).SetEase(Ease.InBounce).OnComplete(_faceToDone); //manager.WaitToTriggerAnimation(FishAIStateManager.FishAni.WryFace); isFaceToDone = false; WryFaceTime = 10; shootFishCount = 3; fishCanBeShoot = false; manager.StartCoroutine(_startWryFace()); GameManager.Instance.PaintGunCanPickUp(); }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; manager.StopAllCoroutineAndTween(); manager.GetTransform().localScale = Vector3.one * 0.0001f; manager.GetTransform().DOScale(manager.fishAI.fishScale, 2).OnComplete(OnEntranceScaleDone); Transform head = manager.GetPlayerHead(); Vector3 goal = new Vector3(); goal = head.position + head.forward * 1.5f; goal.x += Random.Range(-0.5f, 0.0f); goal.y += Random.Range(-0.25f, 0.25f); goal.z += Random.Range(-0.5f, 0.0f); manager.GetTransform().position = goal; manager.GetTransform().LookAt(head.position); //manager.WaitToSwitchState(FishAIStateManager.FishState.move, 6); _firstEnter = true; }
public void EnterState(IState oldState, StatePatternBase statePatternBase) { manager = statePatternBase as FishAIStateManager; //use out pos to prevent transparent the door. Vector3 goal = manager.fishAI.GetOutPos(); manager.GetTransform().DOMove(goal, 1.4f).SetEase(Ease.InOutQuad).OnComplete(_moveDone); manager.GetTransform().DOLookAt(goal, 2); // manager.GetTransform().(goal[0], 2); int moveAni = Random.Range((int)FishAIStateManager.FishAni.Move1, (int)FishAIStateManager.FishAni.MoveEnd); manager.WaitToTriggerAnimation((FishAIStateManager.FishAni)moveAni); manager.PlaySound("MovingSound", Random.Range(0.1f, 1.5f)); manager.PlaySound("MovingSound", Random.Range(1.5f, 2.5f)); openOnce = false; manager.fishAI.StopShakeFishPosScale(); GameManager.Instance.SetFishToRenderTop(); }
public void RestartAI() { _fishAIStateManager = new FishAIStateManager(this); _fishAIStateManager.Restart(); }