Страница 24 из 28«1222232425262728»
Форум - Russian Tournament » Сайт » RT Карты » AS-RT-MirrorsEdge (sml[thread]WIP)
AS-RT-MirrorsEdge
UnShame
GP
Цитата UnShame ()
где ты видел блестящий бетон
trollface
UberSoldier
Ну эт отполированный бетон, хотя тоже можно ^_^

Infinite War v5.0.2 construction
UIP 2.0 - UIPP(UIP 2.1)
UnShame
GP, ты давным-давно помогал сделать мувер с приаттаченной тенью. Там была проблема с тем, что тень пропадала, если мувер уходил из вида. Это проблема решалась, если ставить тени bStasis=true. Но появлялась другая проблема: при смене разрешения, тень превращалась в огромное черное прямоугольное пятно и не фиксилась, пока bStasis не поставить обратно на false.
Я тут бился, пытаясь это исправить. Projector оказался нативной функцией, так что я там не смог найти никаких переменных, по которым можно было бы определить, багнулся он или нет. В конечном итоге поставил интервал на проверку ширины окна.
Код
//=============================================================================
// ShadingMover - mover with a shadow attached
//=============================================================================
class ShadingMover extends Mover
    placeable;

var(ShadowProjector) vector LightDirection;
var(ShadowProjector) int    LightDistance;
var(ShadowProjector) int    MaxTraceDistance;
var(ShadowProjector) int    CullDistance;
var(ShadowProjector) bool   bGradient;
var(ShadowProjector) float  UpdateFrequency;
var(ShadowProjector) byte   ShadowDarkness;
var LocalShadowProjector Proj;
var GUIController GUI;
var bool ProjStasis;
var bool TimerState;
var int prevScreenWidth;

replication
{
    reliable if(true)
     ProjStasis;
}

simulated event KeyFrameReached(){  
  
  local GUIController GUIController;
//I've no idea what I'm doing
  if (Level.NetMode != 1){
    foreach AllObjects(class'GUIController',GUIController){
      GUI=GUIController;
    }  
  }
  else{
    GUI=None;
  }

  if(GUI!=None){
    prevScreenWidth=GUI.ResX;
    TimerState=true;
    SetTimer(1,true);
  };

  ProjStasis = true;    
  Proj.bStasis = ProjStasis;
  super.KeyFrameReached();
}   

function simulated Timer(){
  if (Level.NetMode != 1 && GUI!=None){
    if(TimerState){
      if(prevScreenWidth!=GUI.ResX){
        ProjStasis = false;    
        Proj.bStasis = ProjStasis;
        TimerState=false;
      }
    }
    else{
      ProjStasis = true;    
      Proj.bStasis = ProjStasis;
      TimerState=true;
    }
    prevScreenWidth=GUI.ResX;
   //Log("ResX:"$prevScreenWidth);
  }
}

simulated event PostNetReceive()
{  
  Proj.bStasis = ProjStasis;
  super.PostNetReceive();  
}

simulated event PostBeginPlay()
{

    Proj = Spawn(class'LocalShadowProjector', self);
    if (Proj != none)
    {
      Proj.ShadowActor = self;
      Proj.LightDirection = LightDirection;
      Proj.LightDistance = LightDistance;
      Proj.MaxTraceDistance = MaxTraceDistance;
      Proj.CullDistance = CullDistance;
      Proj.bGradient = bGradient;
      Proj.UpdateFrequency = UpdateFrequency;
      Proj.ShadowDarkness = ShadowDarkness;
      Proj.InitProjector();
    }    
    super.PostBeginPlay();
}

Это работает и оффлайн и онлайн, но у меня большие сомнения в том, что это лучший способ это сделать.
Вопросы такие:
Есть ли какой-то ивент, который вызывается во время смены разрешения\состояния(полный\окно) экрана?
Если нет, можно ли в дополнение к ширине\высоте экрана узнать состояние?
Можно ли получить эти данные не итерируя через все объекты?
Можно ли делать проверку не через Timer а в тике (в плане затраты ресурсов)?
Правильно ли я вообще SetTimer и Timer использую?

http://rusut.ru/_fr/14/links.txt
https://www.mediafire.com/folder/1ww9zpl63q2pc/RT
http://rusut.ru/files/dump/filesDump.html
GP
Роботает - ну и славно. Как понял перебор всех акторов происходит один раз, а таймер раз на секунду грузит такой мелочью не будет... да ты бы и заметил. Такого ивента чтоб запускалса при смене разрешения в класе актора... нет. Может где-то в том-же gui или еще где, но не во всех акторах это точно.
UnShame
Проблема в том, что если просто нажать альт-таб и потом вернуться обратно, разрешение не меняется и тени остаются багнутыми. Я уже весь исходный код обыскал на наличие чего-то связанного с потерей фокуса на окне, но это похоже только в нативном коде есть.

Добавлено (29 Марта 16, 00:17)
---------------------------------------------
oops


