فهرست منبع

[feat] change float to double, more precise

Adrien Carteron 2 سال پیش
والد
کامیت
59186a7626
5فایلهای تغییر یافته به همراه42 افزوده شده و 37 حذف شده
  1. 7 7
      includes/Circle.hh
  2. 6 6
      includes/mobile2d.hh
  3. 15 12
      includes/prologparse.hpp
  4. 12 10
      src/Circle.cpp
  5. 2 2
      src/mgame.cpp

+ 7 - 7
includes/Circle.hh

@@ -10,17 +10,17 @@ public:
   Circle(prologparse*);
   Circle(int,int);
   Circle(prologparse*,int,int);
-  float x()override ;
-  float y()override ;
-  float limLeft()override ;
-  float limRight()override;
-  float limUp()override ;
-  float limDown()override ;
+  double x()override ;
+  double y()override ;
+  double limLeft()override ;
+  double limRight()override;
+  double limUp()override ;
+  double limDown()override ;
   void moveLeft()override;
   void moveRight()override;
   void moveUp()override;
   void moveDown()override;
-  //std::shared_ptr<sf::CircleShape> getMobile(){return shape;}
+  double getDiameter();
 };
 
 #endif // CIRCLE_HH

+ 6 - 6
includes/mobile2d.hh

@@ -88,12 +88,12 @@ public:
   mobile2d();
   mobile2d(prologparse* plparse_);
   virtual ~mobile2d();
-  virtual float x()=0;
-  virtual float y()=0;
-  virtual float limLeft()=0; 
-  virtual float limRight()=0;
-  virtual float limUp()=0; 
-  virtual float limDown()=0;
+  virtual double x()=0;
+  virtual double y()=0;
+  virtual double limLeft()=0; 
+  virtual double limRight()=0;
+  virtual double limUp()=0; 
+  virtual double limDown()=0;
   virtual void moveLeft()=0;
   virtual void moveRight()=0;
   virtual void moveUp()=0;

+ 15 - 12
includes/prologparse.hpp

@@ -26,6 +26,9 @@ private:
   void unstack(float element){
     gEvents.push_back(Mk_Float(element));
   }
+  void unstack(double element){
+    gEvents.push_back(Mk_Float(element));
+  }
   
   template<typename ...Values>
   void unstack(int element,Values... elements){
@@ -47,6 +50,11 @@ private:
     gEvents.push_back(Mk_Float(element));
     unstack(elements...);
   }
+  template<typename ...Values>
+  void unstack(double element,Values... elements){
+    gEvents.push_back(Mk_Float(element));
+    unstack(elements...);
+  }
   
 public:
   /** \brief Void constructor
@@ -55,11 +63,6 @@ public:
    * 
    */
   prologparse(){
-    //std::cout<<"lol"<<std::endl;
-    //
-     // int stt=Start_Prolog(1, new char*());
-     // std::cout<<stt<<std::endl;
-     //Try_Execute_Top_Level();
   }
   void resetPl(){
     Pl_Reset_Prolog ();
@@ -111,13 +114,13 @@ public:
     Pl_Query_Begin(PL_FALSE);
     result=Pl_Query_Call(func, gEvents.size(), plt);
     Pl_Query_End(PL_KEEP_FOR_PROLOG);
-    // if(result==1){
-    //   std::cout<<"true"<<std::endl;
-    // }else{
-    //   if(result==0){
-    // 	std::cout<<"false"<<std::endl;
-    //   }
-    // }
+    if(result==1){
+      std::cout<<"gprolog true"<<std::endl;
+    }else{
+      if(result==0){
+	std::cout<<"gprolog false"<<std::endl;
+      }
+    }
     gEvents.clear();
     return result;
   }

+ 12 - 10
src/Circle.cpp

@@ -16,25 +16,23 @@ Circle::Circle(prologparse * plparse,int x, int y):mobile2d(plparse){
   shape=std::make_shared<sf::CircleShape>(sf::CircleShape(10));
   shape->setPosition(x,y);
 }
-float Circle::x(){
+double Circle::x(){
   return shape->getPosition().x;
 }
-float Circle::y(){
+double Circle::y(){
   return shape->getPosition().y;
 }
-float Circle::limLeft() {
+double Circle::limLeft() {
   return x() /*- shape->getRadius()*/;
 }
-float Circle::limRight() {
-  std::shared_ptr<sf::CircleShape> circle=std::dynamic_pointer_cast<sf::CircleShape>(shape);
-  return x() + circle->getRadius()*2.f;
+double Circle::limRight() {
+  return x() + getDiameter();
 }
-float Circle::limUp() {
+double Circle::limUp() {
   return y() /*- shape->getRadius()*/;
 }
-float Circle::limDown() {
-  std::shared_ptr<sf::CircleShape> circle=std::dynamic_pointer_cast<sf::CircleShape>(shape);
-  return y() + circle->getRadius()*2.f;
+double Circle::limDown() {
+  return y() + getDiameter();
 }
 void Circle::moveLeft(){
   shape->move(-1, 0);
@@ -48,3 +46,7 @@ void Circle::moveUp(){
 void Circle::moveDown(){
   shape->move(0, 1);
 }
+double Circle::getDiameter(){
+  std::shared_ptr<sf::CircleShape> circle=std::dynamic_pointer_cast<sf::CircleShape>(shape);  
+  return circle->getRadius()*2.f;
+}

+ 2 - 2
src/mgame.cpp

@@ -85,7 +85,7 @@ int main(int argc, char** argv){
 
       
       //contr.controleMovable2d(circle);
-      //plp->rule("inter");
+      plp->rule("inter");
       circle.update();
       circle2.update();
       // c'est ici qu'on dessine tout
@@ -102,7 +102,7 @@ int main(int argc, char** argv){
       window.display();
     }
 
-  Stop_Prolog();
+  plp->stopPl();
   return 0;