#include "MobsCorpACorpIA.h" #include #include #include #include #include #include "MobsCorpACorp.h" #include "GestionPlayer.h" //constructeur MobsCorpACorpIA::MobsCorpACorpIA() { sprite_MobsCorpACorp_ptr = AnimatedSprite::_new(); collision_MobsCorpACorp_ptr = CollisionShape2D::_new(); texture_MobsCorpACorp_ptr.instance(); texture_MobsCorpACorp_ptr->_new(); shape_MobsCorpACorp_ptr.instance(); shape_MobsCorpACorp_ptr->_new(); } /** * Associe les méthodes GODOT aux méthodes de la classe */ void MobsCorpACorpIA::_register_methods() { Godot::print("register Mobs..."); register_method("_physics_process", &MobsCorpACorpIA::_physics_process); register_method("_process", &MobsCorpACorpIA::_process); register_method("_init", &MobsCorpACorpIA::_init); register_method("_ready", &MobsCorpACorpIA::_ready); Godot::print("register Mobs OK!"); } /** * //fonction _pgysics_process meilleur rafraichissement de 60 fps comparé à 30 pour la fonction _process meilleur pour les mouvement plus fluide du mob */ void MobsCorpACorpIA::_physics_process(float dt) { mouvement(dt); m.velocity = move_and_slide(m.velocity); } /** * Methode éxécutée en boucle par Godot */ void MobsCorpACorpIA::_process(float delta) { animation(); } /** * Methode éxécutée lors de l'initialison de la classe (par godot) */ void MobsCorpACorpIA::_init() { Godot::print("init Mobs"); createMobsCorpACorp(); } /** * //fonction qui met en place et creer le mob */ void MobsCorpACorpIA::createMobsCorpACorp() { add_child(sprite_MobsCorpACorp_ptr); add_child(collision_MobsCorpACorp_ptr); Godot::print("Creation mobs"); } /** * Methode éxécutée suivant l'initialison de la classe */ void MobsCorpACorpIA::_ready() { setupMobsCorpACorp(); } /** * //setup des textures et des animations avec l'extension .tres qu'on a créé grâce à l'interface Godot et les fonctions animated sprite */ void MobsCorpACorpIA::setupMobsCorpACorp() { //Setup du shape //Chargement de la texture Godot::print("SetUp de Texture Mobs"); texture_MobsCorpACorp_ptr = ResourceLoader::get_singleton()->load("res://Character/Fire Elemental Sprite Sheet/fireelemental00.png"); //setup du sprite //Godot::print("SetUp de Sprite"); Ref spriteFrames = ResourceLoader::get_singleton()->load("res://Character/Fire Elemental Sprite Sheet/fireelement.tres"); sprite_MobsCorpACorp_ptr->set_sprite_frames(spriteFrames); PoolStringArray AnimNames = spriteFrames->get_animation_names(); PoolStringArray::Read r = AnimNames.read(); Godot::print("Animations Names"); for (int i = 0; i < AnimNames.size(); ++i) { Godot::print(r[i]); } } /** * //fonction qui set la position dans l'écrans du mob */ void MobsCorpACorpIA::setPosition(float x, float y) { Transform2D t; Vector2 pos; Size2 s; //setup de la size s.x = 1; s.y = 1; pos.x = x; pos.y = y; t.set_origin(pos); t.scale(s); set_transform(t); } /** * //fonction office de mini IA qui va déplacer les mobs en fonction de la positon du joueur TargetPosition */ void MobsCorpACorpIA::mouvement(float dt) { Vector2 pos = get_position(); m.velocity = Vector2(0, 0); if (on_ground) { m.velocity.y = 0.0f; } else { //m.velocity.y += gravity * dt; } if (pos.x < TargetPosition.x) { droit(); }else if (pos.x > TargetPosition.x) { gauche(); } if (pos.y < TargetPosition.y) { bas(); } else if (pos.x > TargetPosition.x) { saut(); } } /** * Methode éxécutée lors de l'initialison de la classe (par godot) */ //Fonction qui gere les animations en fonction des mouvements et de la direction du joueur void MobsCorpACorpIA::animation() { if (m.velocity.x > 0.0f) { sprite_MobsCorpACorp_ptr->play("walk"); sprite_MobsCorpACorp_ptr->set_flip_h(false); } else if (m.velocity.x < 0.0f) { sprite_MobsCorpACorp_ptr->play("walk"); sprite_MobsCorpACorp_ptr->set_flip_h(true); } else if (pv <=0 ) { sprite_MobsCorpACorp_ptr->play("dead"); } else { sprite_MobsCorpACorp_ptr->play("idle"); } } /** * Methode éxécutée lors de l'initialison de la classe (par godot) */ //Deplacement mob a droite void MobsCorpACorpIA::droit() { //Godot::print("Deplacement mob a droite"); m.velocity.x = speed; } /** * //Deplacement mob a gauche */ void MobsCorpACorpIA::gauche() { //Godot::print("Deplacement mob a gauche"); m.velocity.x = -speed; } /** * Deplacement mob a bas */ void MobsCorpACorpIA::bas() { m.velocity.y = -power_jump; } /** * //Deplacement mob a saut */ void MobsCorpACorpIA::saut() { m.velocity.y = power_jump; }