source: trunk/games/demo-jnat/player.h @ 1743

Last change on this file since 1743 was 1743, checked in by Jnat, 7 years ago
File size: 2.6 KB
Line 
1//
2// demo-jnat
3//
4
5
6#if !defined __PLAYER_H__
7#define __PLAYER_H__
8
9class Player : public WorldEntity
10{
11public:
12    Player()
13      : m_stick(0),
14        m_ready(false)
15    {
16                m_bodymesh.Compile("[sc#3a0 afcb5 10 5 0.4 ty5]""[sc#a30 afcb8 7 10 0.4]");
17                //m_bo.m_position = m_position + vec3(100.0f,100.0f,100.0f);
18                m_bo = new Bo();
19                Ticker::Ref(m_bo);
20    }
21
22    ~Player()
23    {
24        if (m_stick)
25            Input::UntrackStick(m_stick);
26                               
27                Ticker::Unref(m_bo);
28    }
29
30    char const *GetName() { return "<player>"; }
31
32protected:
33    virtual void TickGame(float seconds)
34    {
35        WorldEntity::TickGame(seconds);
36
37        float updown = (float)(Input::GetButtonState(273 /*SDLK_UP*/) - Input::GetButtonState(274 /*SDLK_DOWN*/));
38        float rightleft = (float)(Input::GetButtonState(275 /*SDLK_RIGHT*/) - Input::GetButtonState(276 /*SDLK_LEFT*/));
39                float lookX = 0.0f;
40                float lookY = 0.0f;
41               
42                //float StickAngle = (float)m_stick->GetAxis(2);
43
44                if (!m_stick)
45            m_stick = Input::TrackStick(0);
46        if (!m_stick)
47            m_stick = Input::TrackStick(0);
48        if (m_stick && m_stick->GetAxisCount() >= 4)
49        {
50            rightleft += 1.f * m_stick->GetAxis(0);
51            updown += -1.f * m_stick->GetAxis(1);
52                        lookX += 1.f * m_stick->GetAxis(2);
53                        lookY += -1.f * m_stick->GetAxis(3);
54        }
55
56                //Rotate
57                /*
58        float test = lol::sin(0.5f) * 200.f + 60.f;
59        m_rotation *= quat::rotate(seconds * test, vec3(0, 1, 0));
60
61        m_velocity = 120.f * m_rotation.transform(vec3(0, 0, 1));
62        vec3 deltapos = seconds * m_velocity;
63                */
64
65                //Player control
66                //vec3 deltapos;
67                if (rightleft * rightleft + updown * updown > 0.2f){
68                        m_velocity = vec3(rightleft,0,0);//120.f * m_rotation.transform(vec3(0, 0, 1));
69                        vec3 deltapos = 200.f * seconds * m_velocity;
70
71                        m_position += deltapos;
72                }
73                m_bo->m_position = (m_position + vec3(0.0f,10.0f,10.0f) );
74
75                float angle = lol::atan2(lookY,lookX);
76                quat q;
77                if (lookX * lookX + lookY * lookY > 0.2f){
78                        q = quat::rotate(angle*( 180 / M_PI ),vec3(0.0f,0.0f,1.0f));
79                }else{
80                        q = quat::rotate(0,vec3(0.0f,0.0f,1.0f));
81                }
82                m_bo->m_rotation = q;
83                //m_bo->m_rotation.printf();
84                //m_position += deltapos;
85
86    }
87
88    virtual void TickDraw(float seconds)
89    {
90        WorldEntity::TickDraw(seconds);
91
92        if (!m_ready)
93        {
94            m_bodymesh.MeshConvert();
95            m_ready = true;
96        }
97
98        mat4 model = mat4::translate(m_position) * mat4(m_rotation);
99
100        m_bodymesh.Render(model);
101    }
102
103private:
104    EasyMesh m_bodymesh;
105    Stick *m_stick;
106        Bo *m_bo;
107       
108    bool m_ready;
109};
110
111#endif /* __PLAYER_H__ */
112
Note: See TracBrowser for help on using the repository browser.