skywarth/Fenrir-wolfpack-simulator

View on GitHub
modules/modifiers.js

Summary

Maintainability
F
3 days
Test Coverage

function calculateBiomeBasedHuntSuccesChance(){


    for(let i=1;i<wolves.length;i++)
    {
        if(wolves[i].definitiveFields.familySet.id===environment.biome.id)
        {
            biomeBasedHuntSuccessChance+=(50/wolves.length);
        }
        else if((wolves[i].definitiveFields.familySet.name==="arctic" || wolves[i].definitiveFields.familySet.name==="taiga")  && (environment.biome.name==="arctic" || environment.biome.name==="taiga"))
        {
            biomeBasedHuntSuccessChance+=(30/wolves.length);
        }

        else if((wolves[i].definitiveFields.familySet.name==="forest" || wolves[i].definitiveFields.familySet.name==="jungle")  && (environment.biome.name==="forest" || environment.biome.name==="jungle"))
        {
            biomeBasedHuntSuccessChance+=(30/wolves.length);
        }

        else if((wolves[i].definitiveFields.familySet.name==="tundra" || wolves[i].definitiveFields.familySet.name==="plains")  && (environment.biome.name==="tundra" || environment.biome.name==="plains"))
        {
            biomeBasedHuntSuccessChance+=(30/wolves.length);
        }
        else if((wolves[i].definitiveFields.familySet.name==="tundra" || wolves[i].definitiveFields.familySet.name==="plains")  && (environment.biome.name==="tundra" || environment.biome.name==="plains"))
        {
            biomeBasedHuntSuccessChance+=(30/wolves.length);
        }
        else{
            biomeBasedHuntSuccessChance-=(50/wolves.length);
        }
    }
}




function calculateActiveClimateBasedBiasHuntChance(){

    if(currentWeatherEvent==="tornado"){
    activeClimateBasedBiasHuntChance=0;
    }
    else if(currentWeatherEvent==="frost"){
        activeClimateBasedBiasHuntChance=35;
    }
    else if(currentWeatherEvent==="constant rain"){
        activeClimateBasedBiasHuntChance=0;
    }
    else if(currentWeatherEvent==="fog"){
        activeClimateBasedBiasHuntChance=100;
    }
    else if(currentWeatherEvent==="none"){
        activeClimateBasedBiasHuntChance=50;
    }
    else{
        activeClimateBasedBiasHuntChance=50;
    }

}


function calculateDiseaseBasedHuntChance(){
    for(let i=1;i<wolves.length;i++)
    {
        if(wolves[i].definitiveFields.diseases.length>0){
            diseaseBasedHuntChance=(diseaseBasedHuntChance-(50*wolves[i].diseases.length))/2;
        }


    }
}

function calculateHungerBasedHuntChance(){
    for(let i=1;i<wolves.length;i++)
    {
       if(wolves[i].definitiveFields.hunger>0){
            hungerBasedHuntChance-=(wolves[i].definitiveFields.hunger/wolves.length);
        }
       else{
           hungerBasedHuntChance+=(100/wolves.length);
       }
    }
    if(hungerBasedHuntChance>100){//error check
        hungerBasedHuntChance=100;
    }

}

function calculatePackSizeBasedHuntChance(){
    if(wolves.length<(idealPacksize*50/100)){
        packSizeBasedHuntChance=25;
    }
    else if(wolves.length>(idealPacksize*50/100) && wolves.length<=idealPacksize){
        packSizeBasedHuntChance=50;
    }
    else if(wolves.length>idealPacksize){
        packSizeBasedHuntChance=100;
    }
}

function calculateHuntSuccessChance() {

    try{
        calculateBiomeBasedHuntSuccesChance();
        calculateDiseaseBasedHuntChance();
        calculateActiveClimateBasedBiasHuntChance();
        calculateHungerBasedHuntChance();
        calculatePackSizeBasedHuntChance();
        huntSuccessChance=(biomeBasedHuntSuccessChance+constantChance+wolfHuntSuccessChance+activeClimateBasedBiasHuntChance+diseaseBasedHuntChance+hungerBasedHuntChance+packSizeBasedHuntChance)/7;
        console.log("in the calculate hunt chance:"+huntSuccessChance);
        simulationLogs.push(new simulationLog(currentDate,"Chance", "Current hunting success chance is: "+huntSuccessChance));
        return huntSuccessChance;
    }
    catch(e){
        console.log(e);
    }
    finally {
        resetHuntChances();
    }

    //resetHuntChances();

    //biomeBasedHuntSuccessChance calculated
    //constantChance is constant, from parameters
    //wolfHuntSuccessChance is constant, from parameters
    //activeClimateBasedBiasHuntChance is calculated
    //diseaseBasedHuntChance is calculated


}


function calculateAlphaPoints(){
    for(let i=1;i<wolves.length;i++)
    {
        //age, diseases, anatomic sizes, marks, characteristics,
        let alphaP=100;
        for(let k=0;k<wolves[i].definitiveFields.diseases.length;k++){
            alphaP-=10;
        }
        for(let l=0;l<wolves.length;l++)
        {
            if(wolves[i].definitiveFields.age>wolves[l].definitiveFields.age){
                alphaP+=5;
            }
            else if(wolves[i].definitiveFields.age===wolves[l].definitiveFields.age){
                //same wolf
            }
            else{
                alphaP-=5;
            }

            /////////

            if(wolves[i].definitiveFields.wolfAnatomicSizes.skullDiameter>wolves[l].definitiveFields.wolfAnatomicSizes.skullDiameter){
                alphaP+=2;
            }
            else if(wolves[i].definitiveFields.wolfAnatomicSizes.skullDiameter===wolves[l].definitiveFields.wolfAnatomicSizes.skullDiameter){
                //same wolf
            }
            else{
                alphaP-=2;
            }
            if(wolves[i].definitiveFields.wolfAnatomicSizes.pawDiameter>wolves[l].definitiveFields.wolfAnatomicSizes.pawDiameter){
                alphaP+=2;
            }
            else if(wolves[i].definitiveFields.wolfAnatomicSizes.pawDiameter===wolves[l].definitiveFields.wolfAnatomicSizes.pawDiameter){

            }
            else{
                alphaP-=2;
            }
            if(wolves[i].definitiveFields.wolfAnatomicSizes.foreLegHeight>wolves[l].definitiveFields.wolfAnatomicSizes.foreLegHeight){
                alphaP+=2;
            }
            else if(wolves[i].definitiveFields.wolfAnatomicSizes.foreLegHeight===wolves[l].definitiveFields.wolfAnatomicSizes.foreLegHeight){
                //same wolf
            }
            else{
                alphaP-=2;
            }


            ////////////////

            if(wolves[i].definitiveFields.strMark>wolves[l].definitiveFields.strMark){
                alphaP+=5;
            }
            else if(wolves[i].definitiveFields.strMark===wolves[l].definitiveFields.strMark){
                //same wolf
            }
            else{
                alphaP-=5;
            }
            if(wolves[i].definitiveFields.agiMark>wolves[l].definitiveFields.agiMark){
                alphaP+=3;
            }
            else if(wolves[i].definitiveFields.agiMark===wolves[l].definitiveFields.agiMark){

            }
            else{
                alphaP-=3;
            }
            if(wolves[i].definitiveFields.intMark>wolves[l].definitiveFields.intMark){
                alphaP+=2;
            }
            else if(wolves[i].definitiveFields.intMark===wolves[l].definitiveFields.intMark){
                //same wolf
            }
            else{
                alphaP-=2;
            }

        }
        /////////
        let character=wolves[i].definitiveFields.characteristics;
        if(character.indexOf("leader")!==0 || character.indexOf("dominant")!==0 ){
            alphaP+=20;
        }
        wolves[i].definitiveFields.alphaPoints=alphaP;
        simulationLogs.push(new simulationLog(currentDate,"Calculation","The wolf id:"+wolves[i].structuralFields.id+" has got alpha point of: "+alphaP));


    }

}