⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player.cpp

📁 一本关于OPenGL的很好的电子书
💻 CPP
字号:
#include "player.h"

// Load()
// desc: not used by CPlayer
void CPlayer::Load()
{}

// Unload()
// desc: not used by CPlayer
void CPlayer::Unload()
{}

// Draw()
// desc: draws the player at its current position
void CPlayer::Draw()
{
     glPushMatrix();
          glTranslatef(position.x, position.y, position.z);
          glScalef(radius, radius, radius);
          glColor3f(0.5, 0.0, 0.0);

          // draw side ring of player
          glBegin(GL_TRIANGLE_STRIP);
          for (int i = 0; i < 16; i++)
          {              
               glVertex3fv(&playerData[i+16][0]); // top    
               glVertex3fv(&playerData[i][0]);    // bottom
          }
          glVertex3fv(&playerData[16][0]);
          glVertex3fv(&playerData[0][0]);
          glEnd();

          glColor3f(0.5, 0.5, 0.5);
          // draw top and bottom of player
          glBegin(GL_TRIANGLE_FAN);
               glVertex3f(0.0, playerData[0][1], 0.0);
               for (i = 0; i < 16; i++)
                    glVertex3fv(&playerData[i][0]);
               glVertex3fv(&playerData[0][0]);
          glEnd();
          glBegin(GL_TRIANGLE_FAN);
               glVertex3f(0.0, playerData[31][1], 0.0);
               for (i = 16; i < 32; i++)
                    glVertex3fv(&playerData[i][0]);
               glVertex3fv(&playerData[16][0]);
          glEnd();
     glPopMatrix();
}

// Animate()
// desc: not used by CPlayer
void CPlayer::Animate(scalar_t deltaTime)
{}

// Move()
// desc: moves the player on the table based on the movements of the mouse
//       performs collision detection with puck
void CPlayer::Move(scalar_t deltaTime, int mouseX, int mouseY, CTable *table, CPuck *puck)
{
     int xDiff, yDiff;        // distance mouse has moved in mouse coordinate units

     // calculate distance mouse has moved
     xDiff = (mouseX - oldMouseX)*4.0;
     yDiff = (mouseY - oldMouseY)*4.0;

     // save mouse position
     oldMouseX = mouseX;
     oldMouseY = mouseY;

     // calculate velocity based on mouse movement
     velocity = CVector(xDiff, 0.0, yDiff) * 10.0;

     // calculate position
     position = position + (velocity * deltaTime);

     // collisions with table walls
     if (position.x - radius < table->tableCorners[0][0])
          position.x = table->tableCorners[0][0] + radius;
     if (position.x + radius > table->tableCorners[3][0])
          position.x = table->tableCorners[3][0] - radius;
     if (position.z - radius < table->tableCorners[1][2])
          position.z = table->tableCorners[1][2] + radius;
     if (position.z + radius > table->tableCorners[3][2])
          position.z = table->tableCorners[3][2] - radius;

     // collision with puck
     if ((puck->position - position).Length() <= (puck->size + radius))
     {
          // stationary collision (simple)
          if (velocity.Length() == 0)
          {
               puck->velocity = -puck->velocity;
          }
          else      // moving collision
          {
               // new puck velocity is equal to reflection of the cross product of
               // the player velocity and the puck velocity plus the player velocity
               puck->velocity = puck->velocity.Reflection(puck->velocity ^ velocity) + velocity;
          }
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -