From 086c26265e97e6eb51cfdfe3d6b4fc01a39f6917 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Fri, 21 Dec 2018 05:11:30 -0500 Subject: [PATCH] Add controllable player --- CMakeLists.txt | 3 +- data/player.obj | 270 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 52 ++++++++-- 3 files changed, 316 insertions(+), 9 deletions(-) create mode 100644 data/player.obj diff --git a/CMakeLists.txt b/CMakeLists.txt index b33f21c..803b21d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,4 +119,5 @@ add_data(Graph data/graphics_presets.cfg data/test.world data/test.material - data/empty.world) + data/empty.world + data/player.obj) diff --git a/data/player.obj b/data/player.obj new file mode 100644 index 0000000..d9abe5e --- /dev/null +++ b/data/player.obj @@ -0,0 +1,270 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +o Cylinder +v 0.000000 -2.000000 -1.000000 +v 0.000000 2.000000 -1.000000 +v 0.195090 -2.000000 -0.980785 +v 0.195090 2.000000 -0.980785 +v 0.382683 -2.000000 -0.923880 +v 0.382683 2.000000 -0.923880 +v 0.555570 -2.000000 -0.831470 +v 0.555570 2.000000 -0.831470 +v 0.707107 -2.000000 -0.707107 +v 0.707107 2.000000 -0.707107 +v 0.831470 -2.000000 -0.555570 +v 0.831470 2.000000 -0.555570 +v 0.923880 -2.000000 -0.382683 +v 0.923880 2.000000 -0.382683 +v 0.980785 -2.000000 -0.195090 +v 0.980785 2.000000 -0.195090 +v 1.000000 -2.000000 -0.000000 +v 1.000000 2.000000 -0.000000 +v 0.980785 -2.000000 0.195090 +v 0.980785 2.000000 0.195090 +v 0.923880 -2.000000 0.382683 +v 0.923880 2.000000 0.382683 +v 0.831470 -2.000000 0.555570 +v 0.831470 2.000000 0.555570 +v 0.707107 -2.000000 0.707107 +v 0.707107 2.000000 0.707107 +v 0.555570 -2.000000 0.831470 +v 0.555570 2.000000 0.831470 +v 0.382683 -2.000000 0.923880 +v 0.382683 2.000000 0.923880 +v 0.195090 -2.000000 0.980785 +v 0.195090 2.000000 0.980785 +v -0.000000 -2.000000 1.000000 +v -0.000000 2.000000 1.000000 +v -0.195091 -2.000000 0.980785 +v -0.195091 2.000000 0.980785 +v -0.382684 -2.000000 0.923879 +v -0.382684 2.000000 0.923879 +v -0.555571 -2.000000 0.831469 +v -0.555571 2.000000 0.831469 +v -0.707107 -2.000000 0.707106 +v -0.707107 2.000000 0.707106 +v -0.831470 -2.000000 0.555570 +v -0.831470 2.000000 0.555570 +v -0.923880 -2.000000 0.382683 +v -0.923880 2.000000 0.382683 +v -0.980785 -2.000000 0.195089 +v -0.980785 2.000000 0.195089 +v -1.000000 -2.000000 -0.000001 +v -1.000000 2.000000 -0.000001 +v -0.980785 -2.000000 -0.195091 +v -0.980785 2.000000 -0.195091 +v -0.923879 -2.000000 -0.382684 +v -0.923879 2.000000 -0.382684 +v -0.831469 -2.000000 -0.555571 +v -0.831469 2.000000 -0.555571 +v -0.707106 -2.000000 -0.707108 +v -0.707106 2.000000 -0.707108 +v -0.555569 -2.000000 -0.831470 +v -0.555569 2.000000 -0.831470 +v -0.382682 -2.000000 -0.923880 +v -0.382682 2.000000 -0.923880 +v -0.195089 -2.000000 -0.980786 +v -0.195089 2.000000 -0.980786 +vt 0.154722 0.000000 +vt 0.154722 0.667738 +vt 0.119900 0.667738 +vt 0.119900 0.000000 +vt 0.085748 0.667738 +vt 0.085748 0.000000 +vt 0.053576 0.667738 +vt 0.053576 0.000000 +vt 0.024623 0.667738 +vt 0.024623 0.000000 +vt 0.000000 0.667738 +vt 0.000000 0.000000 +vt 0.774623 0.667738 +vt 0.774623 0.000000 +vt 0.803576 0.000000 +vt 0.803576 0.667738 +vt 0.835748 0.000000 +vt 0.835748 0.667738 +vt 0.869901 0.000000 +vt 0.869900 0.667738 +vt 0.904722 0.000000 +vt 0.904722 0.667738 +vt 0.938875 0.000000 +vt 0.938875 0.667738 +vt 0.971047 0.000000 +vt 0.971047 0.667738 +vt 1.000000 0.000000 +vt 1.000000 0.667738 +vt 0.524623 0.667738 +vt 0.524623 0.000000 +vt 0.553576 0.000000 +vt 0.553576 0.667738 +vt 0.585747 0.000000 +vt 0.585748 0.667738 +vt 0.619900 0.000000 +vt 0.619900 0.667738 +vt 0.654722 0.000000 +vt 0.654722 0.667738 +vt 0.688875 0.000000 +vt 0.688875 0.667738 +vt 0.721047 0.000000 +vt 0.721047 0.667738 +vt 0.750000 0.000000 +vt 0.750000 0.667738 +vt 0.774623 0.000000 +vt 0.774623 0.667738 +vt 0.524623 0.000000 +vt 0.524623 0.667738 +vt 0.495669 0.667738 +vt 0.495669 0.000000 +vt 0.463498 0.667738 +vt 0.463498 0.000000 +vt 0.429345 0.667738 +vt 0.429345 0.000000 +vt 0.394523 0.667738 +vt 0.394523 0.000000 +vt 0.360370 0.667738 +vt 0.360370 0.000000 +vt 0.328199 0.667738 +vt 0.328199 0.000000 +vt 0.299246 0.667738 +vt 0.299245 0.000000 +vt 0.274623 0.667738 +vt 0.274623 0.000000 +vt 0.250000 0.667738 +vt 0.250000 0.000000 +vt 0.221046 0.667738 +vt 0.221046 0.000000 +vt 0.330435 1.000000 +vt 0.296282 0.993616 +vt 0.264111 0.981093 +vt 0.235158 0.962912 +vt 0.210535 0.939772 +vt 0.191189 0.912562 +vt 0.177863 0.882328 +vt 0.171069 0.850232 +vt 0.171069 0.817507 +vt 0.177863 0.785411 +vt 0.191189 0.755177 +vt 0.210535 0.727967 +vt 0.235157 0.704827 +vt 0.264111 0.686646 +vt 0.296282 0.674123 +vt 0.330435 0.667738 +vt 0.365257 0.667738 +vt 0.399410 0.674123 +vt 0.431581 0.686646 +vt 0.460535 0.704827 +vt 0.485157 0.727967 +vt 0.504503 0.755177 +vt 0.517829 0.785411 +vt 0.524623 0.817507 +vt 0.524623 0.850232 +vt 0.517829 0.882328 +vt 0.504503 0.912562 +vt 0.485157 0.939771 +vt 0.460535 0.962911 +vt 0.431581 0.981092 +vt 0.399410 0.993616 +vt 0.365257 1.000000 +vt 0.188875 0.667738 +vt 0.188875 0.000000 +vt 0.617664 0.981093 +vt 0.588711 0.962912 +vt 0.564088 0.939772 +vt 0.544742 0.912562 +vt 0.531416 0.882328 +vt 0.524623 0.850232 +vt 0.524623 0.817507 +vt 0.531416 0.785411 +vt 0.544742 0.755177 +vt 0.564088 0.727967 +vt 0.588711 0.704827 +vt 0.617664 0.686646 +vt 0.649835 0.674123 +vt 0.683988 0.667738 +vt 0.718810 0.667738 +vt 0.752963 0.674123 +vt 0.785134 0.686646 +vt 0.814088 0.704827 +vt 0.838711 0.727967 +vt 0.858057 0.755177 +vt 0.871383 0.785411 +vt 0.878176 0.817507 +vt 0.878176 0.850232 +vt 0.871383 0.882328 +vt 0.858057 0.912562 +vt 0.838711 0.939772 +vt 0.814088 0.962911 +vt 0.785134 0.981093 +vt 0.752963 0.993616 +vt 0.718810 1.000000 +vt 0.683988 1.000000 +vt 0.649835 0.993616 +vn 0.0980 0.0000 -0.9952 +vn 0.2903 0.0000 -0.9569 +vn 0.4714 0.0000 -0.8819 +vn 0.6344 0.0000 -0.7730 +vn 0.7730 0.0000 -0.6344 +vn 0.8819 0.0000 -0.4714 +vn 0.9569 0.0000 -0.2903 +vn 0.9952 0.0000 -0.0980 +vn 0.9952 0.0000 0.0980 +vn 0.9569 0.0000 0.2903 +vn 0.8819 0.0000 0.4714 +vn 0.7730 0.0000 0.6344 +vn 0.6344 0.0000 0.7730 +vn 0.4714 0.0000 0.8819 +vn 0.2903 0.0000 0.9569 +vn 0.0980 0.0000 0.9952 +vn -0.0980 0.0000 0.9952 +vn -0.2903 0.0000 0.9569 +vn -0.4714 0.0000 0.8819 +vn -0.6344 0.0000 0.7730 +vn -0.7730 0.0000 0.6344 +vn -0.8819 0.0000 0.4714 +vn -0.9569 0.0000 0.2903 +vn -0.9952 0.0000 0.0980 +vn -0.9952 0.0000 -0.0980 +vn -0.9569 0.0000 -0.2903 +vn -0.8819 0.0000 -0.4714 +vn -0.7730 0.0000 -0.6344 +vn -0.6344 0.0000 -0.7730 +vn -0.4714 0.0000 -0.8819 +vn 0.0000 1.0000 0.0000 +vn -0.2903 0.0000 -0.9569 +vn -0.0980 0.0000 -0.9952 +vn 0.0000 -1.0000 -0.0000 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/3/2 6/5/2 5/6/2 +f 5/6/3 6/5/3 8/7/3 7/8/3 +f 7/8/4 8/7/4 10/9/4 9/10/4 +f 9/10/5 10/9/5 12/11/5 11/12/5 +f 11/13/6 12/14/6 14/15/6 13/16/6 +f 13/16/7 14/15/7 16/17/7 15/18/7 +f 15/18/8 16/17/8 18/19/8 17/20/8 +f 17/20/9 18/19/9 20/21/9 19/22/9 +f 19/22/10 20/21/10 22/23/10 21/24/10 +f 21/24/11 22/23/11 24/25/11 23/26/11 +f 23/26/12 24/25/12 26/27/12 25/28/12 +f 25/29/13 26/30/13 28/31/13 27/32/13 +f 27/32/14 28/31/14 30/33/14 29/34/14 +f 29/34/15 30/33/15 32/35/15 31/36/15 +f 31/36/16 32/35/16 34/37/16 33/38/16 +f 33/38/17 34/37/17 36/39/17 35/40/17 +f 35/40/18 36/39/18 38/41/18 37/42/18 +f 37/42/19 38/41/19 40/43/19 39/44/19 +f 39/44/20 40/43/20 42/45/20 41/46/20 +f 41/47/21 42/48/21 44/49/21 43/50/21 +f 43/50/22 44/49/22 46/51/22 45/52/22 +f 45/52/23 46/51/23 48/53/23 47/54/23 +f 47/54/24 48/53/24 50/55/24 49/56/24 +f 49/56/25 50/55/25 52/57/25 51/58/25 +f 51/58/26 52/57/26 54/59/26 53/60/26 +f 53/60/27 54/59/27 56/61/27 55/62/27 +f 55/62/28 56/61/28 58/63/28 57/64/28 +f 57/64/29 58/63/29 60/65/29 59/66/29 +f 59/66/30 60/65/30 62/67/30 61/68/30 +f 4/69/31 2/70/31 64/71/31 62/72/31 60/73/31 58/74/31 56/75/31 54/76/31 52/77/31 50/78/31 48/79/31 46/80/31 44/81/31 42/82/31 40/83/31 38/84/31 36/85/31 34/86/31 32/87/31 30/88/31 28/89/31 26/90/31 24/91/31 22/92/31 20/93/31 18/94/31 16/95/31 14/96/31 12/97/31 10/98/31 8/99/31 6/100/31 +f 61/68/32 62/67/32 64/101/32 63/102/32 +f 63/102/33 64/101/33 2/2/33 1/1/33 +f 1/103/34 3/104/34 5/105/34 7/106/34 9/107/34 11/108/34 13/109/34 15/110/34 17/111/34 19/112/34 21/113/34 23/114/34 25/115/34 27/116/34 29/117/34 31/118/34 33/119/34 35/120/34 37/121/34 39/122/34 41/123/34 43/124/34 45/125/34 47/126/34 49/127/34 51/128/34 53/129/34 55/130/34 57/131/34 59/132/34 61/133/34 63/134/34 diff --git a/src/main.cpp b/src/main.cpp index 2ab6f22..c1fd4b6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -145,6 +145,9 @@ int main(int argc, char* argv[]) { AnimationSystem* animationSystem = new AnimationSystem(); + TransformComponent* playerTransform = nullptr, *cameraTransform = nullptr; + CameraComponent* cameraComponent = nullptr; + if(cinematicMode) cinematic = animationSystem->loadCinematic(argv[2]); else { @@ -153,16 +156,29 @@ int main(int argc, char* argv[]) { EntityID entity = ECS::createEntity(worldManager.getCurrentWorld()); - TransformComponent* transform = ECS::addComponent(entity); - transform->position = glm::vec3(5, 5, 5); + cameraTransform = ECS::addComponent(entity); + cameraTransform->position = glm::vec3(5, 5, 5); - ECS::addComponent(entity); + cameraComponent = ECS::addComponent(entity); + + EntityID playerEntity = ECS::createEntity(worldManager.getCurrentWorld()); + + playerTransform = ECS::addComponent(playerEntity); + playerTransform->position.y = 2; + + MeshComponent* mesh = ECS::addComponent(playerEntity); + mesh->mesh = assetManager.loadMesh("player.obj"); + mesh->material = assetManager.loadMaterial("test.material"); } float currentTime = 0.0f, lastTime = 0.0f; bool running = true; while(running) { + currentTime = SDL_GetTicks() / 1000.0f; + const float deltaTime = currentTime - lastTime; + lastTime = currentTime; + SDL_Event event = {}; while(SDL_PollEvent(&event) > 0) { if(event.type == SDL_QUIT) @@ -195,12 +211,32 @@ int main(int argc, char* argv[]) { } } - currentTime = SDL_GetTicks() / 1000.0f; - const float deltaTime = currentTime - lastTime; - lastTime = currentTime; - - if(cinematicMode) + if(cinematicMode) { animationSystem->update(cinematic, deltaTime); + } else { + const Uint8* keys = SDL_GetKeyboardState(nullptr); + + glm::vec3 direction = glm::normalize(cameraTransform->position - cameraComponent->target); + direction.y = 0; + + glm::vec3 right = glm::normalize(glm::cross(direction, glm::vec3(0, 1, 0))); + + const float playerSpeed = 3; + + if(keys[SDL_SCANCODE_W]) + playerTransform->position -= playerSpeed * direction * deltaTime; + + if(keys[SDL_SCANCODE_S]) + playerTransform->position += playerSpeed * direction * deltaTime; + + if(keys[SDL_SCANCODE_A]) + playerTransform->position -= playerSpeed * right * glm::vec3(1, 0, 0) * deltaTime; + + if(keys[SDL_SCANCODE_D]) + playerTransform->position += playerSpeed * right * glm::vec3(1, 0, 0) * deltaTime; + + cameraComponent->target = playerTransform->position; + } #ifdef DEBUG ImGui::NewFrame();