public AISystem_ReboundStorm(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u)
     : base(match, player, initialState, AIID)
 {
 }
示例#2
0
 public AISystem_PractiseLayupDunk(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit)
     : base(match, player, initialState)
 {
 }
示例#3
0
    public static void PositionAndShoot(AIState.Type positionState, AIState.Type shootState, GameMatch match, Player player)
    {
        PlayGround ground   = match.mCurScene.mGround;
        Area       currArea = ground.GetArea(player);
        bool       outside  = false;

        if (currArea == Area.eFar)
        {
            outside = !ground.In3PointRange(player.position.xz, ground.mDist3PtOutside);
        }
        Area bestArea = GetBestShootArea(player);

        if (currArea == bestArea && !outside)
        {
            player.m_aiMgr.SetTransaction(shootState);
        }
        else
        {
            IM.Vector2 v3PtCenter       = new IM.Vector2(ground.mCenter.x + ground.m3PointCenter.x, ground.mCenter.z + ground.m3PointCenter.y);
            IM.Vector2 playerPos        = player.position.xz;
            IM.Vector2 basketPos        = match.mCurScene.mBasket.m_vShootTarget.xz;
            IM.Number  fDistanceToNet   = IM.Vector2.Distance(playerPos, basketPos);
            IM.Number  fDistTo3PtCenter = IM.Vector2.Distance(playerPos, v3PtCenter);
            IM.Vector2 dirOut           = (playerPos - v3PtCenter).normalized;
            IM.Number  angle            = IM.Vector2.Angle(dirOut, -IM.Vector2.up);
            IM.Number  dist             = IM.Number.zero;
            IM.Vector2 dir = IM.Vector2.up;
            if (bestArea == Area.eNear)
            {
                dist = fDistanceToNet - match.mCurScene.mGround.mFreeThrowLane;
                dir  = (basketPos - playerPos).normalized;
            }
            else if (bestArea == Area.eMiddle)
            {
                if (currArea == Area.eNear)
                {
                    dist = match.mCurScene.mGround.mFreeThrowLane - dist;
                    dir  = (playerPos - basketPos).normalized;
                }
                else
                {
                    if (angle > ground.m3PointMaxAngle)
                    {
                        dist = IM.Math.Abs(playerPos.x) - ground.m3PointBaseLine;
                        dir  = playerPos.x > IM.Number.zero ? -IM.Vector2.right : IM.Vector2.right;
                    }
                    else
                    {
                        dist = fDistTo3PtCenter - ground.m3PointRadius;
                        dir  = -dirOut;
                    }
                }
            }
            else if (bestArea == Area.eFar)
            {
                if (outside)
                {
                    if (angle > ground.m3PointMaxAngle)
                    {
                        dist = IM.Math.Abs(playerPos.x) - (ground.m3PointBaseLine + ground.mDist3PtOutside);
                        dir  = playerPos.x > IM.Number.zero ? -IM.Vector2.right : IM.Vector2.right;
                    }
                    else
                    {
                        dist = fDistTo3PtCenter - (ground.m3PointRadius + ground.mDist3PtOutside);
                        dir  = -dirOut;
                    }
                }
                else
                {
                    if (angle > ground.m3PointMaxAngle)
                    {
                        dist = ground.m3PointBaseLine - IM.Math.Abs(playerPos.x);
                        dir  = playerPos.x > IM.Number.zero ? IM.Vector2.right : -IM.Vector2.right;
                    }
                    else
                    {
                        dist = ground.m3PointRadius - fDistTo3PtCenter;
                        dir  = dirOut;
                    }
                }
            }

            if (dist < match.gameMode.repositionDist)
            {
                AIState state = player.m_aiMgr.GetState(positionState);
                state.m_moveTarget = player.position + new IM.Vector3(dir.x, IM.Number.zero, dir.y) * dist;
                player.m_aiMgr.SetTransaction(state);
            }
            else
            {
                player.m_aiMgr.SetTransaction(shootState);
            }
        }
    }
示例#4
0
 public AISystem_PVP(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit)
     : base(match, player, initialState)
 {
 }
 public AISystem_MassBall(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u)
     : base(match, player, initialState, AIID)
 {
 }
示例#6
0
 public AISystem_Basic(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u)
     : base(match, player, initialState, AIID)
 {
     m_enableColliding = true;
     m_player.m_StateMachine.onStateChanged += OnPlayerStateChanged;
 }
 public void Enable(AIState.Type state)
 {
     stateInit.nextState = state;
     m_player.m_aiAssist = this;
     m_enable            = true;
 }