Beispiel #1
0
        /// <summary>
        ///     派遣单位
        /// </summary>
        protected void DispatchUnits()
        {
            //TODO mid
            var sendRoad = Road.Mid;

            var sendArray = new int[aiAvailableUnits.Length];

            // int maxSendIndex = 0;
            for (var i = 0; i < sendArray.Length; i++)
            {
                sendArray[i] = GetUnitMaxSend(aiAvailableUnits[i]);
            }

            Unit sendUnit;
            var  probability = Random.Range(0f, 1f);

            if (probability < 0.5f)
            {
                sendUnit = aiAvailableUnits[Array.IndexOf(sendArray, sendArray.Max())];
            }
            else
            {
                sendUnit = aiAvailableUnits[Random.Range(0, aiAvailableUnits.Length)];
            }


            //消耗木材、食物资源计算
            var foodAndWoodSend = aiPlayer.Food / sendUnit.costFood > aiPlayer.Wood / sendUnit.costWood
                ? aiPlayer.Wood / sendUnit.costWood
                : aiPlayer.Food / sendUnit.costFood;
            //派遣数量随机
            var foodAndWoodSendNumber = Random.Range((int)Mathf.Ceil(foodAndWoodSend * 0.5f), foodAndWoodSend);

            //消耗金矿资源计算
            var goldSend = aiPlayer.Gold / sendUnit.costGold;
            //派遣数量随机
            var goldSendNumber = Random.Range((int)Mathf.Ceil(goldSend * 0.5f), goldSend);


            var costFood = foodAndWoodSendNumber * sendUnit.costFood;
            var costWood = foodAndWoodSendNumber * sendUnit.costWood;
            var costGold = goldSendNumber * sendUnit.costGold;


            aiPlayer.ChangeResource(GameResourceType.Food, -costFood);
            aiPlayer.ChangeResource(GameResourceType.Wood, -costWood);
            aiPlayer.ChangeResource(GameResourceType.Gold, -costGold);

            aiPlayer.SetUnits(RoadToTransform(sendRoad).position, Array.IndexOf(aiAvailableUnits, sendUnit), sendRoad,
                              goldSendNumber + foodAndWoodSendNumber);
        }