Common update:
-added multiple new function to allocate template and add entity -updated README.md (complete initial version) -empty components now don't take memory -fixedd small bug with TestRunner -added many new tests (HashMap, Vector, EntityMeta, ...) -added default hashing function to HashMap -fixed critical bug with adding entities -fixed small bug with adding entity with remplacement components -added asserts into code to better bug detection -small performance improvement for events -added ComponentRef structure which contain data pointer and componentID -remove EntityID from Event structure -now events are handled before removing entiteis -fixed GDC compilation -fixed rendering of rotated sprites -added weapons as separate entities to space ship and others -added Tower enemy to SpaceInvaders demo -added Boss to SpaceInvaders demo (boss has four tower attached to it) -Boss towers shoot multiple bullets upon death -fixed critical bug with demos switching -fixed critical bug related to adding/removing entities form inside onAdd/onRemove entity callback -added animation support -added particles sypport and particles for firing and explostions, and more -multithreaded rendering now has same rendering order as singlethreaded -application automaticallu detect host CPU threads count -added upgrades to SPaceInvaders demo -fixed texture memory freeing -improved documentation -improved multithreaded performance -improve shader code -fixed registration issue -some additional performance improvements -added depth and colors to rendering parameters -jobs now has names corresponding to their systems -change execute() -> willExecute() -added EntityMeta structure to speedup getting fetching components form entity -improved multithreading rendering -added possibility tio change number of threads runtime -added bullets collision detection in SpaceInvaders demo -some CI changes -added VBO batch rendering (current default, no render mode switch yet) -fixed camera positioning calculation -fixed buffer issue with WebGL -added viewport scalling (at least 300 pixels height). Pixels are scalled if screen is bigger. -center demos gameplay area -added fullpage html template for Emscripten build -added many new sprites to atlas -fixed critical bug with CPU usage in multithreaded mode -snake render tile coresponding to body part -snake is destroyed after collision and emit some particles -added some functionality to vectors -fixed documentation issue in Manager.d -more minor code changes and cleanup
This commit is contained in:
parent
2ddb97e9ce
commit
024356df9b
62 changed files with 5918 additions and 1673 deletions
|
|
@ -1,166 +0,0 @@
|
|||
/************************************************************************************************************************
|
||||
System module.
|
||||
|
||||
Copyright: Copyright © 2018-2019, Dawid Masiukiewicz, Michał Masiukiewicz
|
||||
License: BSD 3-clause, see LICENSE file in project root folder.
|
||||
*/
|
||||
module ecs.system;
|
||||
|
||||
import ecs.entity;
|
||||
import ecs.manager;
|
||||
|
||||
/************************************************************************************************************************
|
||||
System contain data required to proper glue EntityManager with Systems.
|
||||
System callbacks:
|
||||
$(LIST
|
||||
* void onUpdate(EntitesData);
|
||||
* void onEnable()
|
||||
* void onDisable();
|
||||
* bool onBegin();
|
||||
* void onEnd();
|
||||
* void onCreate()
|
||||
* void onDestroy();
|
||||
* void onAddEntity(EntitesData);
|
||||
* void onRemoveEntity(EntitiesData);
|
||||
* void onChangeEntity(EntitiesData);
|
||||
* void handleEvent(Entity*, Event);
|
||||
)
|
||||
*/
|
||||
struct System
|
||||
{
|
||||
|
||||
/************************************************************************************************************************
|
||||
Check if system is enabled.
|
||||
*/
|
||||
export bool enabled() nothrow @nogc
|
||||
{
|
||||
return m_enabled;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Enable system. If actually it is enabled function do nothing.
|
||||
*/
|
||||
export void enable() nothrow @nogc
|
||||
{
|
||||
if (!m_enabled && m_enable)
|
||||
(cast(void function(void*) nothrow @nogc) m_enable)(m_system_pointer);
|
||||
m_enabled = true;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Disable system. If actually it is disabled function do nothing.
|
||||
*/
|
||||
export void disable() nothrow @nogc
|
||||
{
|
||||
if (m_enabled && m_disable)
|
||||
(cast(void function(void*) nothrow @nogc) m_disable)(m_system_pointer);
|
||||
m_enabled = false;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Get system priority.
|
||||
*/
|
||||
export int priority() nothrow @nogc
|
||||
{
|
||||
return m_priority;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Get system priority.
|
||||
*/
|
||||
export bool execute() nothrow @nogc
|
||||
{
|
||||
return m_execute;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Get system priority.
|
||||
*/
|
||||
export ushort id() nothrow @nogc
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
/************************************************************************************************************************
|
||||
Get system name.
|
||||
*/
|
||||
export const(char)[] name() nothrow @nogc
|
||||
{
|
||||
return cast(const(char)[]) m_name;
|
||||
}
|
||||
|
||||
package:
|
||||
|
||||
struct EventCaller
|
||||
{
|
||||
ushort id;
|
||||
void* callback;
|
||||
}
|
||||
|
||||
///should system be executed in current update?
|
||||
bool m_execute = true;
|
||||
///system id
|
||||
ushort m_id;
|
||||
///is system empty? Empty systems don't update entities, and is called once per update
|
||||
bool m_empty = false;
|
||||
|
||||
///should system update and catch events?
|
||||
bool m_enabled = false;
|
||||
///system priority
|
||||
int m_priority;
|
||||
///pointer to system implementation
|
||||
void* m_system_pointer;
|
||||
///system pass index
|
||||
int m_pass;
|
||||
|
||||
///system name
|
||||
char[] m_name;
|
||||
|
||||
///required components
|
||||
ushort[] m_components;
|
||||
///excluded components
|
||||
ushort[] m_excluded_components;
|
||||
///optional components
|
||||
ushort[] m_optional_components;
|
||||
|
||||
EntityManager.Job[] jobs;
|
||||
|
||||
//System*[] m_dependencies;
|
||||
ushort[] m_read_only_components;
|
||||
ushort[] m_modified_components;
|
||||
|
||||
EntityManager.SystemCaller* m_any_system_caller;
|
||||
|
||||
EventCaller[] m_event_callers;
|
||||
|
||||
//void function(ref EntityManager.CallData data) m_update;
|
||||
void* m_update; ///workaroud for DMD bug with upper line
|
||||
void delegate() m_update_delegate;
|
||||
|
||||
//void function(void* system_pointer) m_enable;
|
||||
//void function(void* system_pointer) m_disable;
|
||||
|
||||
//void function(void* system_pointer) m_create;
|
||||
//void function(void* system_pointer) m_destroy;
|
||||
|
||||
//void function(void* system_pointer) m_begin;
|
||||
//void function(void* system_pointer) m_end;
|
||||
|
||||
void* m_enable;
|
||||
void* m_disable;
|
||||
|
||||
void* m_create;
|
||||
void* m_destroy;
|
||||
|
||||
void* m_begin;
|
||||
void* m_end;
|
||||
|
||||
void* m_add_entity;
|
||||
void* m_remove_entity;
|
||||
void* m_change_entity;
|
||||
|
||||
//void function(ref EntityManager.CallData data) m_initialize;
|
||||
//void function(ref EntityManager.CallData data) m_deinitilize;
|
||||
void* m_initialize;
|
||||
void* m_deinitilize;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue