소스 검색

Update wip - spiderVSman.c

Rudy Boudewijn van Etten 5 년 전
부모
커밋
f12fcc1688
1개의 변경된 파일38개의 추가작업 그리고 9개의 파일을 삭제
  1. 38 9
      games/wip - spiderVSman.c

+ 38 - 9
games/wip - spiderVSman.c

@@ -1,7 +1,8 @@
 //
 // STILL A WORK IN PROGRESS
 //
-//
+// Added - walking animation for player.
+// Added - spider turns towards and move to target(press mouse on screen to see this..)
 
 #define MAX_TILES 100
 
@@ -79,7 +80,7 @@ static float getangle(float x1,float y1,float x2,float y2);
 // Return on which side of the line the point is. l-1 0= r=1
 // lineback x,y linefront x,y point x,y
 int orientation(int ax,int ay,int bx, int by, int cx, int cy);
-
+static float angledifference(float angle1, float angle2);
 
 int main(void)
 {
@@ -130,7 +131,7 @@ int main(void)
     
     int frame=1;
     int time=0;
-    
+    float debug=0.0f;
     // Main game loop
     while (!WindowShouldClose())    // Detect window close button or ESC key
     {
@@ -140,7 +141,7 @@ int main(void)
 
         //spider logic
         if(myspider.state==0){
-            myspider.angle+=1;            
+            myspider.angle+=2;            
             time++;
             if(time>20){
                 frame++;
@@ -157,12 +158,24 @@ int main(void)
             }
             if(frame>2)frame=1;
             float angle = getangle(myspider.position.x,myspider.position.y,myspider.target.x,myspider.target.y);
-            
-            
-            myspider.position.x += cos(angle)*3;
-            myspider.position.y += sin(angle)*3;
-            myspider.angle = angle*180/PI-90;
+            // turn towards target                
+            float difference = angledifference((myspider.angle-90)/180*PI,angle);
+            debug=difference;
+            if(difference<0)myspider.angle-=6;
+            if(difference>0)myspider.angle+=6;
+
+            if(difference>3){
+            myspider.position.x += cos(angle)*5;
+            myspider.position.y += sin(angle)*5;
+
             if((abs(myspider.target.x-myspider.position.x) + abs(myspider.target.y-myspider.position.y))<10)myspider.state=0;
+            }
+
+            //myspider.angle = (PI/180)*angle;
+            //myspider.position.x += cos(angle)*3;
+            //myspider.position.y += sin(angle)*3;
+            //myspider.angle = angle*180/PI-90;
+            //if((abs(myspider.target.x-myspider.position.x) + abs(myspider.target.y-myspider.position.y))<10)myspider.state=0;
         }
 
         if(IsMouseButtonPressed(0)){
@@ -255,6 +268,8 @@ int main(void)
                                                     myplayer.width,myplayer.height},
                                                     (Vector2){0,0},0,WHITE);                  
 
+            DrawText(FormatText("hello: %02.02f",debug),10,10,20,WHITE);
+
         EndDrawing();
         //----------------------------------------------------------------------------------
     }
@@ -1115,3 +1130,17 @@ int orientation(int ax,int ay,int bx, int by, int cx, int cy){
     if(((bx-ax)*(cy-ay)-(by-ay)*(cx-ax))>0)return 1;
     return 0;
 }
+
+// takes radian iput! <0 is left is shorter else right turn is shorter.
+// When it outputs >3 you can asume it aligns with the target(2) angle.
+float angledifference(float angle1, float angle2){
+    float difference = angle1 - angle2;
+    while (difference < -PI){
+        difference += (PI*2);
+    }
+    while (difference > PI){ 
+        difference -= (PI*2);
+    }
+    return difference;
+
+}