entity can be removed

This commit is contained in:
Mikulas Florek 2013-11-22 17:13:20 +01:00
parent dc97395b2c
commit 93fa2db9ed
3 changed files with 88 additions and 85 deletions

View file

@ -28,21 +28,21 @@
/// </summary>
private void InitializeComponent()
{
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin2 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient4 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient8 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient9 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient5 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient10 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient11 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient12 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient6 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient13 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient14 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -185,7 +185,6 @@
//
// removeToolStripMenuItem
//
this.removeToolStripMenuItem.Enabled = false;
this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
this.removeToolStripMenuItem.ShortcutKeyDisplayString = "";
this.removeToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q)));
@ -257,50 +256,50 @@
this.dockPanel.Location = new System.Drawing.Point(0, 24);
this.dockPanel.Name = "dockPanel";
this.dockPanel.Size = new System.Drawing.Size(1143, 602);
dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
tabGradient1.EndColor = System.Drawing.SystemColors.Control;
tabGradient1.StartColor = System.Drawing.SystemColors.Control;
tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin1.TabGradient = tabGradient1;
dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
tabGradient5.EndColor = System.Drawing.SystemColors.Control;
tabGradient5.StartColor = System.Drawing.SystemColors.Control;
tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
tabGradient6.EndColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient6.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
tabGradient7.EndColor = System.Drawing.Color.Transparent;
tabGradient7.StartColor = System.Drawing.Color.Transparent;
tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
this.dockPanel.Skin = dockPanelSkin1;
dockPanelGradient4.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient4.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin2.DockStripGradient = dockPanelGradient4;
tabGradient8.EndColor = System.Drawing.SystemColors.Control;
tabGradient8.StartColor = System.Drawing.SystemColors.Control;
tabGradient8.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin2.TabGradient = tabGradient8;
dockPanelSkin2.AutoHideStripSkin = autoHideStripSkin2;
tabGradient9.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient9.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient9.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient2.ActiveTabGradient = tabGradient9;
dockPanelGradient5.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient5.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient2.DockStripGradient = dockPanelGradient5;
tabGradient10.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient10.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient10.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient2.InactiveTabGradient = tabGradient10;
dockPaneStripSkin2.DocumentGradient = dockPaneStripGradient2;
tabGradient11.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient11.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient11.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient11.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient2.ActiveCaptionGradient = tabGradient11;
tabGradient12.EndColor = System.Drawing.SystemColors.Control;
tabGradient12.StartColor = System.Drawing.SystemColors.Control;
tabGradient12.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient2.ActiveTabGradient = tabGradient12;
dockPanelGradient6.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient6.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient2.DockStripGradient = dockPanelGradient6;
tabGradient13.EndColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient13.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient13.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient13.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient2.InactiveCaptionGradient = tabGradient13;
tabGradient14.EndColor = System.Drawing.Color.Transparent;
tabGradient14.StartColor = System.Drawing.Color.Transparent;
tabGradient14.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient2.InactiveTabGradient = tabGradient14;
dockPaneStripSkin2.ToolWindowGradient = dockPaneStripToolWindowGradient2;
dockPanelSkin2.DockPaneStripSkin = dockPaneStripSkin2;
this.dockPanel.Skin = dockPanelSkin2;
this.dockPanel.TabIndex = 0;
//
// MainForm

View file

@ -25,10 +25,10 @@ Universe::~Universe()
void Universe::destroy()
{
m_free_slots.clear();
m_positions.clear();
m_rotations.clear();
m_component_list.clear();
m_first_free_slot = -1;
m_physics_scene->destroy();
delete m_physics_scene;
m_physics_scene = 0;
@ -47,7 +47,6 @@ void Universe::create(PhysicsSystem& physics_system)
Universe::Universe()
{
m_first_free_slot = -1;
m_event_manager = new EventManager;
m_event_manager->registerListener(ComponentEvent::type, this, &Universe::onEvent);
}
@ -155,22 +154,23 @@ void Entity::setRotation(const Quat& rot)
Entity Universe::createEntity()
{
if(m_first_free_slot != -1)
{
Entity e(this, m_first_free_slot);
m_first_free_slot = *(int*)(&m_positions[m_first_free_slot].x);
m_positions[e.index].set(0, 0, 0);
m_rotations[e.index].set(0, 0, 0, 1);
m_component_list[e.index].clear();
return e;
}
else
if(m_free_slots.empty())
{
m_positions.push_back(Vec3(0, 0, 0));
m_rotations.push_back(Quat(0, 0, 0, 1));
m_component_list.push_back_empty();
return Entity(this, m_positions.size() - 1);
}
else
{
Entity e(this, m_free_slots.back());
m_free_slots.pop_back();
m_positions[e.index].set(0, 0, 0);
m_rotations[e.index].set(0, 0, 0, 1);
m_component_list[e.index].clear();
return e;
}
}
@ -180,16 +180,7 @@ void Universe::destroyEntity(Entity entity)
{
m_event_manager->emitEvent(EntityDestroyedEvent(entity));
m_component_list[entity.index].clear();
if(m_first_free_slot == -1)
{
m_first_free_slot = entity.index;
*(int*)(&m_positions[entity.index].x) = -1;
}
else
{
*(int*)(&m_positions[entity.index].x) = m_first_free_slot;
m_first_free_slot = entity.index;
}
m_free_slots.push_back(entity.index);
}
}
@ -227,7 +218,6 @@ void Universe::onEvent(Event& evt)
void Universe::serialize(ISerializer& serializer)
{
serializer.serialize("first_free_slot", m_first_free_slot);
serializer.serialize("count", m_positions.size());
serializer.beginArray("positions");
for(int i = 0; i < m_positions.size(); ++i)
@ -246,12 +236,18 @@ void Universe::serialize(ISerializer& serializer)
serializer.serializeArrayItem(m_rotations[i].w);
}
serializer.endArray();
serializer.serialize("free_slot_count", m_free_slots.size());
serializer.beginArray("free_slots");
for(int i = 0; i < m_free_slots.size(); ++i)
{
serializer.serializeArrayItem(m_free_slots[i]);
}
serializer.endArray();
}
void Universe::deserialize(ISerializer& serializer)
{
serializer.deserialize("first_free_slot", m_first_free_slot);
int count;
serializer.deserialize("count", count);
m_component_list.resize(count);
@ -274,6 +270,14 @@ void Universe::deserialize(ISerializer& serializer)
serializer.deserializeArrayItem(m_rotations[i].w);
}
serializer.deserializeArrayEnd();
serializer.deserialize("free_slot_count", count);
m_free_slots.resize(count);
serializer.deserializeArrayBegin("free_slots");
for(int i = 0; i < count; ++i)
{
serializer.deserializeArrayItem(m_free_slots[i]);
}
serializer.deserializeArrayEnd();
}

View file

@ -111,8 +111,8 @@ class LUX_ENGINE_API Universe
private:
vector<Vec3> m_positions; //< entity positions
vector<Quat> m_rotations; //< entity rotations
vector<int> m_free_slots;
ComponentList m_component_list;
int m_first_free_slot;
EventManager* m_event_manager;
PhysicsScene* m_physics_scene;
};