понедельник, 21 марта 2011 г.

WIP News

А вот и я с небольшим набором апдейтов )

В последнее время разработка идёт не очень быстро... тут много факторов, но основной, наверно, отсутствие нормальной работы (в моём городке сложно найти адекватную, а за 10 тысяч в месяц админом работать.. не очень хочется : ) Правда зовут в Питер.. но чота, блин, страхово. Страхово не от переезда, а скорее всего от того, что "не пройду собеседование". Вот откуда эта неуверенность? Пздц.

Итак, хватит лирики, переходим к делу:

1. Добавлен класс ActionMap в игровой движок! Теперь все действия игрока мапятся именно в нём. Происходит это примерно так:

actionMap.BindAction(ACTION_FORWARD, KEY_Q);
actionMap.BindAction(ACTION_BACKWARD, KEY_E);
actionMap.BindAction(ACTION_JUMP, KEY_SPACE);
actionMap.BindAction(ACTION_ACCELERATION, KEY_LSHIFT);
actionMap.BindAction(ACTION_FIRE, KEY_MOUSE_LEFT);
actionMap.BindAction(ACTION_USE, KEY_F);
actionMap.BindAction(ACTION_TURNLR, KEY_AXIS_X);
actionMap.BindAction(ACTION_TURNUD, KEY_AXIS_Y);

Неудобно!? Бред! Очень удобно! Удобно как программно прописывать биндинги, так и загружать их и менять в рантайме!

2. Но одними биндингами сыт не будешь : ) Для управления персонажем используется новый класс ActionBuffer (название само за себя говорит). движок чекает инпут и по инпуту, подглядывая в ActionMap добавляет новые действия в ActionBuffer который позже отправляется игроку на выполнение. Всё очень просто : )


вот код ActionBuffer (есть у кого предложения оптимизации КОДА?)

#ifndef ActionBuffer_h__
#define ActionBuffer_h__

#include "Action.h"
#define NUM_SLICES 4

class ActionBuffer
{

private:
int buffer[NUM_SLICES];
public:
void AddAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
buffer[slice] |= (1 << action);
}
void RemoveAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
buffer[slice] &= ~action;
}
void Reset()
{
memset(buffer, 0, sizeof(GameAction) * NUM_SLICES);
}
bool CheckAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
return (buffer[slice] & (1 << action)) !=0;
}
};
#endif // ActionBuffer_h__


какбы конец кода.

Ну, ещё я пофиксил многие баги физики, научил капсулу игрока не падать, правильно коллайдиться. Также сделал управление камерой персонажа (можно переключать first person/third person виды). Собсно теперь могу спокойно персом бегать по уровню : ) Осталось решить одну маленькую назойливую проблему - прохождение камеры сквозь стены : ( Оно заметно когда включен режим обзора "от третьего лица".

Как решать? - думаю надо сделать для камеры физический объект - сферу! Путь коллайдится с миром, а я буду в соответствии со сферой поправлять позицию камеры.


Пока вот так.

9 комментариев:

  1. Вот это

    action--;
    int slice = action >> 5;

    заменить на это

    int slice = --action >> 5;

    ОтветитьУдалить
  2. мм, а чем это быстрее? Мне интересно всё ускорить а по красоте... впринципе я бы мог просто создать массив байт размером, скажем, 256 и каждый байт был бы флагом ) но у меня экономичней : D

    ОтветитьУдалить
  3. anyway, спасибо ) сейчас уменьшу количество строк ^^

    ОтветитьУдалить
  4. хм, только что заметил - с управлением камерой какой-то баг! Немного подёргивается о_О толи OIS выдаёт "дёрганные" значения, толи я что-то поздно обновляю, хмм

    ОтветитьУдалить
  5. Ура! К счастью оказалось, что это не косяк OIS, а мой косяк : ) В камере были такие баги, чт о совершенно не понятно КАК это всё раньше отлично работало? О____О Но теперь всё в норме, камера движется плавно ^^

    ОтветитьУдалить
  6. давай к нам, в Gameloft.
    а собеседования нужно иногда проходить, даже если ты не ищешь работу, чтоб знать сколько ты стоишь...

    ОтветитьУдалить
  7. внутри ActionMap надеюсь массив на ACTION_TOTAL значений?

    ОтветитьУдалить
  8. внутри ActionMap надеюсь массив на ACTION_TOTAL значений?
    - да.

    а собеседования нужно иногда проходить,
    - вчера проходил. Я их устроил а они меня нет. : ))

    давай к нам, в Gameloft.
    - не зовут же ) резюме пока не слал ) Чуток по-позже.

    ОтветитьУдалить
  9. в Gameloft сейчас берут всех кто хоть раз слышал о программировании, сейчас нужны и шарп программисты, может для карьерного роста харьковский офис и не очень подходит, но это хороший старт чтоб двигаться дальше.

    ОтветитьУдалить