public override BT_Callback CallbackState(BT_CallbackInfo info)
 {
     //if(info.CultureInfo.Name == "Red Culture")
     //    Debug.Log(Name);
     //TODO Logic
     return(SelectReputation(info.CultureInfo) ? BT_Callback.True : BT_Callback.False);
 }
Exemple #2
0
        public override BT_Callback CallbackState(BT_CallbackInfo info)
        {
            Tile selectedTile = SelectTile(info.CultureInfo);

            if (selectedTile == null)
            {
                return(BT_Callback.False);
            }

            if (Random.Range(0f, 1f) < 0.5f)
            {
                return(BT_Callback.False); //TODO maybe Redo cause unnecessary Randomness
            }
            return(CultureManager.Instance.ClaimTile(selectedTile, info.CultureInfo) ? BT_Callback.True : BT_Callback.False);
        }
        public override BT_Callback CallbackState(BT_CallbackInfo info)
        {
            List <WeightedPair> weightedList = Childs.Select((t, i) => new WeightedPair(_weights[i], t)).ToList();

            weightedList = weightedList.OrderByDescending(t => t.Weight).ToList();

            foreach (I_BT_Callback btCallback in weightedList.Select(t => t.Element))
            {
                if (btCallback.CallbackState(info) == BT_Callback.True)
                {
                    //if the callback did run => selector calls back
                    return(BT_Callback.True);
                }
            }
            return(BT_Callback.False);
        }
Exemple #4
0
        public override BT_Callback CallbackState(BT_CallbackInfo info)
        {
            Culture tradePartner = CultureManager.Instance.RandomCulture(info.CultureInfo);

            //TODO DistanceMod
            if (tradePartner == null)
            {
                return(BT_Callback.False);
            }

            if (tradePartner.Variables.Reputation / info.CultureInfo.Variables.Reputation <= 0.7f) //1 means identical rep... >1 tradepartner has less rep
            {
                return(BT_Callback.False);
            }
            if (Random.Range(0f, 1f) < 0.4f + tradePartner.GetParameterValue("Communication")) //if the trade partner has more communication == more chances
            {
                return(BT_Callback.False);
            }
            if (info.CultureInfo.Variables.Production < 10)
            {
                return(BT_Callback.False);
            }

            float productionUsed = info.CultureInfo.Variables.Production * Random.Range(0.3f, 0.6f);

            if (productionUsed <= 0)
            {
                return(BT_Callback.False);
            }

            info.CultureInfo.Variables.Reputation += Mathf.RoundToInt(productionUsed / 20);
            info.CultureInfo.Variables.Production -= Mathf.RoundToInt(productionUsed);

            tradePartner.Variables.Production -= tradePartner.Variables.Production * Random.Range(0.01f, 0.2f);
            tradePartner.Variables.Reputation++;

            //Debug.Log(string.Format("A Culture ({0}) traded with: {1} and lost {2} Production",info.CultureInfo.Name,tradePartner.Name,productionUsed));


            return(BT_Callback.True);
        }
Exemple #5
0
        public override BT_Callback CallbackState(BT_CallbackInfo info)
        {
            Tile[] possibleEnemyTiles = TerrainManager.Instance.AdjacentCultureTiles(info.CultureInfo).Where(t => t.IsOccupied).ToArray();

            if (possibleEnemyTiles.Length <= 0)
            {
                return(BT_Callback.False);
            }

            possibleEnemyTiles = possibleEnemyTiles.Where(t => t.OccupyingCulture.Variables.Reputation >= info.CultureInfo.Variables.Reputation).ToArray();

            if (possibleEnemyTiles.Length <= 0)
            {
                return(BT_Callback.False);
            }

            Tile selectedTile = possibleEnemyTiles[Random.Range(0, possibleEnemyTiles.Length)];

            //foreach (Tile enemyTile in possibleEnemyTiles)
            //{
            //    if(enemyTile.OccupyingCulture.Variables.Reputation > info.CultureInfo.Variables.Reputation)
            //        continue;
            //    selectedTile = enemyTile;
            //}

            if (selectedTile == null)
            {
                return(BT_Callback.False);
            }

            if (CultureManager.Instance.CultureAttacks(info.CultureInfo, selectedTile))
            {
                return(BT_Callback.True);
            }

            return(BT_Callback.False);
        }
 public abstract BT_Callback CallbackState(BT_CallbackInfo info);