コード例 #1
0
void MaterialGeneratorNode::addOutput( const MaterialGeneratorNodeConnectorDesc& desc )
{
    MaterialGeneratorNodeConnectorAttachment* att(HENew(MaterialGeneratorNodeConnectorAttachment)(this, desc));
    att->init(eNodeGraphNodeConnectorType_Output, desc.m_Id, desc.m_Name.c_str());
    addAttachment(att);
    m_Outputs.add(att);
}
コード例 #2
0
bool RenderWidget::create(const bool show)
{
    bool result(false);

    GRAPHICS->registerWindow(this);
    if (Window::create(show))
    {
        GRAPHICS->setActiveWindow(this);
        m_WindowRect.x = x();
        m_WindowRect.y = y();
        m_WindowRect.width = width();
        m_WindowRect.height = height();
        result = true;

        CONTROLS->registerInputForWindow(getHandle(), HENew(he::io::Keyboard)(), HENew(he::io::Mouse)());
    }
    return result;
}
コード例 #3
0
void PhysicsRagdoll::addBodyPart(PhysicsDynamicActor** ppActor, const BodyPart& part, const PhysicsMaterial& material, 
                                uint32 collisionGroup, uint32 collisionGroupAgainst)
{
    (*ppActor) = HENew(PhysicsDynamicActor)(mat44::createTranslation(m_StartPosition) * part.bonePose);
    PHYSICS->getScene()->removeActor(*(*ppActor)->getInternalActor());
    m_Aggregate->addActor(*(*ppActor)->getInternalActor());
    static_cast<physx::PxRigidDynamic*>((*ppActor)->getInternalActor())->setSolverIterationCounts(8, 2);
    PhysicsCapsuleShape pelvisShape(part.radius / 2.0f, part.length);
    (*ppActor)->addShape(&pelvisShape, material, part.mass, collisionGroup, collisionGroupAgainst, part.capsulePose);
}
コード例 #4
0
void MainGame::init()
{
    he::GlobalSettings* const globalSettings(he::GlobalSettings::getInstance());
    globalSettings->load(he::Path("settings.cfg"));
    globalSettings->save(he::Path("settings.cfg"));

    m_View = GRAPHICS->createView();
    m_Window = GRAPHICS->createWindow();

    m_Window->setResizable(true);
    m_Window->setVSync(true);
    m_Window->setWindowDimension(1280, 720);
    m_Window->setWindowTitle("HappyThijsTest");
    he::eventCallback0<void> quitHandler(std::bind(&he::HappyEngine::quit, HAPPYENGINE));
    m_Window->Closed += quitHandler;
    m_Window->create(true);

    he::gfx::CameraSettings cameraSettings;
    cameraSettings.setRelativeViewport(he::RectF(0, 0, 1.0f, 1.0f));

    m_Renderer = HENew(he::gfx::Renderer2D);
    m_View->addRenderPlugin(m_Renderer);

    m_View->setWindow(m_Window);
    m_View->init(cameraSettings);

    m_Renderer->attachToRender(this);

    m_FpsGraph = HENew(he::tools::FPSGraph)();
    m_FpsGraph->setType(he::tools::FPSGraph::Type_TextOnly);
    m_Renderer->attachToRender(m_FpsGraph);

	m_AStar = HENew(ht::AStar)();
	m_AStar->init();
    
    CONSOLE->attachToRenderer(m_Renderer);
    PROFILER->attachToRenderer(m_Renderer);
}
コード例 #5
0
void WebListener::executeFunction(const he::String& object,
                                    const he::String& method,
                                    const Awesomium::JSArray& args)
{
    // global js object for global functions
    he::String objName("window");
    Awesomium::WebString aweMethod = Awesomium::WSLit(method.c_str());

    if (object != "window" && object != "")
    {
        objName = object;

        // check if jsobject already exists
        auto it(std::find_if(m_Objects.cbegin(), m_Objects.cend(), [&objName](JSObject* obj)
        {
            return obj->getObjectName() == objName;
        }));
        
        bool objectExists(it != m_Objects.cend());

        // create new js object if it doesn't already exists
        if (objectExists == false)
        {
            Awesomium::JSValue val = m_WebView->CreateGlobalJavascriptObject(
                Awesomium::WSLit(objName.c_str()));

            Awesomium::JSObject& obj = val.ToObject();

            JSObject* jsObject(HENew(JSObject)(obj, objName));

            m_Objects.add(jsObject);

            jsObject->executeFunction(aweMethod, args);
        }
        else
        {
            (*it)->executeFunction(aweMethod, args);
        };
    }
    else
    {
        Awesomium::JSValue window(
            m_WebView->ExecuteJavascriptWithResult(
            Awesomium::WSLit("window"), Awesomium::WSLit("")));

        Awesomium::JSObject& obj = window.ToObject();

        obj.Invoke(aweMethod, args);
    }
}
コード例 #6
0
/* CONSTRUCTOR - DESTRUCTOR */
Scrollbar::Scrollbar(const vec2& pos, const vec2& size, float heightScrollbar) :	m_Hitregion(nullptr),
                                                                                    m_Pos(pos),
                                                                                    m_Size(size),
                                                                                    m_BarPos(0.0f),
                                                                                    m_Dragging(false),
                                                                                    m_PreviousMousePos(0,0),
                                                                                    m_ScrollbarHeight(heightScrollbar)
{
    m_Hitregion = HENew(Hitregion)(
        vec2(pos.x + size.x/2, pos.y + (heightScrollbar/2)),
        vec2(size.x - 2, heightScrollbar));

    m_Colors["background"] = Color(0.6f,0.6f,0.6f);
    m_Colors["scrollbar"] = Color(0.4f,0.4f,0.4f);
    m_Colors["edge"] = Color(0.2f,0.2f,0.2f);

    SpriteCreator* const cr(GUI->getSpriteCreator());
    m_Sprites[0] = cr->createSprite(m_Size, Sprite::UNIFORM_SCALE);
    m_Sprites[1] = cr->createSprite(vec2(m_Size.x, heightScrollbar), Sprite::UNIFORM_SCALE);

    renderSprites();
}
コード例 #7
0
ファイル: main.cpp プロジェクト: EvilInteractive/happy-engine
PLUGIN_EXPORT he::pl::IPlugin* createPlugin()
{
    return HENew(ht::HappyPluginTestMain)();
}
コード例 #8
0
ファイル: HMLEdit.c プロジェクト: komh/hanedit2
MRESULT mainwmCommand( HWND hwnd, MPARAM mp1, MPARAM mp2 )
{
    switch (SHORT1FROMMP(mp1))
    {
    case IDM_NEW:
        HENew(hwnd);
        break;
    case IDM_OPEN:
        HEOpen(hwnd);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
        break;
    case IDM_IMPORT:
        HEImport(hwnd);
        break;
    case IDM_RELOAD:
        if (WinSendMsg(hwndHMLE,HMLM_QUERYCHANGED,0L,0L))
            {
            if (WinMessageBox(
                    HWND_DESKTOP,hwnd,
                    "Document changed. Discard it?","Caution",
                    0,MB_YESNO|MB_DEFBUTTON2|MB_WARNING|MB_MOVEABLE)==MBID_NO)
                return 0L;
            }
        HEReloadAfterChangeHanCode(hwnd);
        break;
    case IDM_QUICKRELOAD:
        HEReloadAfterChangeHanCode(hwnd);
        break;
    case IDM_SAVE:
        HESave(hwnd);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
        break;
    case IDM_SAVEAS:
        HESaveAs(hwnd);
        break;
    case IDM_EXIT:
        HEExit(hwnd);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
//        return 0L;
        break;
    case IDM_ABOUT:
        HEAbout(hwnd);
        break;
    case IDM_OPTIONS:
        HEOptions(hwnd);
        break;
    case IDM_COPY:
        WinSendMsg(hwndHMLE,HMLM_COPY,0,0);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
        break;
    case IDM_CUT:
        WinSendMsg(hwndHMLE,HMLM_CUT,0,0);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
        break;
    case IDM_PASTE:
        WinSendMsg(hwndHMLE,HMLM_PASTE,0,0);
        break;
    case IDM_CLEAR:
        WinSendMsg(hwndHMLE,HMLM_CLEAR,0,0);
//        WinSetFocus(HWND_DESKTOP,hwndHMLE);
        break;
    case IDM_FIND:
        HEFind(hwnd);
        break;
    case IDM_SELECTALL:
        HESelectAll(hwnd);
        break;
    case IDM_SPECIALCHARS:
        HESpecialChars( hwnd );
        break;
    case IDM_HANJA:
        HEHanja( hwnd );
        break;
    } // switch Control

    if( SHORT1FROMMP( mp2 ) == CMDSRC_PUSHBUTTON )
        WinSetFocus(HWND_DESKTOP,hwndHMLE);

    WinPostMsg( hwndHMLE, HMLM_REFRESH, 0, 0 );

    return MRFROMLONG(0L);
}
コード例 #9
0
void MainGame::init()
{
    he::GlobalSettings* const globalSettings(he::GlobalSettings::getInstance());
    he::Path path(he::Path::getBinPath().str() + "settings.cfg");
    globalSettings->load(path);
    globalSettings->save(path);

    he::gfx::CameraSettings cameraSettings;
    cameraSettings.setRelativeViewport(he::RectF(0, 0, 1, 1));

    he::gfx::GraphicsEngine* const graphicsEngine(GRAPHICS);
    m_Window = graphicsEngine->createWindow();

    const bool oculus(globalSettings->getRenderSettings().stereoSetting == he::gfx::StereoSetting_OculusRift);

    m_Window->setResizable(true);
    m_Window->setVSync(false);
    m_Window->setWindowDimension(1280, 800);
    m_Window->setWindowTitle("HappyPluginTest");
    m_Window->setFullscreen(false);
    m_Window->setOculusRiftEnabled(oculus);
    he::eventCallback0<void> quitHandler(std::bind(&he::HappyEngine::quit, HAPPYENGINE));
    m_Window->Closed += quitHandler;
    m_Window->create(true);

    he::ge::EntityManager* const entityMan(he::ge::EntityManager::getInstance());
    entityMan->installComponentFactory(HENew(he::ge::EngineEntityComponentFactory)());
    entityMan->init();

    m_PluginLoader = HENew(he::pl::PluginLoader)();

    char* plugins[2] =
    {
        "HappyPluginTest",
        "HappyPlugin2DTest"
    };

    he::HappyMessageBox::Button msgResult(
        he::HappyMessageBox::showExt("Choose plugin", "Please select your plugin", he::HappyMessageBox::Icon_Info, plugins[0], plugins[1], "Cancel"));

    const char* chosenPlugin(nullptr);
    switch (msgResult)
    {
    case he::HappyMessageBox::Button_Button1:
        chosenPlugin = plugins[0];
        break;
    case he::HappyMessageBox::Button_Button2:
        chosenPlugin = plugins[1];
        break;
    default:
        break;
    }
    if (chosenPlugin)
    {
        m_Plugin = m_PluginLoader->loadPlugin(he::Path::getBinPath(), chosenPlugin);
        if (m_Plugin != nullptr)
        {
            m_Plugin->init(m_Window, he::RectF(0, 0, 1.0f, 1.0f));
            m_Plugin->onLoadLevel(he::Path(""));

            m_View = graphicsEngine->createView();
            m_View->setWindow(m_Window);
            m_DebugRenderer = HENew(he::gfx::Renderer2D)();
            m_View->addRenderPlugin(m_DebugRenderer);
            m_View->init(cameraSettings);
            m_View->setCamera(m_Plugin->getActiveCamera());

            PROFILER->attachToRenderer(m_DebugRenderer);
            CONSOLE->attachToRenderer(m_DebugRenderer);
            CONSOLE->registerCmd([&]() {
                m_PluginLoader->reloadPlugin(m_Plugin);
            }, "reloadPlugin");
            m_FpsGraph = HENew(he::tools::FPSGraph)(oculus? 3.0f : 1.0f);
            m_FpsGraph->setPos(he::vec2(5, 5));
            m_FpsGraph->setType(he::tools::FPSGraph::Type_Full);
            addToTickList(m_FpsGraph);
            m_DebugRenderer->attachToRender(m_FpsGraph);
            m_DebugRenderer->attachToRender(this);
        }
        else
        {
            HAPPYENGINE->quit();
        }
    }
    else
    {
        HAPPYENGINE->quit();
    }
}
コード例 #10
0
void SkyBox::load( const he::String& asset )
{
    HE_ASSERT(m_Drawable == nullptr, "Skybox is loaded twice!");
    m_Drawable = HENew(Drawable)();
    m_Drawable->setLocalScale(vec3(1000000000)); // bounds must be huge
    //////////////////////////////////////////////////////////////////////////
    /// Load Model
    //////////////////////////////////////////////////////////////////////////
    ModelMesh* const cube(
        ResourceFactory<gfx::ModelMesh>::getInstance()->get(ResourceFactory<gfx::ModelMesh>::getInstance()->create()));
    cube->setName(he::String("skybox-") + asset);
    he::PrimitiveList<vec3> vertices(8);
    vertices.add(vec3(-1,  1, -1));
    vertices.add(vec3( 1,  1, -1));
    vertices.add(vec3(-1, -1, -1));
    vertices.add(vec3( 1, -1, -1));

    vertices.add(vec3(-1,  1,  1));
    vertices.add(vec3( 1,  1,  1));
    vertices.add(vec3(-1, -1,  1));
    vertices.add(vec3( 1, -1,  1));

    he::PrimitiveList<uint16> indices(36);
    indices.add(0); indices.add(1); indices.add(2); //front
    indices.add(1); indices.add(3); indices.add(2);

    indices.add(5); indices.add(4); indices.add(7); //back
    indices.add(4); indices.add(6); indices.add(7);

    indices.add(4); indices.add(0); indices.add(6); //left
    indices.add(0); indices.add(2); indices.add(6);

    indices.add(1); indices.add(5); indices.add(3); //right
    indices.add(5); indices.add(7); indices.add(3);

    indices.add(4); indices.add(5); indices.add(0); //top
    indices.add(5); indices.add(1); indices.add(0);

    indices.add(3); indices.add(7); indices.add(2); //bottom
    indices.add(7); indices.add(6); indices.add(2);

    VertexLayout layout;
    layout.addElement(VertexElement(eShaderAttribute_Position, eShaderAttributeType_Float, eShaderAttributeTypeComponents_3, 0));
    cube->init(layout, MeshDrawMode_Triangles);
    cube->setVertices(&vertices[0], static_cast<uint32>(vertices.size()), MeshUsage_Static, false);
    cube->setIndices(&indices[0], static_cast<uint32>(indices.size()), IndexStride_UShort, MeshUsage_Static);
    cube->setLoaded(eLoadResult_Success);
    m_Drawable->setModelMesh(cube);
    cube->release();

    Material* const material(CONTENT->loadMaterial("engine/sky.material"));
    m_Drawable->setMaterial(material);
    material->release();

    const int8 cubeMap(m_Drawable->getMaterial()->findParameter(HEFS::strcubeMap));
    if (cubeMap >= 0)
    {
        const TextureCube* cube(CONTENT->asyncLoadTextureCube(asset));
        m_Drawable->getMaterial()->getParameter(cubeMap).setTextureCube(cube);
        cube->release();
    }
}
コード例 #11
0
RenderWidget::RenderWidget(QWidget *parent): QGLWidget(HENew(GLContextQT)(QGLFormat::defaultFormat()), parent, Sandbox::getInstance()->getSharedWidget())
{
    setAutoBufferSwap(false);
}