Example #1
0
    private void Start()
    {
        p  = player.GetComponent <player_controller>();
        m  = monster.GetComponent <monster_controller>();
        ws = new world_state();

        StartCoroutine(UpdateSensors());
    }
 //tests a=the world_observer world state against the local saved world state. Acts as an interrupt checked by the HTNplanner
 private void WorldStateHasChanged(world_state w0, world_state wf)
 {
     if (w0.player_alive == wf.player_alive && w0.player_in_range == wf.player_in_range)
     {
         wsChange = false;
     }
     else
     {
         wsChange = true;
         taskDone = true;
     }
 }
    //evals compound tasks preconditions against the world state.
    private bool EvalCompoundPreConditions(string taskName)
    {
        ws = s.ws;
        switch (taskName)
        {
        case "wander":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "attack":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "navSpeed":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "findObjectToThrow":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "throw":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "superThrow":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        default:
            return(false);
        }
    }
    //evals primitive tasks preconditions against the world state.
    private bool EvalPrimitivePreConditions(string taskName)
    {
        ws = s.ws;
        switch (taskName)
        {
        case "setNavDest":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "growl":
            if (ws.player_alive == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "idle":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "walk":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "run":
            if (ws.player_alive == true && ws.player_in_range == false)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "getAngry":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "findObj":
            if (ws.player_alive == true && ws.player_in_range == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "navToObj":
            if (ws.player_alive == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "pickUp":
            if (ws.player_alive == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "recover":
            if (ws.player_alive == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case "objectThrow":
            if (ws.player_alive == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        default:
            return(false);
        }
    }