DizzyAge по-русски

Русскоязычный форум для любителей игр на движке DizzyAge
Текущее время: 24 апр 2024, 16:31

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 28 ноя 2012, 00:11 
Не в сети

Зарегистрирован: 16 окт 2012, 14:03
Сообщения: 12
Стандартный алгоритм передвижения предметов AIUpdateTrain работает уж очень топорно, создал свой скрипт передвижения, который позволяет передвигаться между точками по кратчайшему расстоянию под произвольным углом. Добавляем в ai.gs
Код:
func AIUpdateCart( idx )
{
   if(idx==-1) return;
   if(ObjGet(idx,O_DISABLE)) return;
   if(!IsUpdate(ObjGet(idx,O_DELAY))) return;
   if(ObjGet(idx,O_STATUS)!=1) return;
   id2 = ObjGet(idx,O_TARGET);
   if(id2==0) return;
   idx2 = ObjFind(id2);
   if(idx2==-1) return;
   speed = ObjGet(idx2,O_WAYPOINTSPEED); //скорость по Вектору(гипотенуза)
   flip = ObjGet(idx2,O_WAYPOINTFLIP);
   x2 = ObjGet(idx2,O_X); //координата X места назначения
   y2 = ObjGet(idx2,O_Y); // координата Y
   x = ObjGet(idx,O_X); //координата X места отправления
   y = ObjGet(idx,O_Y); // Y
   ObjSet(idx,O_FLIP,flip);
   dx = (float)x2 - (float)x ; // длина по X
   dy = (float)y2 - (float)y ; // длина по Y
   dx2 = dx*dx;
   dy2 = dy*dy;
   dsum=(float)dx2+(float)dy2;
   dz =gs_sqrt((float)dsum);
   cosinusa = dx/dz;
   sinusa = dy/dz;
   speedx = (float)cosinusa*(float)speed;
   speedx = gs_round(speedx);
   speedy = (float)sinusa*(float)speed;
   speedy = gs_round(speedy);
   flip = ObjGet(idx2,O_WAYPOINTFLIP);
   x2 = ObjGet(idx2,O_X); //координата X места назначения
   y2 = ObjGet(idx2,O_Y); // координата Y
   x = ObjGet(idx,O_X); //координата X места отправления
   y = ObjGet(idx,O_Y); // Y
   ObjSet(idx,O_FLIP,flip);   
   
   if(x<x2) { x+=((int)speedx); if(x>x2) x=x2; }
   if(x>x2) { x+=((int)speedx); if(x<x2) x=x2; }
   if(y<y2) { y+=((int)speedy); if(y>y2) y=y2; }
   if(y>y2) { y+=((int)speedy); if(y<y2) y=y2; }
   if(x==x2 && y==y2) // reached waypoint, change target
   {      
      target = ObjGet(idx2,O_TARGET);
      ObjSet(idx,O_TARGET,target);      
   }
   ObjSet(idx,O_X,x);
   ObjSet(idx,O_Y,y);
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2012, 00:14 
Не в сети

Зарегистрирован: 16 окт 2012, 14:03
Сообщения: 12
Сравнение стандартного алгоритма(зеленый) с моим (красный)
http://sderni.ru/156442


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB