Advertisement
Mr-A

A-Engine <ai.cpp> v0.07

Aug 5th, 2014
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.10 KB | None | 0 0
  1. //==========AI.cpp===========
  2.  
  3.  
  4. #include "AI.h"
  5. #include <math.h>
  6. #include <cmath>
  7. #include <iostream>
  8. #include "globals.h"
  9. #include <stdlib.h>
  10.  
  11.  
  12.  
  13.  
  14. void AI_Stuff::updateControls(objcopy * objcop)
  15. {
  16.     if (_keys[0])
  17.     {
  18.         if (objcop->P_UP_C) objcop->P_UP_C=false;
  19.         if (objcop->Tu)
  20.         {
  21.             objcop->P_UP_C=true;
  22.             objcop->Tu=false;
  23.         }
  24.         objcop->P_UP= true;
  25.         objcop->P_DOWN= false;
  26.         objcop->DASHL=0;
  27.         objcop->DASHR=0;
  28.     }
  29.     else
  30.     {
  31.         objcop->Tu=true;
  32.         objcop->P_UP= false;
  33.         objcop->P_UP_C=false;
  34.     }
  35.  
  36.     if (_keys[1])
  37.     {
  38.         if (objcop->P_DOWN_C) objcop->P_DOWN_C=false;
  39.         if (objcop->Td)
  40.         {
  41.             objcop->P_DOWN_C=true;
  42.             objcop->Td=false;
  43.         }
  44.         objcop->P_DOWN= true;
  45.         objcop->P_UP=false;
  46.         objcop->DASHL=0;
  47.         objcop->DASHR=0;
  48.     }
  49.     else
  50.     {
  51.         objcop->Td=true;
  52.         objcop->P_DOWN= false;
  53.         objcop->P_DOWN_C=false;
  54.     }
  55.  
  56.     if (_keys[2])
  57.     {
  58.         if (objcop->P_LEFT_C) objcop->P_LEFT_C=false;
  59.         if (objcop->Tl)
  60.         {
  61.             objcop->P_LEFT_C=true;
  62.             objcop->Tl=false;
  63.         }
  64.         objcop->P_LEFT= true;
  65.         objcop->P_RIGHT=false;
  66.         objcop->P_RIGHT_C=false;
  67.         objcop->DshClksIntrvlL=SDL_GetTicks();
  68.         objcop->DshClksIntrvlR=0;
  69.         objcop->DASHR=0;
  70.     }
  71.     else if (!_keys[2] && objcop->P_LEFT)
  72.     {
  73.         objcop->Tl=true;
  74.         objcop->P_LEFT= false;
  75.         objcop->P_LEFT_C=false;
  76.         if (!objcop->P_LEFT)
  77.             if (SDL_GetTicks()-objcop->DshClksIntrvlL<110)
  78.             {
  79.                 objcop->DASHL=1;
  80.                 objcop->DASHR=0;
  81.             }
  82.     }
  83.  
  84.     if (_keys[3])
  85.     {
  86.         if (objcop->P_RIGHT_C) objcop->P_RIGHT_C=false;
  87.         if (objcop->Tr)
  88.         {
  89.             objcop->P_RIGHT_C=true;
  90.             objcop->Tr=false;
  91.         }
  92.         objcop->P_RIGHT=true;
  93.         objcop->P_LEFT=false;
  94.         objcop->P_LEFT_C=false;
  95.         objcop->DshClksIntrvlR=SDL_GetTicks();
  96.         objcop->DshClksIntrvlL=0;
  97.         objcop->DASHL=0;
  98.     }
  99.     else if (!_keys[3] && objcop->P_RIGHT)
  100.     {
  101.         objcop->Tr=true;
  102.         objcop->P_RIGHT=false;
  103.         objcop->P_RIGHT_C=false;
  104.         if(!objcop->P_RIGHT)
  105.             if (SDL_GetTicks()-objcop->DshClksIntrvlR<110)
  106.             {
  107.                 objcop->DASHR=1;
  108.                 objcop->DASHL=0;
  109.             }
  110.  
  111.     }
  112.  
  113.     if (_keys[4])
  114.     {
  115.         if (objcop->P_ATTACK_C) objcop->P_ATTACK_C=false;
  116.         if (objcop->TA)
  117.         {
  118.             objcop->P_ATTACK_C=true;
  119.             objcop->TA=false;
  120.         }
  121.         objcop->P_ATTACK=true;
  122.     }
  123.     else
  124.     {
  125.         objcop->TA=true;
  126.         objcop->P_ATTACK=false;
  127.         objcop->P_ATTACK_C=false;
  128.     }
  129.  
  130.  
  131.     if (_keys[5])
  132.     {
  133.         if (objcop->P_DEFEND_C) objcop->P_DEFEND_C=false;
  134.         if (objcop->TD)
  135.         {
  136.             objcop->P_DEFEND_C=true;
  137.             objcop->TD=false;
  138.         }
  139.         objcop->P_DEFEND=true;
  140.     }
  141.     else
  142.     {
  143.         objcop->TD=true;
  144.         objcop->P_DEFEND=false;
  145.         objcop->P_DEFEND_C=false;
  146.     }
  147.  
  148.  
  149.     if (_keys[6])
  150.     {
  151.         if (objcop->P_JUMP_C) objcop->P_JUMP_C=false;
  152.         if (objcop->TJ)
  153.         {
  154.             objcop->P_JUMP_C=true;
  155.             objcop->TJ=false;
  156.         }
  157.         objcop->P_JUMP=true;
  158.     }
  159.     else
  160.     {
  161.         objcop->TJ=true;
  162.         objcop->P_JUMP=false;
  163.         objcop->P_JUMP_C=false;
  164.     }
  165.  
  166.  
  167.     if (_keys[7])
  168.     {
  169.         if (objcop->P_SPECIAL_C) objcop->P_SPECIAL_C=false;
  170.         if (objcop->TS)
  171.         {
  172.             objcop->P_SPECIAL_C=true;
  173.             objcop->TS=false;
  174.         }
  175.         objcop->P_SPECIAL=true;
  176.     }
  177.     else
  178.     {
  179.         objcop->TS=true;
  180.         objcop->P_SPECIAL=false;
  181.         objcop->P_SPECIAL_C=false;
  182.     }
  183.  
  184.     _keys[0]=false;
  185.     _keys[1]=false;
  186.     _keys[2]=false;
  187.     _keys[3]=false;
  188.     _keys[4]=false;
  189.     _keys[5]=false;
  190.     _keys[6]=false;
  191.     _keys[7]=false;
  192.  
  193. }
  194.  
  195. void AI_Stuff::holdKey(int keyindex)
  196. {
  197.     _keys[keyindex]=true;
  198. }
  199.  
  200. void AI_Stuff::tapKey(int keyindex, float rate)
  201. {
  202.     //rate=FPS/rate;
  203.     //rate=1;
  204.     if (_rate_count<=rate)
  205.     {
  206.         _rate_count+=1;
  207.     }
  208.     else
  209.     {
  210.         if (keyindex==4)
  211.         {
  212.             int asdfasdfasdf=11;
  213.         }
  214.         _keys[keyindex]=true;
  215.         _rate_count=0;
  216.     }
  217. }
  218.  
  219.  
  220.  
  221. void AI_Stuff::releaseKey(int keyindex)
  222. {
  223.     _keys[keyindex]=false;
  224. }
  225.  
  226.  
  227. void AI_Stuff::setTarget(objcopy * objcop, LOAD * LOADED)
  228. {
  229.     int temp=0, temp2=0;                                              //nearest in distance , distance
  230.     for (int x=0; x < LOADED->ON_SCREEN_OBJCOUNT; x++)
  231.     {
  232.  
  233.         temp2=
  234.             sqrt(
  235.                 pow(LOADED->ON_SCREEN_REAL_OBJS[x].posx,2)+
  236.                 pow(LOADED->ON_SCREEN_REAL_OBJS[x].posy,2)+
  237.                 pow(LOADED->ON_SCREEN_REAL_OBJS[x].posz,2)
  238.             );
  239.  
  240.         if (LOADED->ON_SCREEN_REAL_OBJS[x].team!=objcop->team && temp2>temp)
  241.         {
  242.             temp=temp2;
  243.             _current_target=x;
  244.         }
  245.  
  246.     }
  247. }
  248.  
  249. void AI_Stuff::playAI(objcopy * objcop, LOAD * LOADED)
  250. {
  251.     int d_x=objcop->posx-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posx;
  252.     int d_y=objcop->posy-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posy;
  253.     int d_z=objcop->posz-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posz;
  254.     int posx=objcop->posx;
  255.     int posy=objcop->posy;
  256.     int posz=objcop->posz;
  257.     int tposx=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posx;
  258.     int tposy=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posy;
  259.     int tposz=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posz;
  260.     int state= LOADED->OBJECTS[objcop->id].Eval(objcop, LOADED->OBJECTS[objcop->id].Frames[objcop->currframe].state);
  261.     int tstate= LOADED->OBJECTS[objcop->id].Eval(&LOADED->ON_SCREEN_REAL_OBJS[_current_target],
  262.                 LOADED->OBJECTS[LOADED->ON_SCREEN_REAL_OBJS[_current_target].id].
  263.                 Frames[LOADED->ON_SCREEN_REAL_OBJS[_current_target].currframe].state);
  264.  
  265.     int sp=objcop->currsp;
  266.     int rp=objcop->currrp;
  267.     int random=(rand()*4321) % 100;
  268.     int facing=objcop->facing;
  269.     bool facingtarget= (d_x > 0 && objcop->facing == 1)||(d_x < 0 && objcop->facing == 0)? true:false;
  270.  
  271.     //Jump
  272.     if ((abs(d_y)>30 && posy==0) || abs(d_z)>30)
  273.     {
  274.         holdKey(6);
  275.     }
  276.  
  277.     //walk or run
  278.     if ((d_x>80 && abs(d_x)<=300)||(state==2 && d_x>100))
  279.     {
  280.         holdKey(2);
  281.     }
  282.     if ((d_x<-80 && abs(d_x)<=300)||(state==2 && d_x<-100))
  283.     {
  284.         holdKey(3);
  285.     }
  286.     if (abs(d_x)>300 && abs(d_z)<20)
  287.     {
  288.         if (posx > tposx)
  289.         {
  290.             tapKey(2, 10);
  291.         }
  292.         if (posx < tposx)
  293.         {
  294.             tapKey(3,10);
  295.         }
  296.     }
  297.  
  298.     //face correct side
  299.     if (!facingtarget)
  300.     {
  301.         if (d_x>0)
  302.         {
  303.             holdKey(2);
  304.         }
  305.         else
  306.         {
  307.             holdKey(3);
  308.         }
  309.     }
  310.  
  311.  
  312.  
  313.     //go sideways in the Z-Axis
  314.     if (d_z>4)
  315.     {
  316.         holdKey(0);
  317.     }
  318.     if (d_z<-4)
  319.     {
  320.         holdKey(1);
  321.     }
  322.  
  323.     if (facingtarget && abs(d_z)<9 && state==3)
  324.     {
  325.         if (abs(d_x)<110)
  326.         {
  327.             holdKey(4);
  328.         }
  329.     }
  330.  
  331.     if (facingtarget && abs(d_z)<9 && posy==0 && (state==0||state==1||state==4321))
  332.     {
  333.         if (sp > 50 && abs(d_x)<270 && abs(d_x)>80 && abs(d_y)<40 && random>50)  //3 hit combo
  334.         {
  335.             releaseKey(0);
  336.             releaseKey(1);
  337.             releaseKey(2);
  338.             releaseKey(3);
  339.             tapKey(4, 30);
  340.         }
  341.  
  342.         if (abs(d_x)<200 && abs(d_x)>50 && random <=40 && abs(d_y)<40)                    //gattling
  343.         {
  344.             if (facing==0)
  345.             {
  346.                 releaseKey(0);
  347.                 releaseKey(1);
  348.                 releaseKey(2);
  349.                 holdKey(3);
  350.             }
  351.             else
  352.             {
  353.                 releaseKey(0);
  354.                 releaseKey(1);
  355.                 releaseKey(3);
  356.                 holdKey(2);
  357.             }
  358.             tapKey(4, 10);
  359.         }
  360.  
  361.         if (abs(d_x)<55 && (random <50||abs(d_y)>60))                        //Volcano
  362.         {
  363.             releaseKey(1);
  364.             releaseKey(2);
  365.             releaseKey(3);
  366.             holdKey(0);
  367.             holdKey(4);
  368.         }
  369.  
  370.  
  371.  
  372.         if (abs(d_x)<50 && random >= 50 && abs(d_y)<40)                      //punch thing
  373.         {
  374.             releaseKey(0);
  375.             releaseKey(1);
  376.             releaseKey(2);
  377.             releaseKey(3);
  378.             holdKey(7);
  379.         }
  380.         /*else if (abs(d_x)<700 && abs(d_x)>200 && rp >= 200 && state!=2){
  381.             releaseKey(0);
  382.             releaseKey(2);
  383.             releaseKey(3);
  384.             holdKey(1);
  385.             if (facing==0) holdKey(3);
  386.             if (facing==1) holdKey(2);
  387.             tapKey(1, 1);
  388.         }*/
  389.     }
  390.  
  391.     if (facingtarget && abs(d_z)<14 && abs(d_x)<240 && state==2)
  392.     {
  393.         holdKey(0);
  394.         if (objcop->P_UP)
  395.             holdKey(4);
  396.     }
  397.     updateControls(objcop);
  398.  
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement