Skip to content

Commit

Permalink
Fix weight interpolation thanks to cyrri
Browse files Browse the repository at this point in the history
  • Loading branch information
Thilo Schulz committed Oct 25, 2006
1 parent 8b1b346 commit 78e6b4a
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions code/botlib/be_ai_weight.c
Expand Up @@ -593,9 +593,12 @@ float FuzzyWeight_r(int *inventory, fuzzyseperator_t *fs)
if (fs->next->child) w2 = FuzzyWeight_r(inventory, fs->next->child);
else w2 = fs->next->weight;
//the scale factor
scale = (float) (inventory[fs->index] - fs->value) / (fs->next->value - fs->value);
if(fs->next->value == MAX_INVENTORYVALUE) // is fs->next the default case?
return w2; // can't interpolate, return default weight
else
scale = (float) (inventory[fs->index] - fs->value) / (fs->next->value - fs->value);
//scale between the two weights
return scale * w1 + (1 - scale) * w2;
return (1 - scale) * w1 + scale * w2;
} //end if
return FuzzyWeight_r(inventory, fs->next);
} //end else if
Expand Down Expand Up @@ -627,9 +630,12 @@ float FuzzyWeightUndecided_r(int *inventory, fuzzyseperator_t *fs)
if (fs->next->child) w2 = FuzzyWeight_r(inventory, fs->next->child);
else w2 = fs->next->minweight + random() * (fs->next->maxweight - fs->next->minweight);
//the scale factor
scale = (float) (inventory[fs->index] - fs->value) / (fs->next->value - fs->value);
if(fs->next->value == MAX_INVENTORYVALUE) // is fs->next the default case?
return w2; // can't interpolate, return default weight
else
scale = (float) (inventory[fs->index] - fs->value) / (fs->next->value - fs->value);
//scale between the two weights
return scale * w1 + (1 - scale) * w2;
return (1 - scale) * w1 + scale * w2;
} //end if
return FuzzyWeightUndecided_r(inventory, fs->next);
} //end else if
Expand Down

0 comments on commit 78e6b4a

Please sign in to comment.