#ifndef GDKYARA_H
#define GDKYARA_H

#include <godot_cpp/classes/character_body2d.hpp>

// Children:
#include "controller.h"
#include <godot_cpp/classes/collision_shape2d.hpp>
#include <godot_cpp/classes/sprite2d.hpp>
#include <godot_cpp/classes/multiplayer_synchronizer.hpp>
// Grandchildren:
#include <godot_cpp/classes/circle_shape2d.hpp>
// YOU MAY GET MYSTERIOUS "INVALID USE OF INCOMPLETE TYPE" ERRORS IF YOU DO NOT INCLUDE THE THINGS YOU NEED, BECAUSE THEY MIGHT BE BRIEFLY DEFINED IN OTHER THINGS.
#include <godot_cpp/classes/scene_replication_config.hpp>
#include <godot_cpp/variant/color.hpp>

namespace godot
{
class Game;

class Character : public CharacterBody2D
{
	GDCLASS(Character, CharacterBody2D)
private:
	double speed;
	double balance_radius;
	double balance_radius_cur;
	void move(int flags);
	Sprite2D* face;
	Controller* input;
	MultiplayerSynchronizer* sync;
	CollisionShape2D* shape;
	Color* br_col;
protected:
	static void _bind_methods();
public:
	Character();
	~Character();
	void _process(double delta) override;
	void _ready() override;
	void _enter_tree() override;
	void _draw() override;
	int multiplayerowner;
	Game* mummy;
	// Garbage
	void set_balance_radius(const double p_balance_radius);
	double get_balance_radius() const;
	void set_speed(const double p_speed);
	double get_speed() const;
	// This garbage ripped straight from sprite2d because I basically just want to pass it through.
	// I don't really need to (I can just make the sprite public) but it's good practice
	// (By good practice I mean this cost me at least an hour of debugging const Ref<>)
	void set_texture(const Ref<Texture2D> &p_texture);
	Ref<Texture2D> get_texture() const;
};
}

#endif