X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FYoinkApp.cc;fp=src%2FYoinkApp.cc;h=0000000000000000000000000000000000000000;hp=8690143d16b7356439849753bff0468ec8575a83;hb=892da43bf5796e7c5f593a6d0f53bd797a36bd3e;hpb=ca0f7bdfba63140dca0bd20586d31980f3938eb2 diff --git a/src/YoinkApp.cc b/src/YoinkApp.cc deleted file mode 100644 index 8690143..0000000 --- a/src/YoinkApp.cc +++ /dev/null @@ -1,364 +0,0 @@ - -/******************************************************************************* - - Copyright (c) 2009, Charles McGarvey - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#include // getenv -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "YoinkApp.hh" - -#if HAVE_CONFIG_H -#include "config.h" -#endif - - -static std::string configFiles() -{ - std::string files; - - // look in the configured data directory last of all - char* dataDir = getenv("YOINK_DATADIR"); - files += (dataDir ? dataDir : YOINK_DATADIR); - files += "/yoinkrc"; - - // add the colon-delimited paths from configure - files += ":"; - files += YOINK_CONFIGFILES; - - char* configFile = getenv("YOINKRC"); - if (configFile) - { - // if a config file from the environment variable is specified, we want - // to load it first so it has precedence - files += ":"; - files += configFile; - } - - return files; -} - -static std::string iconFile() -{ - char* dataDir = getenv("YOINK_DATADIR"); - - // first set up the search paths so we can find the icon and other resources - if (dataDir) - { - // look first in the data directory specified by the environment - Mf::Resource::addSearchPath(dataDir); - } - - // then look in the configured data directory - Mf::Resource::addSearchPath(YOINK_DATADIR); - - return Mf::Resource::getPath("yoink.png"); -} - - -YoinkApp::YoinkApp(int argc, char* argv[]) : - Mf::Engine(argc, argv, configFiles(), PACKAGE_STRING, iconFile()), - music("NightFusionIntro"), - punchSound("RobotPunch") -{ - Mf::dispatcher::addHandler("video.context_recreated", - boost::bind(&YoinkApp::contextRecreated, this, _1), this); - setupGL(); - - music.setLooping(true); - music.enqueue("NightFusionLoop"); - music.stream(); - - heroine = Character::alloc("RobotTrooper"); - heroine->getAnimation().startSequence("Run"); - - Mf::Scalar a[6] = {0.0, 1.5, -0.5, 3.0, -2.0, 1.0}; - interp.init(a, 2.0, Mf::Interpolator::OSCILLATE); - - Mf::Scalar b[2] = {1.0, 0.0}; - fadeIn.init(b, 1.0); - - octree = Mf::loadScene("Classic"); - heroine->treeNode = octree->insert(heroine); -} - -YoinkApp::~YoinkApp() -{ - Mf::dispatcher::removeHandler(this); -} - - -void YoinkApp::setupGL() -{ - glEnable(GL_TEXTURE_2D); - - //glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - - glShadeModel(GL_SMOOTH); - //glEnable(GL_POLYGON_SMOOTH); - - //int texSize; - //glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize); - //std::cout << "texture size: " << texSize << std::endl; - - //glEnable(GL_BLEND); - //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.0); - - glClearColor(1.0, 0.0, 0.0, 1.0); - - //glMatrixMode(GL_PROJECTION); - //glLoadIdentity(); - //gluPerspective(60.0, 1.33333, 1.0, 2500.0); - camera.setProjection(cml::rad(60.0), 1.33333, 32.0, 2500.0); - camera.uploadProjectionToGL(); - - //glMatrixMode(GL_MODELVIEW); - - //glLineWidth(10.0f); -} - -void YoinkApp::contextRecreated(const Mf::Notification* note) -{ - // Whenever the context is destroyed and a new one created, it probably - // won't contain our state so we need to set that up again. - setupGL(); -} - - -void YoinkApp::update(Mf::Scalar t, Mf::Scalar dt) -{ - //dt *= 0.7; - - fadeIn.update(dt); - camera.update(t, dt); - heroine->update(t, dt); - - // reinsert heroine - heroine->treeNode = octree->reinsert(heroine, heroine->treeNode); - octree->print(heroine->treeNode); - - //camera.lookAt(heroine->getSphere().point); - camera.setPosition(Mf::Vector3(-heroine->current.position[0], - -heroine->current.position[1], -256)); - - Mf::Vector3 heroinePosition; - Mf::promoteVector(heroinePosition, heroine->current.position); - Mf::Sound::setListenerPosition(heroinePosition); - - interp.update(dt); - hud.setBar1Progress(interp.getState(dt)); - hud.setBar2Progress(1.0 - interp.getState(dt)); -} - - -void YoinkApp::draw(Mf::Scalar alpha) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_MODELVIEW); - glLoadMatrix(camera.getModelviewMatrix().data()); - - // DRAW THE SCENE - Mf::Texture::resetBind(); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - octree->drawIfVisible(alpha, camera.getFrustum()); - - //heroine->draw(alpha); - heroine->getAabb().draw(); - - hud.draw(); - - // DRAW FADE - glEnable(GL_BLEND); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha)); - Mf::Texture::resetBind(); - - //glRectf(-1.0f, -1.0f, 1.0f, 1.0f); - glBegin(GL_QUADS); - glVertex3f(-1.0, -1.0, -0.1); - glVertex3f(1.0, -1.0, -0.1); - glVertex3f(1.0, 1.0, -0.1); - glVertex3f(-1.0, 1.0, -0.1); - glEnd(); - - glDisable(GL_BLEND); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - -void YoinkApp::handleEvent(const Mf::Event& event) -{ - switch (event.type) - { - case SDL_KEYDOWN: - if (event.key.keysym.sym == SDLK_ESCAPE) - { - stop(); - break; - } - else if (event.key.keysym.sym == SDLK_f) - { - getVideo().toggleFull(); - break; - } - else if (event.key.keysym.sym == SDLK_SPACE) - { - heroine->getAnimation().startSequence("Punch"); - punchSound.play(); - break; - } - else if (event.key.keysym.sym == SDLK_t) - { - Mf::dispatcher::dispatch("video.context_recreated"); - break; - } - else if (event.key.keysym.sym == SDLK_p) - { - music.toggle(); - break; - } - else if (event.key.keysym.sym == SDLK_l) - { - getVideo().toggleCursorGrab(); - getVideo().toggleCursorVisible(); - break; - } - - case SDL_KEYUP: - heroine->handleEvent(event); - - case SDL_MOUSEMOTION: - case SDL_MOUSEBUTTONDOWN: - camera.handleEvent(event); - break; - - case SDL_QUIT: - stop(); - break; - - case SDL_VIDEORESIZE: - glViewport(0, 0, event.resize.w, event.resize.h); - hud.resize(event.resize.w, event.resize.h); - camera.setProjection(cml::rad(60.0), - double(event.resize.w) / double(event.resize.h), 32.0, 2500.0); - camera.uploadProjectionToGL(); - break; - } -} - - -void printUsage() -{ - std::cout << "Usage: "PACKAGE" [-h|--help] [OPTION=VALUE]..." << std::endl - << "The alien-smashing action game." << std::endl - << std::endl - << "Options:" << std::endl - << " -h, --help" << std::endl - << " show this help and exit" << std::endl - << " detail=1|2|3" << std::endl - << " the level of detail of game scenes" << std::endl - << " fullscreen=true|false" << std::endl - << " if true, uses the entire display" << std::endl - << " maxfps=num" << std::endl - << " the maximum number of frames per second" << std::endl - << std::endl - << "See documentation for more options." << std::endl; -} - -int main(int argc, char* argv[]) -{ - if (argc > 1 && - (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0)) - { - printUsage(); - return 0; - } - - std::cout << std::endl << PACKAGE_STRING << std::endl - << "Compiled " << __TIME__ " " __DATE__ << std::endl - << "Send patches and bug reports to <" - PACKAGE_BUGREPORT << ">." << std::endl << std::endl; - -#if YOINK_LOGLEVEL >= 4 - Mf::setLogLevel(Mf::LOG_DEBUG); -#elif YOINK_LOGLEVEL >= 3 - Mf::setLogLevel(Mf::LOG_INFO); -#elif YOINK_LOGLEVEL >= 2 - Mf::setLogLevel(Mf::LOG_SCRIPT); -#elif YOINK_LOGLEVEL >= 1 - Mf::setLogLevel(Mf::LOG_ERROR); -#elif YOINK_LOGLEVEL - Mf::setLogLevel(Mf::LOG_NONE); -#endif - - int status = 0; - - try - { - YoinkApp app(argc, argv); - status = app.run(); - } - catch (Mf::Exception e) - { - Mf::logError("unhandled exception: <<%s>>", e.what()); - Mf::logInfo("it's time to crash now :-("); - //status = 1; - throw e; - } - - std::cout << std::endl << "Goodbye..." << std::endl << std::endl; - return status; -} - - -/** vim: set ts=4 sw=4 tw=80: *************************************************/ -