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