示例#1
0
 public CollectedMessage Collect()
 {
     CollectedMessage msg = new CollectedMessage();
     if(player.m_TargetBalls.Count == 0)
     {
         msg.ballList = Pools.GetSolidAndStripeBalls();
     }
     else
     {
         msg.ballList = player.m_TargetBalls;
     }
     return msg;
 }
示例#2
0
        public CollectedMessage Collect()
        {
            CollectedMessage msg = new CollectedMessage();

            if (player.m_TargetBalls.Count == 0)
            {
                msg.ballList = Pools.GetSolidAndStripeBalls();
            }
            else
            {
                msg.ballList = player.m_TargetBalls;
            }
            return(msg);
        }
示例#3
0
        public DecidedMessage Decide(CollectedMessage _cMsg)
        {
            cMsg = _cMsg;
            DecidedMessage dMsg = new DecidedMessage();

            Dictionary<PoolBall, List<PocketTrigger>> considerBalls = GetConsiderBalls();
            List<KeyValuePair<PoolBall, Vector3>> shootableBalls = GetShootableBalls();
            dMsg.drag = GameManager.Rules.State == GlobalState.DRAG_WHITEBALL;
            dMsg.considerBalls = considerBalls;
            dMsg.shootableBalls = shootableBalls;
            PoolBall targetBall;
            PocketTrigger targetPocket;
            if (dMsg.drag)
                dMsg.hitPoint = ConsiderHitPointWithDrag(considerBalls, out dMsg.cueballPosition, out targetBall, out targetPocket);
            else
            {
                dMsg.cueballPosition = Pools.CueBall.GetPosition();
                dMsg.hitPoint = ConsiderHitPoint(considerBalls, dMsg.cueballPosition, out targetBall, out targetPocket);
            }
            if (dMsg.hitPoint != Vector3.zero)
            {
                dMsg.targetBall = targetBall;
                dMsg.targetPocket = targetPocket;
                dMsg.powerScale = ConsiderPowerScale(targetBall, targetPocket, dMsg.hitPoint, dMsg.cueballPosition);
            }
            else
            {
                if(dMsg.shootableBalls.Count != 0)
                {
                    int i = Mathf.Max(Random.Range(0, dMsg.shootableBalls.Count - 1), 0);
                    dMsg.targetBall = dMsg.shootableBalls[i].Key;
                    dMsg.hitPoint = dMsg.shootableBalls[i].Value;
                }
                else//如果目标类型的球无球可打,则随便找一个能打到的球
                {
                    int i = Mathf.Max(Random.Range(0, cMsg.ballList.Count - 1));
                    dMsg.targetBall = cMsg.ballList[i];
                    dMsg.hitPoint = dMsg.targetBall.transform.position;
                }
                int j = Random.Range(0, Pools.PocketTriggers.Count - 1);
                dMsg.targetPocket = Pools.PocketTriggers[j];
                dMsg.cueballPosition = Pools.CueBall.GetPosition();
                dMsg.powerScale = 1;
            }
            if(BaseUIController.Instance.debugAI)
            {
                BaseUIController.Instance.targetBallImage.transform.position = MathTools.World2UI(dMsg.targetBall.transform.position);
                BaseUIController.Instance.targetPocketImage.transform.position = MathTools.World2UI(dMsg.targetPocket.transform.position);
                BaseUIController.Instance.hitPointImage.transform.position = MathTools.World2UI(dMsg.hitPoint);
            }
            if (Random.Range(0, 100) > (int)AIPlayer.difficulty)
            {
                dMsg.hitPoint += new Vector3(Random.Range(-player.m_Deviation, player.m_Deviation), 0, Random.Range(-player.m_Deviation, player.m_Deviation));
            }
            if(BaseUIController.Instance.debugAI)
                BaseUIController.Instance.newHitPointImage.transform.position = MathTools.World2UI(dMsg.hitPoint);
            return dMsg;
        }
示例#4
0
        public DecidedMessage Decide(CollectedMessage _cMsg)
        {
            cMsg = _cMsg;
            DecidedMessage dMsg = new DecidedMessage();

            Dictionary <PoolBall, List <PocketTrigger> > considerBalls  = GetConsiderBalls();
            List <KeyValuePair <PoolBall, Vector3> >     shootableBalls = GetShootableBalls();

            dMsg.drag           = GameManager.Rules.State == GlobalState.DRAG_WHITEBALL;
            dMsg.considerBalls  = considerBalls;
            dMsg.shootableBalls = shootableBalls;
            PoolBall      targetBall;
            PocketTrigger targetPocket;

            if (dMsg.drag)
            {
                dMsg.hitPoint = ConsiderHitPointWithDrag(considerBalls, out dMsg.cueballPosition, out targetBall, out targetPocket);
            }
            else
            {
                dMsg.cueballPosition = Pools.CueBall.GetPosition();
                dMsg.hitPoint        = ConsiderHitPoint(considerBalls, dMsg.cueballPosition, out targetBall, out targetPocket);
            }
            if (dMsg.hitPoint != Vector3.zero)
            {
                dMsg.targetBall   = targetBall;
                dMsg.targetPocket = targetPocket;
                dMsg.powerScale   = ConsiderPowerScale(targetBall, targetPocket, dMsg.hitPoint, dMsg.cueballPosition);
            }
            else
            {
                if (dMsg.shootableBalls.Count != 0)
                {
                    int i = Mathf.Max(Random.Range(0, dMsg.shootableBalls.Count - 1), 0);
                    dMsg.targetBall = dMsg.shootableBalls[i].Key;
                    dMsg.hitPoint   = dMsg.shootableBalls[i].Value;
                }
                else//如果目标类型的球无球可打,则随便找一个能打到的球
                {
                    int i = Mathf.Max(Random.Range(0, cMsg.ballList.Count - 1));
                    dMsg.targetBall = cMsg.ballList[i];
                    dMsg.hitPoint   = dMsg.targetBall.transform.position;
                }
                int j = Random.Range(0, Pools.PocketTriggers.Count - 1);
                dMsg.targetPocket    = Pools.PocketTriggers[j];
                dMsg.cueballPosition = Pools.CueBall.GetPosition();
                dMsg.powerScale      = 1;
            }
            if (BaseUIController.Instance.debugAI)
            {
                BaseUIController.Instance.targetBallImage.transform.position   = MathTools.World2UI(dMsg.targetBall.transform.position);
                BaseUIController.Instance.targetPocketImage.transform.position = MathTools.World2UI(dMsg.targetPocket.transform.position);
                BaseUIController.Instance.hitPointImage.transform.position     = MathTools.World2UI(dMsg.hitPoint);
            }
            if (Random.Range(0, 100) > (int)AIPlayer.difficulty)
            {
                dMsg.hitPoint += new Vector3(Random.Range(-player.m_Deviation, player.m_Deviation), 0, Random.Range(-player.m_Deviation, player.m_Deviation));
            }
            if (BaseUIController.Instance.debugAI)
            {
                BaseUIController.Instance.newHitPointImage.transform.position = MathTools.World2UI(dMsg.hitPoint);
            }
            return(dMsg);
        }