All pastes #772658 Raw Edit

Anonymous

public cpp v1 · immutable
·published 2007-11-13 23:18 UTC
rendered paste body
		  float x[2];					float y[2];					float z[2];					float distance = 0.5f;   //Minimun Range from Obstacle					uint8 interlevingSide = 0;					float leftAngle, rightAngle;					leftAngle = rightAngle = 0.0f;					float slope = 0.0f;					bool canDoMove = true;					bool goodMoveFound = false;					bool interleavedMove = false; //Not really required was for my first idea.					do					{						distance += 0.05;						if(interleavedMove) interleavedMove = false; 						else interleavedMove = true;						x[interleavedMove] = currentX + distance+m_target->GetObjectSize() * cos(moveAngle);						y[interleavedMove] = currentY + distance+m_target->GetObjectSize() * sin(moveAngle);						z[interleavedMove] = MapManager::Instance().GetBaseMap(m_target->GetMapId())->GetHeight(x[interleavedMove],y[interleavedMove], currentZ);						//should be made without fabs so we can check swimg or fly.						float _vertical = fabs(sqrt(currentZ*currentZ) - sqrt(z[interleavedMove]*z[interleavedMove]));						slope =  sqrt(distance*distance + _vertical*_vertical);						slope = distance / slope * _vertical;												//Should have the minimun slope too... for lower bound						if(fabs(slope) > 0.25 && !goodMoveFound)						{							do							{								if ( !(interlevingSide & 1))		//Pair Number								{ 									leftAngle += 0.05;									if(moveAngle + leftAngle - rightAngle > (M_PI*2))										moveAngle = moveAngle + leftAngle - rightAngle - (M_PI*2);									else									   moveAngle += leftAngle - rightAngle; 									++interlevingSide;	   								}								else								//Impair Number								{									rightAngle -= 0.05;									if( moveAngle + rightAngle - leftAngle < 0)										moveAngle = moveAngle - leftAngle + rightAngle + (M_PI*2);									else										moveAngle += rightAngle - leftAngle; 									++interlevingSide;								}								x[interleavedMove] = currentX + distance+m_target->GetObjectSize() * cos(moveAngle);								y[interleavedMove] = currentY + distance+m_target->GetObjectSize() * sin(moveAngle);								z[interleavedMove] = MapManager::Instance().GetBaseMap(m_target->GetMapId())->GetHeight(x[interleavedMove],y[interleavedMove], currentZ);								float _vertical = fabs(sqrt(currentZ*currentZ) - sqrt(z[interleavedMove]*z[interleavedMove]));								slope =  sqrt(distance*distance + _vertical*_vertical);								slope = distance / slope * _vertical;								if(fabs(slope) < 0.45)								{									goodMoveFound = true;									break;								}								if(interlevingSide > 118)								{									canDoMove = false;									break;								}							}while( abs(slope) > 0.25 );						}						else if( distance > 0.5f && !goodMoveFound)							goodMoveFound = true;						else if(abs(slope) > 0.25 || goodMoveFound && distance > 5.0f) //GoodMV Found just before that one						{							if(interleavedMove) interleavedMove = false; 							else interleavedMove = true;							float _x,_y,_z;							_x = currentX + distance * cos(moveAngle);							_y = currentY + distance * sin(moveAngle);							_z = MapManager::Instance().GetBaseMap(m_target->GetMapId())->GetHeight(_x,_y, currentZ);							m_target->addUnitState(UNIT_STAT_SEARCHING);							m_target->SetOrientation(moveAngle);							float timeMoving = 1000*distance/moveSpeed;							m_target->SendMonsterMove(_x,_y,_z,0,true,timeMoving);							if(m_target->GetTypeId() != TYPEID_PLAYER)								MapManager::Instance().GetMap(m_target->GetMapId(), m_target)->CreatureRelocation((Creature*)m_target,_x,_y,_z,m_target->GetOrientation());							else								MapManager::Instance().GetMap(m_target->GetMapId(), m_target)->PlayerRelocation((Player*)m_target,_x,_y,_z,m_target->GetOrientation()); 							m_fearMovementTimer = timeMoving;							break;						}						else if(!canDoMove || distance > 5.01f)						{							m_target->clearUnitState(UNIT_STAT_SEARCHING);							m_fearMovementTimer = 1000;							break;						}						//zDiff = ((pos_z*pos_z)-(z*z));					}while( 1 ); //interlevingSide 63 gave me about 90 Degree each Side				}P.S. made without sleep since 36 hours ... so :) haha!