2024-04-30 22:07:50 -06:00
|
|
|
#include <sstream>
|
|
|
|
|
#include <fstream>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <iterator>
|
|
|
|
|
|
|
|
|
|
#include "botcraft/Game/World/World.hpp"
|
|
|
|
|
#include "botcraft/Game/Entities/EntityManager.hpp"
|
|
|
|
|
#include "botcraft/Game/Entities/LocalPlayer.hpp"
|
|
|
|
|
#include "botcraft/Network/NetworkManager.hpp"
|
|
|
|
|
|
|
|
|
|
#include "botcraft/AI/BehaviourTree.hpp"
|
|
|
|
|
#include "botcraft/AI/Tasks/AllTasks.hpp"
|
|
|
|
|
|
|
|
|
|
#include "CommandClient.h"
|
|
|
|
|
|
|
|
|
|
using namespace Botcraft;
|
|
|
|
|
using namespace ProtocolCraft;
|
|
|
|
|
|
|
|
|
|
CommandClient::CommandClient(const bool use_renderer_) : TemplatedBehaviourClient<CommandClient>(use_renderer_){
|
2024-05-02 16:12:00 -06:00
|
|
|
std::cout << "Bot started!" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommandClient::~CommandClient(){}
|
|
|
|
|
|
|
|
|
|
bool running = false;
|
|
|
|
|
bool gotoCmdStream = false;
|
|
|
|
|
|
|
|
|
|
void CommandClient::gotopos(int x, int y, int z){
|
|
|
|
|
Position target_position = Position(x, y, z);
|
|
|
|
|
float speed_multiplier = 2.0f;;
|
|
|
|
|
|
|
|
|
|
auto tree = Builder<CommandClient>("goto tree")
|
|
|
|
|
.sequence()
|
|
|
|
|
// Perform the pathfinding in a Selector,
|
|
|
|
|
// so it exits as soon as one leaf
|
|
|
|
|
// returns success
|
|
|
|
|
.selector()
|
|
|
|
|
// The next three lines do exactly the same,
|
|
|
|
|
// they're only here to show the different
|
|
|
|
|
// possibilities to create a leaf. Note that
|
|
|
|
|
// only the lambda solution can use default
|
|
|
|
|
// parameters values
|
|
|
|
|
.leaf("go to lambda", [=](CommandClient& c) { return GoTo(c, target_position, 0, 0, 0, true, false, speed_multiplier); })
|
|
|
|
|
.leaf("go to function", GoTo, target_position, 0, 0, 0, true, false, speed_multiplier)
|
|
|
|
|
.leaf("go to std::bind", std::bind(GoTo, std::placeholders::_1, target_position, 0, 0, 0, true, false, speed_multiplier))
|
|
|
|
|
// If goto fails, say something in chat
|
|
|
|
|
.leaf(Say, "Pathfinding failed :(")
|
|
|
|
|
.end()
|
|
|
|
|
// Switch back to empty behaviour
|
|
|
|
|
.leaf([](CommandClient& c) { c.SetBehaviourTree(nullptr); return Status::Success; })
|
|
|
|
|
.end();
|
2024-04-30 22:07:50 -06:00
|
|
|
|
2024-05-02 16:12:00 -06:00
|
|
|
SetBehaviourTree(tree);
|
2024-04-30 22:07:50 -06:00
|
|
|
}
|
|
|
|
|
|
2024-05-02 16:12:00 -06:00
|
|
|
void CommandClient::gotocmd(int x, int y, int z){
|
|
|
|
|
if(running && !gotoCmdStream){
|
|
|
|
|
std::cout << "Already running a task." << std::endl;
|
|
|
|
|
running = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gotopos(x,y,z);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CommandClient::startGotoSteamMode(){
|
|
|
|
|
if(running){
|
|
|
|
|
std::cout << "Already running a task." << std::endl;
|
|
|
|
|
running = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
running = true;
|
|
|
|
|
gotoCmdStream = true;
|
|
|
|
|
}
|
2024-04-30 22:07:50 -06:00
|
|
|
|
2024-05-02 16:12:00 -06:00
|
|
|
void CommandClient::stop(){
|
|
|
|
|
if(running){
|
|
|
|
|
std::cout << "Stopped..." << std::endl;
|
|
|
|
|
SetBehaviourTree(nullptr);
|
|
|
|
|
gotoCmdStream = false;
|
|
|
|
|
running = false;
|
|
|
|
|
}else{
|
|
|
|
|
std::cout << "No task is running..." << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|