Exemple #1
0
    public void DestroyEntity(ECSEntity entity)
    {
        ECSEntityData data = this.entities.GetEntityData(entity);

        var keys = data.Keys;

        Type[] types = new Type[keys.Count];
        int    count = 0;

        //TODO: improve with Type[] buffer in ECSEntityData
        foreach (Type type in keys)
        {
            types[count++] = type;
        }

        for (int i = 0; i < types.Length; i++)
        {
            Type type = types[i];

            ECSEntityIndex index = data[type];
            data.Remove(type);

            this.components.RemoveComponent(type, index);

            this.UpdateAllEntitiesWithComponent(index, type);
        }

        this.entities.DestroyEntity(entity);
    }
Exemple #2
0
    private ECSEntityIndex GetIndexByEntity <T>(int entity) where T : struct, IECSComponent
    {
        ECSEntityData data = this.entities[entity];

        Type           type  = typeof(T);
        ECSEntityIndex index = data[type];

        return(index);
    }
Exemple #3
0
    private void UpdateAllEntitiesWithComponent(ECSEntityIndex indexRemoved, Type type)
    {
        for (int i = 0; i < this.entities.Count; i++)
        {
            if (this.entities.HasComponent(i, type))
            {
                ECSEntityData  data  = this.entities[i];
                ECSEntityIndex index = data[type];

                if (index > indexRemoved)
                {
                    index--;
                    data[type] = index;
                }
            }
        }
    }