Exemplo n.º 1
0
    private void AddedComponents <T>() where T : struct, IComponentData
    {
        ComponentType                  componentType = ComponentType.Create <T>();
        ComponentGroup                 group         = GetComponentGroup(ComponentType.Create <SyncState>(), componentType, ComponentType.Subtractive <NetworkComponentState <T> >(), ComponentType.Create <NetworktOwner>());
        ComponentDataArray <T>         components    = group.GetComponentDataArray <T>();
        ComponentDataArray <SyncState> networkSyncStateComponents = group.GetComponentDataArray <SyncState>();
        EntityArray entities = group.GetEntityArray();

        NetworkField[] networkMemberInfos = reflectionUtility.GetFields(componentType);

        for (int i = 0; i < entities.Length; i++)
        {
            SyncState        networkSyncState = networkSyncStateComponents[i];
            NetworkComponent componentData    = new NetworkComponent {
                TypeId = reflectionUtility.GetId(componentType)
            };

            T component = components[i];
            for (int j = 0; j < networkMemberInfos.Length; j++)
            {
                componentData.Fields.Add(new ComponentField {
                    Id    = j,
                    Value = (networkMemberInfos[j] as NetworkField <T>).GetValue(component),
                });
            }


            ownNetworkSendMessageUtility.AddComponent(entities[i], networkSyncState.actorId, networkSyncState.networkId, componentData);
            AllNetworkSendMessageUtility.AddComponent(entities[i], networkSyncState.actorId, networkSyncState.networkId, componentData);

            int numberOfMembers = reflectionUtility.GetFieldsCount(componentType.GetManagedType());
            networkFactory.CreateNetworkComponentData <T>(entities[i], numberOfMembers);
            PostUpdateCommands.AddComponent(entities[i], new NetworkComponentState <T>());
        }
    }