dungeonanddeamon/DungeonAndDeamonScript/DungeonAndDemaonScript/MobsCorpACorpIA.cpp
Estrela Allan p1923381 44ff4736e9 Mise a jour commentaire
2020-05-03 17:38:36 +02:00

249 lines
4.8 KiB
C++

#include "MobsCorpACorpIA.h"
#include <ConfigFile.hpp>
#include <SpriteFrames.hpp>
#include <Input.hpp>
#include <ResourceLoader.hpp>
#include <Texture.hpp>
#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();
}
/**
* <summary>Associe les méthodes GODOT aux méthodes de la classe</summary>
*/
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!");
}
/**
* <summary>//fonction _pgysics_process meilleur rafraichissement de 60 fps comparé à 30 pour la fonction _process meilleur pour les mouvement plus fluide du mob
</summary>
*/
void MobsCorpACorpIA::_physics_process(float dt)
{
mouvement(dt);
m.velocity = move_and_slide(m.velocity);
}
/**
* <summary>Methode éxécutée en boucle par Godot</summary>
*/
void MobsCorpACorpIA::_process(float delta)
{
animation();
}
/**
* <summary>Methode éxécutée lors de l'initialison de la classe (par godot)</summary>
*/
void MobsCorpACorpIA::_init()
{
Godot::print("init Mobs");
createMobsCorpACorp();
}
/**
* <summary>//fonction qui met en place et creer le mob</summary>
*/
void MobsCorpACorpIA::createMobsCorpACorp()
{
add_child(sprite_MobsCorpACorp_ptr);
add_child(collision_MobsCorpACorp_ptr);
Godot::print("Creation mobs");
}
/**
* <summary>Methode éxécutée suivant l'initialison de la classe</summary>
*/
void MobsCorpACorpIA::_ready()
{
setupMobsCorpACorp();
}
/**
* <summary>//setup des textures et des animations avec l'extension .tres qu'on a créé grâce à l'interface Godot et les fonctions animated sprite
</summary>
*/
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> 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]);
}
}
/**
* <summary>//fonction qui set la position dans l'écrans du mob</summary>
*/
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);
}
/**
* <summary>//fonction office de mini IA qui va déplacer les mobs en fonction de la positon du joueur TargetPosition </summary>
*/
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();
}
}
/**
* <summary>Methode éxécutée lors de l'initialison de la classe (par godot)</summary>
*/
//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");
}
}
/**
* <summary>Methode éxécutée lors de l'initialison de la classe (par godot)</summary>
*/
//Deplacement mob a droite
void MobsCorpACorpIA::droit()
{
//Godot::print("Deplacement mob a droite");
m.velocity.x = speed;
}
/**
* <summary>//Deplacement mob a gauche</summary>
*/
void MobsCorpACorpIA::gauche()
{
//Godot::print("Deplacement mob a gauche");
m.velocity.x = -speed;
}
/**
* <summary>Deplacement mob a bas</summary>
*/
void MobsCorpACorpIA::bas()
{
m.velocity.y = -power_jump;
}
/**
* <summary>//Deplacement mob a saut</summary>
*/
void MobsCorpACorpIA::saut()
{
m.velocity.y = power_jump;
}