Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
23.02.2014, 10:43     Составить прототип класса #1
Программный модуль передает мне указатель на класс 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 10:43     Составить прототип класса
Посмотрите здесь:

C++ Составить прототип функции
C++ прототип метода, возвращающего объект класса
C++ Шаблон (прототип) класса
C++ Составить описание класса на С++
прототип класса C++
Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++
Прототип класса C++
Составить прототип функции: Как правильно передать динамический массив по ссылке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru