int main() { Kernel* kernel = new Kernel(); kernel->Initialize(); kernel->Run(); return 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { srand(timeGetTime()); // AllocConsole(); // freopen("CONOUT$", "wb", stdout); vars = new gamevars; vars->loadCfgFile("config.cfg"); timer = new Timer; tasks.AddTask(timer); input = new Input; tasks.AddTask(input); renderer = new Graphics; tasks.AddTask(renderer); camera = new Camera; tasks.AddTask(camera); camera->SetPosition(Vector(122, 30, 160)); camera->LookAt(Vector(122, 5, 188)); camera->StopFollowing(); library = new Library; ents = new EntityContainer; tasks.AddTask(ents); particles = new ParticleManager; tasks.AddTask(particles); ui = new UI; tasks.AddTask(ui); selector = new LassoSelector; tasks.AddTask(selector); console = new Console; console->enabled = true; tasks.AddTask(console); tasks.Init(); tasks.Run(); int loadingTexture = renderer->LoadTexture("data/loadingTexture.JPG"); UIWindow loadingScreen; glPushMatrix(); glLoadIdentity(); glDisable(GL_DEPTH_TEST); loadingScreen.renderTexture(Vector(0,0,0),Vector((float)vars->getIntValue("screen_width"),(float)vars->getIntValue("screen_height"),0),loadingTexture); glPopMatrix(); renderer->run(); input->mouseAbsolute = Vector(100,100, 100); input->mouseMovement = Vector(0,0,0); library->Import("data/models/house.BMP",0); library->Import("data/models/Sheep.BMP",0); library->Import("data/models/soldier.bmp",0); library->Import("data/models/barracks.bmp",0); library->Import("data/models/farm.md2",1); library->Import("data/models/tower.md2",1); library->Import("data/models/mill.md2",1); library->Import("data/models/dock.md2",1); library->Import("data/models/lightpost.md2",1); library->Import("data/models/barracks.md2",1); library->Import("data/models/peasant.md2",1); library->Import("data/models/villagewoman.md2",1); library->Import("data/models/sheep.md2",1); library->Import("data/models/vulture.md2",1); library->Import("data/models/soldier.md2",1); library->Import("data/models/ship.md2",1); library->Import("data/models/plant2.md2",1); library->Import("data/models/felwoodbush1.md2",1); // UIWindow *waypointEditor = (UIWindow*)ui->CreateFromFile("data/ui/waypointeditor.ui"); // waypointEditor->visible = false; input->mouseAbsolute = Vector(100,100, 100); input->mouseMovement = Vector(0,0,0); timer->frameScalar = 0.0001f; LoadWorldState(vars->getValue("default_map")->value.c_str()); int ninjaTimeout = (timeGetTime()/1000) + 30; int maxCameraZoom = vars->getIntValue("camera_maxdistance"); while (active) { tasks.Run(); if ((timeGetTime()/1000) > (DWORD)ninjaTimeout) { ninjaTimeout = (timeGetTime()/1000) + 60; for (int i=0; i<10; i++) { console->RunLinef("setCompleted(spawnunit('ninja',60,60+%d),100)\n",i*3); } } /* int e = glGetError(); if (e) { char t[255]; sprintf(t,"Rendering error code: %d (0x%x)",e,e); console->Print(t); } */ // TODO: make key binding system to replace hard-coded tests if (console->toggled) { input->inputContext = ConsoleInput; } else if (input->inputContext == ConsoleInput) { input->inputContext = NormalInput; } if (input->GetKeyDown(SDLK_ESCAPE)) { active = false; } static float moveSpeed = vars->getFloatValue("cameraSpeed"); switch (input->inputContext) { case NormalInput: { /* if (selector->SelectedEntities.size() > 0) { Entity *SelectedEntity = selector->SelectedEntities[0]; if (SelectedEntity && SelectedEntity->family == EF_UNIT) { camera->Follow(SelectedEntity,Camera::ThirdPerson); } else { camera->StopFollowing(); } } else { */ camera->StopFollowing(); // } selector->enabled = true; selector->maxSelectionCount = 8; /* if (input->GetKeyDown(SDLK_LEFT) || input->GetKeyDown('a') || (input->mouseAbsolute.x <= 30)) { camera->MoveRelative(Vector(-moveSpeed*input->mouseAbsolute.z,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_RIGHT) || input->GetKeyDown('d') || (input->mouseAbsolute.x >= 770)) { camera->MoveRelative(Vector(moveSpeed*input->mouseAbsolute.z,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_UP) || input->GetKeyDown('w') || (input->mouseAbsolute.y <= 30)) { camera->MoveRelative(Vector(0,0,moveSpeed*input->mouseAbsolute.z)*timer->frameScalar); } if (input->GetKeyDown(SDLK_DOWN) || input->GetKeyDown('s') || (input->mouseAbsolute.y >= 570)) { camera->MoveRelative(Vector(0,0,-moveSpeed*input->mouseAbsolute.z)*timer->frameScalar); } */ if (input->GetKeyDown(SDLK_LEFT) || input->GetKeyDown('a') || (input->mouseAbsolute.x <= 30)) { camera->MoveRelative(Vector(-moveSpeed,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_RIGHT) || input->GetKeyDown('d') || (input->mouseAbsolute.x >= 770)) { camera->MoveRelative(Vector(moveSpeed,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_UP) || input->GetKeyDown('w') || (input->mouseAbsolute.y <= 30)) { camera->MoveRelative(Vector(0,0,moveSpeed)*timer->frameScalar); } if (input->GetKeyDown(SDLK_DOWN) || input->GetKeyDown('s') || (input->mouseAbsolute.y >= 570)) { camera->MoveRelative(Vector(0,0,-moveSpeed)*timer->frameScalar); } if (input->GetKeyReleased(SDLK_F1)) { input->inputContext = EditMode; } if (entityToPlace) { if (placingEntity) { entityToPlace->completed = 0; entityToPlace->position = selector->gridAlignedLassoPosition; } else if (rotatingEntity) { entityToPlace->completed = 0; entityToPlace->rotation.z += input->mouseMovement.x; } } if (input->GetMButtonPushed(1)) { // initial push if (entityToPlace && timer->time - beginPlacingTime > 1) { if (placingEntity) { placingEntity = false; rotatingEntity = true; beginPlacingTime = timer->time; // } else if (rotatingEntity) { rotatingEntity = false; entityToPlace = 0; console->RunLine(placeScript.c_str()); } } } if (input->GetMButtonReleased(3)) { // right-click: if (selector->SelectedEntities.size() > 0) { for (int i=0;i<(int)selector->SelectedEntities.size();i++) { Entity *SelectedEntity = selector->SelectedEntities[i]; if (SelectedEntity && SelectedEntity->family == EF_UNIT) { // anything that can move here... // if we aren't adding to the task queue, we have to clear it first. if (!input->GetKeyState(SDLK_RSHIFT) && !input->GetKeyState(SDLK_LSHIFT)) { SelectedEntity->ClearTasks(); } SelectedEntity->PathTo(selector->gridAlignedLassoPosition); } } } } break; } case BuildMenu: case PersonelMenu: selector->enabled = false; break; case EditMode: camera->StopFollowing(); // waypointEditor->visible = true; selector->enabled = true; selector->maxSelectionCount = 1; renderer->text.print(5,5,"---EDIT MODE---"); if (input->GetKeyDown(SDLK_LEFT)) { camera->MoveRelative(Vector(-moveSpeed,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_RIGHT)) { camera->MoveRelative(Vector(moveSpeed,0,0)*timer->frameScalar); } if (input->GetKeyDown(SDLK_UP)) { camera->MoveRelative(Vector(0,0,moveSpeed)*timer->frameScalar); } if (input->GetKeyDown(SDLK_DOWN)) { camera->MoveRelative(Vector(0,0,-moveSpeed)*timer->frameScalar); } if (input->GetKeyReleased(SDLK_F1)) { input->inputContext = NormalInput; // waypointEditor->visible = false; } if (entityToPlace) { if (placingEntity) { entityToPlace->position = selector->gridAlignedLassoPosition; } else if (rotatingEntity) { entityToPlace->rotation.z += input->mouseMovement.x; } } if (input->GetMButtonPushed(1)) { // initial push if (entityToPlace && timer->time - beginPlacingTime > 1) { if (placingEntity) { placingEntity = false; rotatingEntity = true; beginPlacingTime = timer->time; } else if (rotatingEntity) { rotatingEntity = false; entityToPlace = 0; } } } if (input->GetMButtonReleased(3)) { // right-click: if (selector->SelectedEntities.size() > 0) { Entity *SelectedEntity = selector->SelectedEntities[0]; PlaceEntity(SelectedEntity,""); } } break; case Sailing: if (!entControlling) { input->inputContext = NormalInput; break; } selector->enabled = true; if ((input->mouseAbsolute.x <= 30)) { camera->MoveRelative(Vector(-moveSpeed,0,0)*timer->frameScalar); } if ((input->mouseAbsolute.x >= 770)) { camera->MoveRelative(Vector(moveSpeed,0,0)*timer->frameScalar); } if ((input->mouseAbsolute.y <= 30)) { camera->MoveRelative(Vector(0,0,moveSpeed)*timer->frameScalar); } if ((input->mouseAbsolute.y >= 570)) { camera->MoveRelative(Vector(0,0,-moveSpeed)*timer->frameScalar); } if (input->GetKeyDown(SDLK_LEFT) || input->GetKeyDown('a')) { entControlling->velocity -= (((entControlling->velocity ^ Vector(0,1,0)) + entControlling->velocity)/2)*timer->frameScalar; } if (input->GetKeyDown(SDLK_RIGHT) || input->GetKeyDown('d')) { entControlling->velocity += (((entControlling->velocity ^ Vector(0,1,0)) + entControlling->velocity)/2)*timer->frameScalar; } if (input->GetKeyDown(SDLK_UP) || input->GetKeyDown('w')) { entControlling->velocity += (Normalize(camera->GetView().flat())) * timer->frameScalar; } if (input->GetKeyDown(SDLK_DOWN) || input->GetKeyDown('s')) { entControlling->velocity -= entControlling->velocity * timer->frameScalar; } camera->Follow(&entControlling->position,2); break; } if (input->mouseAbsolute.z < 0) input->mouseAbsolute.z = 0; if (input->mouseAbsolute.z > maxCameraZoom) input->mouseAbsolute.z = (float)maxCameraZoom; Vector cp = camera->GetPosition(); camera->SetPosition(Vector(cp.x,0,cp.z)); camera->SetZoom((input->mouseAbsolute.z * input->mouseAbsolute.z)); if (input->GetKeyDown(SDLK_LCTRL) || input->GetKeyDown(SDLK_RCTRL) || input->GetMButtonState(2)) { camera->RotateView(input->mouseMovement.y/2,input->mouseMovement.x/2,0); if (camera->GetRotation().x < -20) camera->RotateView(-camera->GetRotation().x,0,0); // camera->MoveRelative(Vector(-input->mouseMovement.x/4,0,0)); } } tasks.Stop(); return 0; }