http://rusut.ru/_fr/14/links.txt
https://www.mediafire.com/folder/1ww9zpl63q2pc/RT
http://rusut.ru/files/dump/filesDump.html
GP
А вчем там суть была? не помню уже что сделали... Пропадает когда его не видно? А отключали его в stasis навсегда, или только когда не видно? Всплыла еще одна идея, но знаю сроботает ли: можно сам проэктор (не текстуру) редерить в хад куда-то... так как самого актора не видно то и мусора не будет, но обновлятса может.
Скинь тестовою карту что я кидал (если кидал), ато у меня такие вещи затерты давно.
UnShame
Карта: https://dl.dropboxusercontent.com/u/56263088/Save/AS-ME-Part2-16.rar
Необходимые пакаджы: https://dl.dropboxusercontent.com/u/56263088/Save/MirrorsEdgeTest.zip
Цитата
Пропадает когда его не видно?
Когда актор, к которому прожектор прикреплен не виден, прожектор пропадает через несколько секунд
Цитата GP ()
А отключали его в stasis навсегда, или только когда не видно?
Оу, можно как-то сделать проверку на то, что он в поле зрения?

http://rusut.ru/_fr/14/links.txt
https://www.mediafire.com/folder/1ww9zpl63q2pc/RT
http://rusut.ru/files/dump/filesDump.html
GP
Цитата UnShame ()
можно как-то сделать проверку на то, что он в поле зрения
В принцыпе да:
Код
/* PlayerCanSeeMe returns true if any player (server) or the local player (standalone
or client) has a line of sight to actor's location.
*/
native(532) final function bool PlayerCanSeeMe();
Непомню почему, но для lens flare я переделывал по своему такую функцыю. Вроде-бы там не учитываетса направление куда ирок смотрит. У себя просто кроме прямого трейса проверял еще находитса ли актор впереди игрока: угол между вектором от игрок->актор и вектором нправления игрока должен быть меньше 90гр, тоесть вместе 180 гр, полусфера впереди игрока.
UnShame
GP
Цитата UnShame ()
О, то что нужно.

Я чет торможу неможко, это сарказм был или нет? Ведьт если действительно роботает то я убираю из планов танцы бубном, не охота ведь.
UnShame
GP
ОК. Но стоп, а как ты это сюда приделал? Включаеш stasis только если не видно, или как? Если так, то как тогда те муверы которые оставались в стазисе при альт-табе?

Добавлено (30 Марта 16, 00:44)
---------------------------------------------
Олсо идея с насильным рендером не пройшла, если актор не виден долгое время и пропадает, то он и рендеритса в "канавас" перестает. Есть еще дибильноватая идея на один тик ставить каждый мувер игроку перед рожей перед игроком, чтоб они отрендерелись.

UnShame
Цитата GP ()
ОК. Но стоп, а как ты это сюда приделал? Включаеш stasis только если не видно, или как? Если так, то как тогда те муверы которые оставались в стазисе при альт-табе?
Ставлю bStasis на true, если не видно, иначе на false
Хз как так получается, но оно само фиксится после альт-таба. Возможно сам вызов функции заставляет прожектор рефрешиться.

Добавлено (01 Апреля 16, 16:36)
---------------------------------------------
weeeeeeeeeeeeeeeeeeeeeeeeeeee

Добавлено (01 Апреля 16, 16:52)
---------------------------------------------

Добавлено (01 Апреля 16, 16:52)
---------------------------------------------
oh god

Добавлено (01 Апреля 16, 17:01)
---------------------------------------------

Добавлено (01 Апреля 16, 18:22)
---------------------------------------------
все, я ее доделал

Добавлено (01 Апреля 16, 19:02)
---------------------------------------------
http://rusut.ru/news....-01-539


http://rusut.ru/_fr/14/links.txt
https://www.mediafire.com/folder/1ww9zpl63q2pc/RT
http://rusut.ru/files/dump/filesDump.html
UberSoldier
Waaaaaaaaat? shok
Что ты сделал с картой? Подозреваю что ты запорол ее и сохранил ha

Infinite War v5.0.2 construction
UIP 2.0 - UIPP(UIP 2.1)
UnShame
UberSoldier

Цитата
задумано
yoba

Infinite War v5.0.2 construction
UIP 2.0 - UIPP(UIP 2.1)
UnShame
Нашел еще один способ поднять фпс: для всех поверхностей, которые не будут видны игрокам (задние стены зданий например), ставим unlit=true. Это не только уменьшает размер файла карты (лишние текстуры освещения не создаются), но и поднимает фпс на 10-20 в зависимости от размера карты.

http://rusut.ru/_fr/14/links.txt
https://www.mediafire.com/folder/1ww9zpl63q2pc/RT
http://rusut.ru/files/dump/filesDump.html
XCanG
Цитата UnShame ()
все, я ее доделал
Цитата UnShame ()
Нашел еще один способ поднять фпс
Так можно смотреть или нет? Когда финалка?

Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же.
http-сервер
.do impossible   beat unbeatable
UnShame
Форум - Russian Tournament » Сайт » RT Карты » AS-RT-MirrorsEdge (sml[thread]WIP)
Страница 24 из 28«1222232425262728»
Поиск: