예제 #1
0
    //Determines if a creature successfully kills its target, then takes care of casualties and enegery gain.
    void Hunt(Critter target, Hex habitat)
    {
        float casualties = 0;
        float bite = biteSize;
        float targetPop = target.GetLocalPopulation(habitat);
        float targetFoodValue = target.GetBaseFoodValue();
        float huntScore = ChaseScore(target) * FightScore(target) / 100;
        //print ("-----Target = Creature#" + target.number + "------------------------------------------------------------------------------------------Hunt Success Probability = " + huntScore + ".\r\n");

        //print ("This creature (#" + number + ") Hunts Creature #" + target.number + ".\r\n");
        if(target == this){
            AquireTarget(habitat);
        }
        else if (Random.Range (1, 101) <= huntScore * AptitudeCheck(target)) {
            float popRatio;

            if(bite > energy_Needed){
                bite = energy_Needed;
            }
            if(bite < 0){
                bite = 0;
            }

            casualties = (float)((bite / targetFoodValue * target.GetSize()));

            casualties = KillCount(target, casualties);

            if(casualties >= targetPop){
                casualties = targetPop / 2;
            }

            popRatio = targetPop / (float)(1.25f * GetLocalPopulation(habitat));

            if(popRatio > 1.25f){
                popRatio = 1.25f;
            }

            casualties = (casualties * popRatio);

            foodTaken += casualties * (targetFoodValue * size);

            //print (name + " + Target: " + target.name + " PopRatio " + popRatio + "\r\n");

            if(energy_Needed <= foodTaken){
                foodTaken = energy_Needed;
            }

            targetPop -= casualties;
            target.SetLocalAdultPopulation(targetPop, habitat);

            target.AddCrittersEaten(casualties);
            target.AddToHuntDeathsList(habitat, turn, casualties);

            habitat.AddExcessMeatFood(foodTaken * .5f);

            target.MortalityCheck(habitat);

            target.UpdateStats();

            //if(isPlayer){
                //print ("Total Kills = " + casualties + ". Food aquired = " + foodTaken + " vs. Energy Needed = " + energy_Needed +"\r\n");
            //}
        } //else {print ("Hunt Failed.\r\n");}
    }