Пример #1
0
    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);
    }
Пример #2
0
    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();
    }
Пример #3
0
    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;
    }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
    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);
    }
Пример #8
0
    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;
    }
Пример #9
0
    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;
    }
Пример #12
0
    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();
    }
Пример #13
0
 public void RestartAI()
 {
     _fishAIStateManager = new FishAIStateManager(this);
     _fishAIStateManager.Restart();
 }