topical media & game development
lib-game-delta3d-sdk-examples-testMap-testmap.cpp / cpp
/* -*-c++-*-
* testMap - testmap (.h & .cpp) - Using 'The MIT License'
* Copyright (C) 2005-2008, Alion Science and Technology Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This software was developed by Alion Science and Technology Corporation under
* circumstances in which the U. S. Government may have rights in the software.
*
* Eddie Johnson
* Chris Osborn
* Erik Johnson
*/
Demo application illustrating map loading and actor manipulation
include <dtABC/application.h>
include <dtABC/beziercontroller.h>
include <dtABC/labelactor.h>
include <dtCore/orbitmotionmodel.h>
include <dtCore/globals.h>
include <dtDAL/project.h>
include <dtDAL/map.h>
include <iostream>
using namespace dtCore;
using namespace dtDAL;
using namespace dtABC;
class TestMap : public Application
{
public:
TestMap()
: Application("testMap.xml")
, mMotionModel(NULL)
, mMap(NULL)
{
// Set up a motion model so we may move the camera
mMotionModel = new OrbitMotionModel(GetKeyboard(), GetMouse());
mMotionModel->SetTarget(GetCamera());
// Steps to load a map into Delta3D
// 1. Set the project context, just like in the editor
// 2. Get a reference to the map
// 3. Load the map into the scene through the project class
std::string contextName = dtCore::GetDeltaRootPath() + "/examples/data/demoMap";
Project::GetInstance().SetContext(contextName, true);
mMap = &Project::GetInstance().GetMap("MyCoolMap");
//Since we are in an Application we can simply call...
LoadMap(*mMap);
// translate the camera to the predefined start position
{
std::vector< dtCore::RefPtr<ActorProxy> > proxies;
mMap->FindProxies(proxies, "startPosition");
if (!proxies.empty())
{
Transformable* startPoint;
proxies[0]->GetActor(startPoint);
if (startPoint != NULL)
{
Transform xform;
startPoint->GetTransform(xform);
GetCamera()->SetTransform(xform);
}
}
}
CreateHelpLabel();
}
virtual bool KeyReleased(const dtCore::Keyboard* keyboard, int kc)
{
if (kc == 'r')
{
Reset();
return true;
}
else if (kc == osgGA::GUIEventAdapter::KEY_F1)
{
mLabel->SetActive(!mLabel->GetActive());
return true;
}
else
{
return false;
}
}
// Re-initialize to default conditions
void Reset()
{
std::vector< dtCore::RefPtr<ActorProxy> > proxies;
mMap->FindProxies(proxies, "Controller0");
if (!proxies.empty())
{
BezierController* controller;
proxies[0]->GetActor(controller);
if (controller != NULL)
{
controller->Start();
}
}
}
protected:
virtual ~TestMap()
{
}
private:
void CreateHelpLabel()
{
mLabel = new dtABC::LabelActor();
osg::Vec2 testSize(27.0f, 2.5f);
mLabel->SetBackSize(testSize);
mLabel->SetFontSize(0.8f);
mLabel->SetTextAlignment(dtABC::LabelActor::AlignmentEnum::LEFT_CENTER);
mLabel->SetText(CreateHelpLabelText());
mLabel->SetEnableDepthTesting(false);
mLabel->SetEnableLighting(false);
GetCamera()->AddChild(mLabel.get());
dtCore::Transform labelOffset(-17.0f, 50.0f, 11.75f, 0.0f, 90.0f, 0.0f);
mLabel->SetTransform(labelOffset, dtCore::Transformable::REL_CS);
AddDrawable(GetCamera());
}
std::string CreateHelpLabelText()
{
std::string testString("");
testString += "F1: Toggle Help Screen\n";
testString += "\n";
testString += "r: Reset Helicopter (if at end of cycle)\n";
return testString;
}
RefPtr<MotionModel> mMotionModel;
RefPtr<Map> mMap;
RefPtr<dtABC::LabelActor> mLabel;
};
int main()
{
std::string dataPath = dtCore::GetDeltaDataPathList();
dtCore::SetDataFilePathList(dataPath + ";" +
dtCore::GetDeltaRootPath() + "/examples/data" + ";");
RefPtr<TestMap> app;
try
{
app = new TestMap;
app->Config();
app->Run();
}
catch (const dtUtil::Exception& e)
{
std::cout << e.What() << '\n';
}
return 0;
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.