Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Помогите вшить ивент
Сообщение #1058539
Есть код с тутора :

Цитата:
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ========
//
// Purpose: Simple model entity that randomly moves and changes direction
// when activated.
//
//=============================================================================

#include "cbase.h"

class CMyModelEntity : public CBaseAnimating
{
public:
DECLARE_CLASS( CMyModelEntity, CBaseAnimating );
DECLARE_DATADESC();

CMyModelEntity()
{
m_bActive = false;
}

void Spawn( void );
void Precache( void );

void MoveThink( void );

// Input function
void InputToggle( inputdata_t &inputData );

private:

bool m_bActive;
float m_flNextChangeTime;
};

LINK_ENTITY_TO_CLASS( my_model_entity, CMyModelEntity );

// Start of our data description for the class
BEGIN_DATADESC( CMyModelEntity )

// Save/restore our active state
DEFINE_FIELD( m_bActive, FIELD_BOOLEAN ),
DEFINE_FIELD( m_flNextChangeTime, FIELD_TIME ),

// Links our input name from Hammer to our input member function
DEFINE_INPUTFUNC( FIELD_VOID, "Toggle", InputToggle ),

// Declare our think function
DEFINE_THINKFUNC( MoveThink ),

END_DATADESC()

// Name of our entity's model
#define ENTITY_MODEL "models/gibs/airboat_broken_engine.mdl"

//-----------------------------------------------------------------------------
// Purpose: Precache assets used by the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::Precache( void )
{
PrecacheModel( ENTITY_MODEL );

BaseClass::Precache();
}

//-----------------------------------------------------------------------------
// Purpose: Sets up the entity's initial state
//-----------------------------------------------------------------------------
void CMyModelEntity::Spawn( void )
{
Precache();

SetModel( ENTITY_MODEL );
SetSolid( SOLID_BBOX );
UTIL_SetSize( this, -Vector(20,20,20), Vector(20,20,20) );
}

//-----------------------------------------------------------------------------
// Purpose: Think function to randomly move the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::MoveThink( void )
{
// See if we should change direction again
if ( m_flNextChangeTime < gpGlobals->curtime )
{
// Randomly take a new direction and speed
Vector vecNewVelocity = RandomVector( -64.0f, 64.0f );
SetAbsVelocity( vecNewVelocity );

// Randomly change it again within one to three seconds
m_flNextChangeTime = gpGlobals->curtime + random->RandomFloat( 1.0f, 3.0f );
}

// Snap our facing to where we're heading
Vector velFacing = GetAbsVelocity();
QAngle angFacing;
VectorAngles( velFacing, angFacing );
SetAbsAngles( angFacing );

// Think every 20Hz
SetNextThink( gpGlobals->curtime + 0.05f );
}

//-----------------------------------------------------------------------------
// Purpose: Toggle the movement of the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::InputToggle( inputdata_t &inputData )
{
// Toggle our active state
if ( !m_bActive )
{
// Start thinking
SetThink( &CMyModelEntity::MoveThink );

SetNextThink( gpGlobals->curtime + 0.05f );

// Start moving
SetMoveType( MOVETYPE_FLY );

// Force MoveThink() to choose a new speed and direction immediately
m_flNextChangeTime = gpGlobals->curtime;

// Update m_bActive to reflect our new state
m_bActive = true;
}
else
{
// Stop thinking
SetThink( NULL );

// Stop moving
SetAbsVelocity( vec3_origin );
SetMoveType( MOVETYPE_NONE );

m_bActive = false;
}
}



Мне нужно чтобы по инпуту Toggle не только энтитя начала "думать" и двигатся, а еще и проигрывать единственную анимацию свой модели (к примеру FLY ).

Посмотрел на код других модельных энтитей.. так что как я понял мне нужно вшить в:
Цитата:

void CMyModelEntity::InputToggle( inputdata_t &inputData )
{
// Toggle our active state
if ( !m_bActive )
{
// Start thinking
SetThink( &CMyModelEntity::MoveThink );

SetNextThink( gpGlobals->curtime + 0.05f );

// Start moving
SetMoveType( MOVETYPE_FLY );

// Force MoveThink() to choose a new speed and direction immediately
m_flNextChangeTime = gpGlobals->curtime;

// Update m_bActive to reflect our new state
m_bActive = true;
}

вот это (взято с props.cpp):

Цитата:
void CDynamicProp::InputSetAnimation( inputdata_t &inputdata )
{
PropSetAnim( inputdata.value.String() );
}


Но тут идет инпут со стрингом, т. е. инпут с именем анимации.. А у меня уже заранее она известна- FLY.

Помогите плс настроить код.. Чтобы при активации энтити (инпуту Toggle) она начала летать , думать и играть анимацию..

PS. Как я понимаю в QC файле модели нужно еще добавить параметр loop чтобы анимация постоянно играла..

Цитата:
$sequence fly "laser_linker_ani" fps 30.00 loop
Old Post 12-01-2012 19:25
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Sanek_plkv
(Желаю вам зла.)

Зарегистрирован: Nov 2006
Проживает: Россия/
Написал: 2151 сообщений

Оценка: 96 Votes 96 чел.

Сообщение #1058547
Цитата:
Оригинальное сообщение от Stridemann
Но тут идет инпут со стрингом, т. е. инпут с именем анимации.. А у меня уже заранее она известна- FLY.


SetSequence( LookupSequence("fly") )?
Old Post 12-01-2012 20:30
Sanek_plkv отсутствует Посмотреть данные 'Sanek_plkv' Отправить Приватное Сообщение для 'Sanek_plkv' Найти другие сообщения 'Sanek_plkv' Добавить Sanek_plkv в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1058548
Неужели:

Цитата:
void CMyModelEntity::InputToggle( inputdata_t &inputData )
{
// Toggle our active state
if ( !m_bActive )
{
SetSequence( LookupSequence("fly") );

SetThink( &CMyModelEntity::MoveThink );

SetNextThink( gpGlobals->curtime + 0.05f );

SetMoveType( MOVETYPE_FLY );

m_flNextChangeTime = gpGlobals->curtime;

m_bActive = true;
}

???

PS. Спс большое, ща попробую..

Stridemann добавил 12-01-2012 в 21:42:17:
Нет, не работает.. Код скомпилился, энтитя в игре есть и работает, но анимации нету.. (в model viewer'е анимация работает..)

Поправил Stridemann 12-01-2012 в 22:02

Old Post 12-01-2012 20:34
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1058651
Пытался заставить работать добавлением в think функцию данного кода:

Цитата:
Activity idealActivity = ACT_FLY;
int animDesired = SelectWeightedSequence( idealActivity );
if ( animDesired == -1 )
animDesired = 0;

// Already using the desired animation?
if ( GetSequence() != animDesired )
{
ResetSequence( animDesired );
SetCycle( 0 );

}


..не прокатило..
Возможно как-то нужно в void CMyModelEntity::InputToggle вписать что-то чтоб запустить...

PS. В qc модели екшин ACT_FLY добавил.
Old Post 13-01-2012 21:33
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Sanek_plkv
(Желаю вам зла.)

Зарегистрирован: Nov 2006
Проживает: Россия/
Написал: 2151 сообщений

Оценка: 96 Votes 96 чел.

Сообщение #1058653
Попробуй в think'е вызывать StudioFrameAdvance();
Old Post 13-01-2012 21:43
Sanek_plkv отсутствует Посмотреть данные 'Sanek_plkv' Отправить Приватное Сообщение для 'Sanek_plkv' Найти другие сообщения 'Sanek_plkv' Добавить Sanek_plkv в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1058657
Цитата:
Оригинальное сообщение от Sanek_plkv
Попробуй в think'е вызывать StudioFrameAdvance();

Спасибо. Вроде заработало.. Но проигрывается только 1 раз, когда запустить инпутом энтитю..

Что сделал. Добавил в Spawn() код:

Цитата:
int iSequence;
iSequence = LookupSequence("fly");
ResetSequence( iSequence );
m_flAnimTime = gpGlobals->curtime;
SetCycle( 0 );


и в Think() добавил:

Цитата:
StudioFrameAdvance();
DispatchAnimEvents( this );


Полный код http://codepaste.ru/9011/



Ура!!! ^_^ Исправил повторение анимации добавлением в QC команды loop анимахи.. (вообще она там и была, но епт, кто ее удалил.. оО)
В общем спасибо Sanek_plkv, внес свой вклад в написание тутора. Впишу тебя..

Stridemann добавил 13-01-2012 в 23:56:01:
До меня только что дошло что зря я делал аттачменты модели моей.. Это же не проп, тут SetParentAttachment к ней не робит адекватно (телепортирует и цепляет объект не за кость аттачмента, а в\за центр энтити). За код браться не охота...

Хотя блин, тогда и анимацию зря делал..
Может как-то можно аттач этот исправить в коде..?

Поправил Stridemann 14-01-2012 в 00:03

Old Post 13-01-2012 22:08
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1058834
Аттачмент видимо исправляется кодом:

Цитата:
void CMyModelEntity::SetParent( CBaseEntity *pNewParent, int iAttachment )
{
BaseClass::SetParent(pNewParent, iAttachment);
BoneFollowerHierarchyChanged();
}

Или нэ?)

Stridemann добавил 15-01-2012 в 15:20:03:
PS. Эксперименты с попыткой починки аттачмента провалились...
Old Post 15-01-2012 14:51
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Stridemann
(Инженер-изобретатель)

Зарегистрирован: Jun 2009
Проживает: Украина/Киев/
Написал: 2304 сообщений

Оценка: 95 Votes 95 чел.

Developer 
Сообщение #1060144
Если что это было делано для этого тутора.. Но я не осилил код и остались баги с аттачментом..
Old Post 29-01-2012 22:59
Stridemann отсутствует Посмотреть данные 'Stridemann' Отправить Приватное Сообщение для 'Stridemann' Найти другие сообщения 'Stridemann' Добавить Stridemann в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Все время в GMT . Сейчас 23:59.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


Быстрый переход:
 
Оцените эту Тему:
 

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены