Пример #1
0
    void OnEnable()
    {
        instance = this;

        if (Selection.activeGameObject == null)
        {
            return;
        }
        mBall = Selection.activeGameObject.GetComponent <UBasketball>();
        if (mBall == null)
        {
            EditorUtility.DisplayDialog("ShootSolutionEditor", "请选择篮球", "ok");
        }

        GameObject goBasket = GameObject.FindGameObjectWithTag("basketStand");

        if (goBasket == null)
        {
            EditorUtility.DisplayDialog("ShootSolutionEditor", "请先创建篮板", "ok");
        }
        mBasket = goBasket.GetComponent <UBasket>();

        mDistanceCount = GameSystem.Instance.shootSolutionManager.m_DistanceList.Count;
        mAngleCount    = GameSystem.Instance.shootSolutionManager.m_AngleList.Count;
    }
 private void OnGoal(UBasket basket, UBasketball ball)
 {
     if (step == Step.Play && jumpedInRightArea)
     {
         Step_Praise();
     }
 }
Пример #3
0
    public bool InFreeThrowLane(IM.Vector2 pos)
    {
        UBasket basket = mScene.mBasket;

        IM.Number fDistanceToNet = IM.Vector2.Distance(pos, basket.m_vShootTarget.xz);
        return(fDistanceToNet < mFreeThrowLane);
    }
Пример #4
0
 void Awake()
 {
     m_Shake      = GetComponent <UCamShakeMgr>();
     m_Zoom       = GetComponent <UCamZoomMgr>();
     m_curMatch   = GameSystem.Instance.mClient.mCurMatch;
     m_playGround = m_curMatch.mCurScene.mGround;
     m_basket     = m_curMatch.mCurScene.mBasket;
 }
Пример #5
0
    static int Build(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        UBasket obj = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket");

        IM.Vector3 arg0 = (IM.Vector3)LuaScriptMgr.GetNetObject(L, 2, typeof(IM.Vector3));
        obj.Build(arg0);
        return(0);
    }
Пример #6
0
    static int OnRimCollision(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        UBasket     obj  = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket");
        UBasketball arg0 = (UBasketball)LuaScriptMgr.GetUnityObject(L, 2, typeof(UBasketball));

        obj.OnRimCollision(arg0);
        return(0);
    }
Пример #7
0
    public PlayerState(PlayerStateMachine owner, GameMatch match)
    {
        m_stateMachine = owner;
        m_player       = m_stateMachine.m_owner;
        m_match        = match;
        m_basket       = match.mCurScene.mBasket;

        m_curExecSkill = null;
    }
Пример #8
0
    static int SetEffect(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        UBasket     obj  = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket");
        BasketState arg0 = (BasketState)LuaScriptMgr.GetNetObject(L, 2, typeof(BasketState));
        Object      arg1 = (Object)LuaScriptMgr.GetUnityObject(L, 3, typeof(Object));

        obj.SetEffect(arg0, arg1);
        return(0);
    }
Пример #9
0
    static int OnDunk(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        UBasket     obj  = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket");
        UBasketball arg0 = (UBasketball)LuaScriptMgr.GetUnityObject(L, 2, typeof(UBasketball));
        bool        arg1 = LuaScriptMgr.GetBoolean(L, 3);

        obj.OnDunk(arg0, arg1);
        return(0);
    }
 public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate)
 {
     if (in_tutorial)
     {
         return(GameSystem.Instance.shootSolutionManager.GetShootSolution(25, false, 1));
     }
     else
     {
         return(null);
     }
 }
 public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate)
 {
     if (curStep.mustGoal || curStep.cantGoal)
     {
         if (curStep.shootSolution.Key != 0 || curStep.shootSolution.Value != 0)
         {
             return(GameSystem.Instance.shootSolutionManager.GetShootSolution(curStep.shootSolution.Key, curStep.mustGoal, curStep.shootSolution.Value));
         }
     }
     return(null);
 }
Пример #12
0
    public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate, ShootSolution.Type type)
    {
        ShootSolution solution = practise_behaviour.GetShootSolution(basket, area, shooter, rate);

        if (solution == null)
        {
            solution = base.GetShootSolution(basket, area, shooter, rate, type);
        }
        Debug.Log("Practise shoot solution: " + solution.m_id);
        return(solution);
    }
Пример #13
0
    public AIState(AISystem owner)
    {
        m_system    = owner;
        m_player    = owner.m_player;
        m_match     = owner.m_curMatch;
        m_basket    = m_match.mCurScene.mBasket;
        m_timerTick = new GameUtils.Timer(m_system.AI.delay, OnTick);

        if (m_player == null)
        {
            Debug.LogError("AIState: player can not be null.");
        }
    }
Пример #14
0
        private bool IsKnock(IM.Vector3 pre, IM.Vector3 now)
        {
            UBasket basket = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBasket;

            IM.Number radius = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBall.m_ballRadius;

            IM.Number d1 = basket.m_rim.radius - (IM.Vector3.Distance(pre, basket.m_rim.center)) - radius;
            IM.Number d2 = basket.m_rim.radius - (IM.Vector3.Distance(now, basket.m_rim.center)) - radius;
            if (d1 >= 0 && d2 < 0)
            {
                return(true);
            }
            return(false);
        }
Пример #15
0
    private void OnGoal(UBasket basket, UBasketball ball)
    {
        //TODO 针对PVP修改
        int score = (ball.m_special ? 2 : 1);

        if (ball.m_actor == mainRole)
        {
            m_homeScore += score;
            //Debug.Log("Main role score: " + m_homeScore);
        }
        else if (ball.m_actor == npc)
        {
            m_awayScore += score;
            //Debug.Log("NPC score: " + m_awayScore);
        }
        //碰地删除
        ball.onHitGround += (UBasketball b) => { mCurScene.DestroyBall(b); };
        ball.m_pickable   = false;
    }
Пример #16
0
    static int set_onDunk(IntPtr L)
    {
        object  o   = LuaScriptMgr.GetLuaObject(L, 1);
        UBasket obj = (UBasket)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name onDunk");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index onDunk on a nil value");
            }
        }

        LuaTypes funcType = LuaDLL.lua_type(L, 3);

        if (funcType != LuaTypes.LUA_TFUNCTION)
        {
            obj.onDunk = (UBasket.BasketEventDunkDelegate)LuaScriptMgr.GetNetObject(L, 3, typeof(UBasket.BasketEventDunkDelegate));
        }
        else
        {
            LuaFunction func = LuaScriptMgr.ToLuaFunction(L, 3);
            obj.onDunk = (param0, param1, param2) =>
            {
                int top = func.BeginPCall();
                LuaScriptMgr.Push(L, param0);
                LuaScriptMgr.Push(L, param1);
                LuaScriptMgr.Push(L, param2);
                func.PCall(top, 3);
                func.EndPCall(top);
            };
        }
        return(0);
    }
Пример #17
0
    static int get_m_vShootTarget(IntPtr L)
    {
        object  o   = LuaScriptMgr.GetLuaObject(L, 1);
        UBasket obj = (UBasket)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name m_vShootTarget");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index m_vShootTarget on a nil value");
            }
        }

        LuaScriptMgr.PushValue(L, obj.m_vShootTarget);
        return(1);
    }
Пример #18
0
    static int get_onNoGoal(IntPtr L)
    {
        object  o   = LuaScriptMgr.GetLuaObject(L, 1);
        UBasket obj = (UBasket)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name onNoGoal");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index onNoGoal on a nil value");
            }
        }

        LuaScriptMgr.Push(L, obj.onNoGoal);
        return(1);
    }
Пример #19
0
        public bool GetPosition(IM.Number time, out IM.Vector3 res)
        {
            int index = 1;

            if (count % 2 == 0)
            {
                index = 1;
            }
            else
            {
                index = -1;
            }
            UBasket basket = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBasket;

            IM.Number radius = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBall.m_ballRadius;

            res.y = new IM.Number(3, 100);
            res.x = x0.x + 2 * dir.x * time * index;
            res.z = x0.z + 2 * dir.z * time * index;

            if (count < 4)
            {
                if (IsKnock(preVec, res))
                {
                    ++count;
                    x0 = preVec;
                }
                else
                {
                    preVec = res;
                }
                return(true);
            }

            return(false);
        }
Пример #20
0
    void OnEnable()
    {
        m_ball = (UBasketball)target;
        GameObject goBasket = GameObject.FindGameObjectWithTag("basketStand");

        if (goBasket == null)
        {
            return;
        }
        m_basket = goBasket.GetComponent <UBasket>();
        if (m_basket == null)
        {
            m_basket = goBasket.AddComponent <UBasket>();
        }
        m_basket.Build(new IM.Vector3(IM.Number.zero, IM.Number.zero, new IM.Number(12, 8)));

        m_ball.m_ballRadius = new IM.Number(0, 125);

        m_simulatingShootSolution = new ShootSolution(0);
        GameSystem.Instance.shootSolutionManager = new ShootSolutionManager();


        instance = this;
    }
Пример #21
0
    public EDirection GetMoveDirection(InputDirType type)
    {
        if (!m_enable)
        {
            return(EDirection.eNone);
        }

        if (m_worldMoveDir == IM.Vector3.zero)
        {
            return(EDirection.eNone);
        }

        IM.Vector3 vHForward = IM.Vector3.zero;
        if (type == InputDirType.ePlayer)
        {
            vHForward = m_player.forward;
        }
        else if (type == InputDirType.eJoyStick)
        {
            vHForward = IM.Vector3.forward;
        }
        else if (type == InputDirType.eBasket)
        {
            UBasket basket = m_match.mCurScene.mBasket;
            if (basket == null)
            {
                vHForward = IM.Vector3.forward;
            }
            else
            {
                IM.Vector3 dirToBasket = basket.m_vShootTarget - m_player.position;
                dirToBasket.y = IM.Number.zero;
                vHForward     = dirToBasket.normalized;
            }
        }
        vHForward.y = IM.Number.zero;

        IM.Vector3 dir = m_worldMoveDir;
        if (IM.Vector3.Angle(vHForward, dir) > new IM.Number(135))
        {
            return(EDirection.eBack);
        }
        else if (IM.Vector3.Angle(vHForward, dir) < new IM.Number(45))
        {
            return(EDirection.eForward);
        }

        IM.Number fCW = IM.Vector3.Cross(vHForward, dir).y;
        if (IM.Math.Abs(fCW) < new IM.Number(0, 001))
        {
            return(EDirection.eNone);
        }
        if (fCW < IM.Number.zero)
        {
            return(EDirection.eLeft);
        }
        else if (fCW > IM.Number.zero)
        {
            return(EDirection.eRight);
        }

        return(EDirection.eNone);
    }
 private void OnNoGoal(UBasket basket, UBasketball ball)
 {
     OnShootOver(ball, false);
 }
 private void OnGoal(UBasket basket, UBasketball ball)
 {
     OnShootOver(ball, true);
 }
Пример #24
0
 private void OnGoal(UBasket basket, UBasketball ball)
 {
     OnGoal(ball);
 }
Пример #25
0
    void _UpdateValidCommand(GameMatch match)
    {
        validCmdList.Clear();

        if (player == null)
        {
            return;
        }

        bool        bOffense    = (player.m_team.m_role == GameMatch.MatchRole.eOffense);
        UBasketball ball        = match.mCurScene.mBall;
        UBasket     basket      = match.mCurScene.mBasket;
        bool        hasTeamMate = player.m_team.GetMemberCount() > 1;

        if (bOffense)
        {
            if (player.m_bWithBall)
            {
                if (hasTeamMate && match.IsCommandValid(Command.Pass))
                {
                    validCmdList.Add(Command.Pass);
                }
                if (match.IsCommandValid(Command.Shoot))
                {
                    validCmdList.Add(Command.Shoot);
                }
                if (player.m_position == PositionType.PT_C || player.m_position == PositionType.PT_PF)
                {
                    if (match.IsCommandValid(Command.BackToBack))
                    {
                        validCmdList.Add(Command.BackToBack);
                    }
                }
                else
                {
                    if (match.IsCommandValid(Command.CrossOver))
                    {
                        validCmdList.Add(Command.CrossOver);
                    }
                }
            }
            else
            {
                if (ball != null)
                {
                    if (ball.m_owner != null || ball.m_ballState == BallState.eUseBall_Pass)
                    {
                        if (match.IsCommandValid(Command.RequireBall))
                        {
                            validCmdList.Add(Command.RequireBall);
                        }
                    }

                    if (ball.m_owner != null && ball.m_ballState != BallState.eUseBall_Pass)
                    {
                        if (match.IsCommandValid(Command.PickAndRoll))
                        {
                            validCmdList.Add(Command.PickAndRoll);
                        }
                    }
                }
                if (match.IsCommandValid(Command.CutIn))
                {
                    validCmdList.Add(Command.CutIn);
                }
            }
            if (ball == null || (ball.m_ballState != BallState.eLoseBall && ball.m_ballState != BallState.eRebound))
            {
                if (match.IsCommandValid(Command.Rush))
                {
                    validCmdList.Add(Command.Rush);
                }
            }
        }
        //defense
        else
        {
            if (ball != null)
            {
                if (ball.m_ballState == BallState.eUseBall ||
                    ball.m_ballState == BallState.eUseBall_Pass ||
                    ball.m_ballState == BallState.eUseBall_Shoot)
                {
                    if (match.IsCommandValid(Command.Rush) && match.GetMatchType() == GameMatch.Type.ePVP_3On3)
                    {
                        validCmdList.Add(Command.Rush);
                    }
                    if (match.IsCommandValid(Command.Defense))
                    {
                        validCmdList.Add(Command.Defense);
                    }
                }

                if (ball != null && ball.m_owner != null && match.IsCommandValid(Command.Steal) || (ball.m_ballState == BallState.eUseBall_Pass))
                {
                    validCmdList.Add(Command.Steal);
                }

                if (ball != null && (ball.m_ballState == BallState.eUseBall || ball.m_ballState == BallState.eUseBall_Shoot))
                {
                    if (match.IsCommandValid(Command.Block))
                    {
                        validCmdList.Add(Command.Block);
                    }
                }
            }
            if (hasTeamMate && match.IsCommandValid(Command.Switch))
            {
                validCmdList.Add(Command.Switch);
            }
        }
        if (ball != null && ball.m_ballState == BallState.eLoseBall)
        {
            if (match.GetMatchType() == GameMatch.Type.ePVP_3On3)
            {
                if (match.IsCommandValid(Command.Rush))
                {
                    validCmdList.Add(Command.Rush);
                }
            }
            else
            {
                if (match.IsCommandValid(Command.TraceBall))
                {
                    validCmdList.Add(Command.TraceBall);
                }
            }

            if (hasTeamMate && match.IsCommandValid(Command.Switch))
            {
                validCmdList.Add(Command.Switch);
            }

            if (player.m_position == PositionType.PT_SG || player.m_position == PositionType.PT_PG)
            {
                if (match.IsCommandValid(Command.BodyThrowCatch))
                {
                    validCmdList.Add(Command.BodyThrowCatch);
                }
            }
        }
        if (ball != null &&
            (ball.m_ballState == BallState.eLoseBall ||
             ball.m_ballState == BallState.eRebound ||
             ball.m_ballState == BallState.eNone))
        {
            if (hasTeamMate && match.IsCommandValid(Command.Switch))
            {
                validCmdList.Add(Command.Switch);
            }
        }

        MatchState curMatchState = match.m_stateMachine.m_curState;

        if (!player.m_bWithBall &&
            (ball != null && ball.m_ballState == BallState.eRebound ||
             (curMatchState != null && curMatchState.m_eState == MatchState.State.eTipOff)))
        {
            if (match.IsCommandValid(Command.Rebound))
            {
                validCmdList.Add(Command.Rebound);
            }
            //float fDist = GameUtils.HorizonalDistance(player.position, basket.m_vShootTarget).ToUnity();
            //if( fDist < 3.0f )
            //	m_validCmdList.Add(Command.JockeyForPosition);
        }

        if (match.m_uiController != null)
        {
            match.m_uiController.UpdateBtnCmd();
        }
    }
Пример #26
0
    public bool GetEvent(out BallEvent eventId, out Vector3 vecDeltaV, UBasketball ball, UBasket basket, IM.Number fTimeStart, IM.Number fTimeEnd, int iIter)
    {
        eventId   = BallEvent.eNone;
        vecDeltaV = new Vector3();

        if (fTimeStart > m_fTime)
        {
            Debug.LogError("ball shoot solution start time > current time.");
            return(false);
        }

        if (m_bSuccess &&      //&& (iCurveEvent == m_ShootCurveList.Count - 1))
            fTimeEnd > m_fTime)
        {
            eventId = BallEvent.eGoal;
            return(true);
        }

        IM.Number   fTime = IM.Number.zero, fTimePrev = -new IM.Number(0, 001);
        SShootCurve pCurve;

        int iCurve, iCurveStart, iCurveEvent, iCurveEnd;

        iCurve = 0;

        iCurveStart = iCurveEvent = iCurveEnd = m_ShootCurveList.Count;

        foreach (SShootCurve curve in m_ShootCurveList)
        {
            pCurve = curve;
            fTime += pCurve.fTime;

            if (fTime >= fTimeStart && fTimePrev <= fTimeStart)
            {
                iCurveStart = iCurve;
            }

            if (fTime > fTimeEnd && fTimePrev <= fTimeEnd)
            {
                iCurveEnd = iCurve;
                break;
            }

            iCurve++;
            fTimePrev = fTime;
        }

        if (iIter < iCurveEnd - iCurveStart)
        {
            iCurveEvent = iCurveStart + iIter;
            pCurve      = m_ShootCurveList[iCurveEvent];

            IM.Vector3 vecInitVel = new IM.Vector3();
            IM.Vector3 vecFinVel  = new IM.Vector3();
            IM.Vector3 vecPos     = new IM.Vector3();

            vecPos.x = pCurve.fX_a * pCurve.fTime * pCurve.fTime + pCurve.fX_b * pCurve.fTime + pCurve.fX_c;
            vecPos.y = pCurve.fY_a * pCurve.fTime * pCurve.fTime + pCurve.fY_b * pCurve.fTime + pCurve.fY_c;
            vecPos.z = pCurve.fZ_a * pCurve.fTime * pCurve.fTime + pCurve.fZ_b * pCurve.fTime + pCurve.fZ_c;

            vecInitVel.x = IM.Number.two * pCurve.fX_a * pCurve.fTime + pCurve.fX_b;
            vecInitVel.y = IM.Number.two * pCurve.fY_a * pCurve.fTime + pCurve.fY_b;
            vecInitVel.z = IM.Number.two * pCurve.fZ_a * pCurve.fTime + pCurve.fZ_b;

            if (iCurveEvent + 1 >= m_ShootCurveList.Count)
            {
                vecFinVel = m_vFinVel;
            }
            else
            {
                SShootCurve pCurveNext = m_ShootCurveList[iCurveEvent + 1];
                vecFinVel.x = pCurveNext.fX_b;
                vecFinVel.y = pCurveNext.fY_b;
                vecFinVel.z = pCurveNext.fZ_b;
            }

            vecDeltaV = (Vector3)(vecFinVel - vecInitVel);

            if (IM.Math.Abs(vecPos.z - (basket.m_backboard.center.z - ball.m_ballRadius)) < new IM.Number(0, 020))
            {
                eventId = BallEvent.eCollBoard;
            }
            else
            {
                eventId = BallEvent.eCollRim;
            }
            return(true);
        }
        else
        {
            return(false);
        }
    }
Пример #27
0
 protected override void OnRimCollision(UBasket basket, UBasketball ball)
 {
     m_count24Time     = gameMatchTime;
     m_count24TimeStop = false;
     m_b24TimeUp       = false;
 }
 private void OnGoal(UBasket basket, UBasketball ball)
 {
     match.m_homeScore += 2;
 }
Пример #29
0
 public virtual ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate)
 {
     return(null);
 }
Пример #30
0
 void OnGoal(UBasket basket, UBasketball ball)
 {
     m_homeScore += GetScore(ball.m_pt);
 }