Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //==========AI.cpp===========
- #include "AI.h"
- #include <math.h>
- #include <cmath>
- #include <iostream>
- #include "globals.h"
- #include <stdlib.h>
- void AI_Stuff::updateControls(objcopy * objcop)
- {
- if (_keys[0])
- {
- if (objcop->P_UP_C) objcop->P_UP_C=false;
- if (objcop->Tu)
- {
- objcop->P_UP_C=true;
- objcop->Tu=false;
- }
- objcop->P_UP= true;
- objcop->P_DOWN= false;
- objcop->DASHL=0;
- objcop->DASHR=0;
- }
- else
- {
- objcop->Tu=true;
- objcop->P_UP= false;
- objcop->P_UP_C=false;
- }
- if (_keys[1])
- {
- if (objcop->P_DOWN_C) objcop->P_DOWN_C=false;
- if (objcop->Td)
- {
- objcop->P_DOWN_C=true;
- objcop->Td=false;
- }
- objcop->P_DOWN= true;
- objcop->P_UP=false;
- objcop->DASHL=0;
- objcop->DASHR=0;
- }
- else
- {
- objcop->Td=true;
- objcop->P_DOWN= false;
- objcop->P_DOWN_C=false;
- }
- if (_keys[2])
- {
- if (objcop->P_LEFT_C) objcop->P_LEFT_C=false;
- if (objcop->Tl)
- {
- objcop->P_LEFT_C=true;
- objcop->Tl=false;
- }
- objcop->P_LEFT= true;
- objcop->P_RIGHT=false;
- objcop->P_RIGHT_C=false;
- objcop->DshClksIntrvlL=SDL_GetTicks();
- objcop->DshClksIntrvlR=0;
- objcop->DASHR=0;
- }
- else if (!_keys[2] && objcop->P_LEFT)
- {
- objcop->Tl=true;
- objcop->P_LEFT= false;
- objcop->P_LEFT_C=false;
- if (!objcop->P_LEFT)
- if (SDL_GetTicks()-objcop->DshClksIntrvlL<110)
- {
- objcop->DASHL=1;
- objcop->DASHR=0;
- }
- }
- if (_keys[3])
- {
- if (objcop->P_RIGHT_C) objcop->P_RIGHT_C=false;
- if (objcop->Tr)
- {
- objcop->P_RIGHT_C=true;
- objcop->Tr=false;
- }
- objcop->P_RIGHT=true;
- objcop->P_LEFT=false;
- objcop->P_LEFT_C=false;
- objcop->DshClksIntrvlR=SDL_GetTicks();
- objcop->DshClksIntrvlL=0;
- objcop->DASHL=0;
- }
- else if (!_keys[3] && objcop->P_RIGHT)
- {
- objcop->Tr=true;
- objcop->P_RIGHT=false;
- objcop->P_RIGHT_C=false;
- if(!objcop->P_RIGHT)
- if (SDL_GetTicks()-objcop->DshClksIntrvlR<110)
- {
- objcop->DASHR=1;
- objcop->DASHL=0;
- }
- }
- if (_keys[4])
- {
- if (objcop->P_ATTACK_C) objcop->P_ATTACK_C=false;
- if (objcop->TA)
- {
- objcop->P_ATTACK_C=true;
- objcop->TA=false;
- }
- objcop->P_ATTACK=true;
- }
- else
- {
- objcop->TA=true;
- objcop->P_ATTACK=false;
- objcop->P_ATTACK_C=false;
- }
- if (_keys[5])
- {
- if (objcop->P_DEFEND_C) objcop->P_DEFEND_C=false;
- if (objcop->TD)
- {
- objcop->P_DEFEND_C=true;
- objcop->TD=false;
- }
- objcop->P_DEFEND=true;
- }
- else
- {
- objcop->TD=true;
- objcop->P_DEFEND=false;
- objcop->P_DEFEND_C=false;
- }
- if (_keys[6])
- {
- if (objcop->P_JUMP_C) objcop->P_JUMP_C=false;
- if (objcop->TJ)
- {
- objcop->P_JUMP_C=true;
- objcop->TJ=false;
- }
- objcop->P_JUMP=true;
- }
- else
- {
- objcop->TJ=true;
- objcop->P_JUMP=false;
- objcop->P_JUMP_C=false;
- }
- if (_keys[7])
- {
- if (objcop->P_SPECIAL_C) objcop->P_SPECIAL_C=false;
- if (objcop->TS)
- {
- objcop->P_SPECIAL_C=true;
- objcop->TS=false;
- }
- objcop->P_SPECIAL=true;
- }
- else
- {
- objcop->TS=true;
- objcop->P_SPECIAL=false;
- objcop->P_SPECIAL_C=false;
- }
- _keys[0]=false;
- _keys[1]=false;
- _keys[2]=false;
- _keys[3]=false;
- _keys[4]=false;
- _keys[5]=false;
- _keys[6]=false;
- _keys[7]=false;
- }
- void AI_Stuff::holdKey(int keyindex)
- {
- _keys[keyindex]=true;
- }
- void AI_Stuff::tapKey(int keyindex, float rate)
- {
- //rate=FPS/rate;
- //rate=1;
- if (_rate_count<=rate)
- {
- _rate_count+=1;
- }
- else
- {
- if (keyindex==4)
- {
- int asdfasdfasdf=11;
- }
- _keys[keyindex]=true;
- _rate_count=0;
- }
- }
- void AI_Stuff::releaseKey(int keyindex)
- {
- _keys[keyindex]=false;
- }
- void AI_Stuff::setTarget(objcopy * objcop, LOAD * LOADED)
- {
- int temp=0, temp2=0; //nearest in distance , distance
- for (int x=0; x < LOADED->ON_SCREEN_OBJCOUNT; x++)
- {
- temp2=
- sqrt(
- pow(LOADED->ON_SCREEN_REAL_OBJS[x].posx,2)+
- pow(LOADED->ON_SCREEN_REAL_OBJS[x].posy,2)+
- pow(LOADED->ON_SCREEN_REAL_OBJS[x].posz,2)
- );
- if (LOADED->ON_SCREEN_REAL_OBJS[x].team!=objcop->team && temp2>temp)
- {
- temp=temp2;
- _current_target=x;
- }
- }
- }
- void AI_Stuff::playAI(objcopy * objcop, LOAD * LOADED)
- {
- int d_x=objcop->posx-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posx;
- int d_y=objcop->posy-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posy;
- int d_z=objcop->posz-LOADED->ON_SCREEN_REAL_OBJS[_current_target].posz;
- int posx=objcop->posx;
- int posy=objcop->posy;
- int posz=objcop->posz;
- int tposx=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posx;
- int tposy=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posy;
- int tposz=LOADED->ON_SCREEN_REAL_OBJS[_current_target].posz;
- int state= LOADED->OBJECTS[objcop->id].Eval(objcop, LOADED->OBJECTS[objcop->id].Frames[objcop->currframe].state);
- int tstate= LOADED->OBJECTS[objcop->id].Eval(&LOADED->ON_SCREEN_REAL_OBJS[_current_target],
- LOADED->OBJECTS[LOADED->ON_SCREEN_REAL_OBJS[_current_target].id].
- Frames[LOADED->ON_SCREEN_REAL_OBJS[_current_target].currframe].state);
- int sp=objcop->currsp;
- int rp=objcop->currrp;
- int random=(rand()*4321) % 100;
- int facing=objcop->facing;
- bool facingtarget= (d_x > 0 && objcop->facing == 1)||(d_x < 0 && objcop->facing == 0)? true:false;
- //Jump
- if ((abs(d_y)>30 && posy==0) || abs(d_z)>30)
- {
- holdKey(6);
- }
- //walk or run
- if ((d_x>80 && abs(d_x)<=300)||(state==2 && d_x>100))
- {
- holdKey(2);
- }
- if ((d_x<-80 && abs(d_x)<=300)||(state==2 && d_x<-100))
- {
- holdKey(3);
- }
- if (abs(d_x)>300 && abs(d_z)<20)
- {
- if (posx > tposx)
- {
- tapKey(2, 10);
- }
- if (posx < tposx)
- {
- tapKey(3,10);
- }
- }
- //face correct side
- if (!facingtarget)
- {
- if (d_x>0)
- {
- holdKey(2);
- }
- else
- {
- holdKey(3);
- }
- }
- //go sideways in the Z-Axis
- if (d_z>4)
- {
- holdKey(0);
- }
- if (d_z<-4)
- {
- holdKey(1);
- }
- if (facingtarget && abs(d_z)<9 && state==3)
- {
- if (abs(d_x)<110)
- {
- holdKey(4);
- }
- }
- if (facingtarget && abs(d_z)<9 && posy==0 && (state==0||state==1||state==4321))
- {
- if (sp > 50 && abs(d_x)<270 && abs(d_x)>80 && abs(d_y)<40 && random>50) //3 hit combo
- {
- releaseKey(0);
- releaseKey(1);
- releaseKey(2);
- releaseKey(3);
- tapKey(4, 30);
- }
- if (abs(d_x)<200 && abs(d_x)>50 && random <=40 && abs(d_y)<40) //gattling
- {
- if (facing==0)
- {
- releaseKey(0);
- releaseKey(1);
- releaseKey(2);
- holdKey(3);
- }
- else
- {
- releaseKey(0);
- releaseKey(1);
- releaseKey(3);
- holdKey(2);
- }
- tapKey(4, 10);
- }
- if (abs(d_x)<55 && (random <50||abs(d_y)>60)) //Volcano
- {
- releaseKey(1);
- releaseKey(2);
- releaseKey(3);
- holdKey(0);
- holdKey(4);
- }
- if (abs(d_x)<50 && random >= 50 && abs(d_y)<40) //punch thing
- {
- releaseKey(0);
- releaseKey(1);
- releaseKey(2);
- releaseKey(3);
- holdKey(7);
- }
- /*else if (abs(d_x)<700 && abs(d_x)>200 && rp >= 200 && state!=2){
- releaseKey(0);
- releaseKey(2);
- releaseKey(3);
- holdKey(1);
- if (facing==0) holdKey(3);
- if (facing==1) holdKey(2);
- tapKey(1, 1);
- }*/
- }
- if (facingtarget && abs(d_z)<14 && abs(d_x)<240 && state==2)
- {
- holdKey(0);
- if (objcop->P_UP)
- holdKey(4);
- }
- updateControls(objcop);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement