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; }
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); }
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; }
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); }