Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

The Elf Game Engine

Introduction

The Elf Game Engine (ElfGE) is a full-functional game engine based on modern C++ and OpenGL, it is cross-platform and compatible with any device that support OpenGL.

The ElfGE provide an hierarchical game object and component model, which is useful for abstraction of your game. An event-loop based logic processing system is built in our engine. We also provide rich built-in components for accelerating your development, including lighting, physics engine, collision detection, skeletal animation, particle effect, dynamic water surface, multiple material, shadow mapping and interactive UI system.

Please feel free to clone or fork this project.

Example

Here are some example for ElfGE, we built a simple FPS game using ElfGE and its built-in components. Here are our game screenshots.

eg1eg2eg3

How to Use

Requirement: cmake(>=3.6), gcc(>=5), glew, glfw3, assimp, freetype

for macOS users

we recommend use homebrew to install all dependencies

brew update
brew install cmake gcc glew glfw assimp freetype

for linux users

linux users could use apt-get or yum or pacman to install package. for example, ubuntu users could use the following commands:

sudo apt-get update
sudo apt-get install cmake libglew-dev libglfw3 libassimp-dev libfreetype6 libfreetype6-dev

After installation of all requirement packages, you can use cmake to compile our project according to our CMakeList.txt

How to Develop

Add/Change a scene

The default scene setting is located in Assets/Entry.cpp, you could just add a new scene file, and change the setting.

At runtime, using Runtime::setScene(Scene *scene) to change the scene.

Add a new component

It is easy for you to add any component. First, you should add your own component .h file and .cpp file. Then, add a class that extend class Component. There is no necessary method for your to implement in subclass. Normally, you should override start() and update() method for your purpose, and override updateGraphics() if you would like to draw sth.

Make a Scene

For any scene object, it should implement start(), update() and destroy(), you should do correct thing in these functions. For example, in start() function, you could do some initialization like createGameObject() or createComponent(), in update() function, you could translate your object using statements like obj.transform.translate(glm::vec3(1,0,0)).

The hierarchy of our components

The following graph introduce the base inheritance relation of ElfGE class

Miscellaneous

This project is a course project for Computer Graphics (Fall 2017) in Zhejiang University. please do not use this project as your homework for any course, which could be regard as plagiarism.

About

The Elf Game Engine 小精灵引擎

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages