Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
#1

Составить прототип класса - C++

23.02.2014, 10:43. Просмотров 228. Ответов 0
Метки нет (Все метки)

Программный модуль передает мне указатель на класс CPhysHinge. Чтобы получить доступ к его методам мне нужен его прототип.
Имеется следующий код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
class CPhysHinge : public CPhysConstraint, public IVPhysicsWatcher
{
    DECLARE_CLASS( CPhysHinge, CPhysConstraint );
 
public:
    void Spawn( void );
    IPhysicsConstraint *CreateConstraint( IPhysicsConstraintGroup *pGroup, const hl_constraint_info_t &info )
    {
        if ( m_hinge.worldAxisDirection == vec3_origin )
        {
            DevMsg("ERROR: Hinge with bad data!!!\n" );
            return NULL;
        }
        GetBreakParams( m_hinge.constraint, info );
        m_hinge.constraint.strength = 1.0;
        // BUGBUG: These numbers are very hard to edit
        // Scale by 1000 to make things easier
        // CONSIDER: Unify the units of torque around something other 
        // than HL units (kg * in^2 / s ^2)
        m_hinge.hingeAxis.SetAxisFriction( 0, 0, m_hingeFriction * 1000 );
 
        int hingeAxis;
        if ( IsWorldHinge( info, &hingeAxis ) )
        {
            info.pObjects[1]->BecomeHinged( hingeAxis );
        }
        else
        {
            RemoveSpawnFlags( SF_CONSTRAINT_ASSUME_WORLD_GEOMETRY );
        }
 
        return physenv->CreateHingeConstraint( info.pObjects[0], info.pObjects[1], pGroup, m_hinge );
    }
 
    void DrawDebugGeometryOverlays()
    {
        if ( m_debugOverlays & (OVERLAY_BBOX_BIT|OVERLAY_PIVOT_BIT|OVERLAY_ABSBOX_BIT) )
        {
            NDebugOverlay::Line(m_hinge.worldPosition, m_hinge.worldPosition + 48 * m_hinge.worldAxisDirection, 0, 255, 0, false, 0 );
        }
        BaseClass::DrawDebugGeometryOverlays();
    }
 
    void InputSetVelocity( inputdata_t &inputdata )
    {
        if ( !m_pConstraint || !m_pConstraint->GetReferenceObject() || !m_pConstraint->GetAttachedObject() )
            return;
    
        float speed = inputdata.value.Float();
        float massLoad = 1;
        int numMasses = 0;
        if ( m_pConstraint->GetReferenceObject()->IsMoveable() )
        {
            massLoad = m_pConstraint->GetReferenceObject()->GetInertia().Length();
            numMasses++;
            m_pConstraint->GetReferenceObject()->Wake();
        }
        if ( m_pConstraint->GetAttachedObject()->IsMoveable() )
        {
            massLoad += m_pConstraint->GetAttachedObject()->GetInertia().Length();
            numMasses++;
            m_pConstraint->GetAttachedObject()->Wake();
        }
        if ( numMasses > 0 )
        {
            massLoad /= (float)numMasses;
        }
        
        float loadscale = m_systemLoadScale != 0 ? m_systemLoadScale : 1;
        m_pConstraint->SetAngularMotor( speed, speed * loadscale * massLoad * loadscale * (1.0/TICK_INTERVAL) );
    }
 
    void InputSetHingeFriction( inputdata_t &inputdata )
    {
        m_hingeFriction = inputdata.value.Float();
        Msg("Setting hinge friction to %f\n", m_hingeFriction );
        m_hinge.hingeAxis.SetAxisFriction( 0, 0, m_hingeFriction * 1000 );
    }
 
    virtual void Deactivate()
    {
        if ( HasSpawnFlags( SF_CONSTRAINT_ASSUME_WORLD_GEOMETRY ) )
        {
            if ( m_pConstraint && m_pConstraint->GetAttachedObject() )
            {
                // NOTE: RemoveHinged() is always safe
                m_pConstraint->GetAttachedObject()->RemoveHinged();
            }
        }
 
        BaseClass::Deactivate();
    }
    
    void NotifyVPhysicsStateChanged( IPhysicsObject *pPhysics, CBaseEntity *pEntity, bool bAwake )
    {
#if HINGE_NOTIFY
        Assert(m_pConstraint);
        if (!m_pConstraint) 
            return;
 
        // if something woke up, start thinking. If everything is asleep, stop thinking.
        if ( bAwake )
        {
            // Did something wake up when I was not thinking?
            if ( GetNextThink() == TICK_NEVER_THINK )
            {
                m_soundInfo.StartThinking(this, 
                    VelocitySampler::GetRelativeAngularVelocity(m_pConstraint->GetAttachedObject(), m_pConstraint->GetReferenceObject()) ,
                    m_hinge.worldAxisDirection
                    );
 
                SetThink(&CPhysHinge::SoundThink);
                SetNextThink(gpGlobals->curtime + m_soundInfo.getThinkRate());
            }
        }
        else
        {
            // Is everything asleep? If so, stop thinking.
            if ( GetNextThink() != TICK_NEVER_THINK             &&
                m_pConstraint->GetAttachedObject()->IsAsleep() &&
                m_pConstraint->GetReferenceObject()->IsAsleep() )
            {
                m_soundInfo.StopThinking(this);
                SetNextThink(TICK_NEVER_THINK);
            }
        }
#endif
    }
 
 
#if HINGE_NOTIFY
    virtual void OnConstraintSetup( hl_constraint_info_t &info )
    {
        CBaseEntity *pEntity0 = info.pObjects[0] ? static_cast<CBaseEntity *>(info.pObjects[0]->GetGameData()) : NULL;
        if ( pEntity0 && !info.pObjects[0]->IsStatic()  )
        {
            WatchVPhysicsStateChanges( this, pEntity0 );
        }
        CBaseEntity *pEntity1 = info.pObjects[1] ? static_cast<CBaseEntity *>(info.pObjects[1]->GetGameData()) : NULL;
        if ( pEntity1 && !info.pObjects[1]->IsStatic()  )
        {
            WatchVPhysicsStateChanges( this, pEntity1 );
        }
        BaseClass::OnConstraintSetup(info);
    }
 
    void SoundThink( void );
    // void Spawn( void );
    void Activate( void );
    void Precache( void );
#endif
 
    DECLARE_DATADESC();
 
 
#if HINGE_NOTIFY
protected:
    ConstraintSoundInfo m_soundInfo;
#endif
 
private:
    constraint_hingeparams_t m_hinge;
    float m_hingeFriction;
    float   m_systemLoadScale;
    bool IsWorldHinge( const hl_constraint_info_t &info, int *pAxisOut );
};
Вопрос такой - можно ли составить нормальный прототип если не определены RemoveSpawnFlags, physenv, m_debugOverlays, NDebugOverlay, HasSpawnFlags. Т.е. некоторые переменные используемые в методах этого класса не определены. И если это можно сделать, то какую часть кода следует удалить.
Переменная HINGE_NOTIFY = false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 10:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить прототип класса (C++):

прототип класса - C++
Нужен ли прототип класса в MinGW? При компиляции, что с ним , что без, ошибок нет.

Прототип класса - C++
В С++ можно составлять прототипы функций, но можно ли составлять прототипы классов? если да, то как это синтаксически делается? ...

Шаблон (прототип) класса - C++
Есть простенькая тестовая программа. #include &lt;iostream&gt; using namespace std; class test { public: int *A, *B; ...

Прототип метода, возвращающего объект класса - C++
Вобщем проблема смешная впринципе. То ли меня уже коротит с этой темой но никак не могу понять что сделать. Смотрел в интернетах :) не...

Составить прототип функции - C++
&quot;Запишите прототип функции, которая вычисляет факториал целой части e^pi&quot; подскажите плз

Составить таблицу: прототип, вызов, определение функции - C++
Помогите:cry: Надо составить табличку: прототип, вызов функции,определение для :1)указателей2)ссылки3)аргумента Вообще не понимаю что и...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2014, 10:43
Привет! Вот еще темы с ответами:

Составить прототип функции: Как правильно передать динамический массив по ссылке - C++
В dll библиотеке на экспорт имеется прототип следующей функции: extern &quot;C&quot; __declspec(dllexport) void process(double, double(&amp;), const...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

Составить диаграмму класса - C++
Всем доброго времени суток! Написал программу на С++, препод требует составить диаграмму класса. Я знать не знаю, что это такое. Может быть...

Составить описание класса многочленов - C++
Нужна помощь! Вот задание: Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru