Ejemplo n.º 1
0
        private void SpawnItem(SpawnItemCommand command)
        {
            if (meta.ContainsKey(command.data.id) == false)
            {
                Debug.LogError("Item not in meta.");
                return;
            }
            ItemDatam itemDatam = meta[command.data.id];
            Entity    entity    = World.EntityManager.CreateEntity(itemArchtype);
            int       id        = Bootstrap.GenerateUniqueID();

            World.EntityManager.SetComponentData(entity, new WorldItem {
                id       = id,
                data     = command.data,
                quantity = command.quantity
            });
            World.EntityManager.SetComponentData(entity, new ItemBob {
                originalPosition = command.spawnPosition
            });
            World.EntityManager.SetComponentData(entity, new Translation {
                Value = command.spawnPosition
            });
            World.EntityManager.SetComponentData(entity, new NonUniformScale {
                Value = itemDatam.model.data.scale
            });                                                                                                       // itemDatam.Value.scale * 0.5f });
            World.EntityManager.SetComponentData(entity, new Rotation {
                Value = Quaternion.Euler(0, UnityEngine.Random.Range(-180, 180), 0)
            });

            RenderMesh newRenderer = new RenderMesh();

            newRenderer.castShadows    = UnityEngine.Rendering.ShadowCastingMode.On;
            newRenderer.receiveShadows = true;
            newRenderer.mesh           = new Mesh(); //itemDatam.model.bakedMesh;
            newRenderer.material       = Bootstrap.GetVoxelMaterial();
            World.EntityManager.SetSharedComponentData(entity, newRenderer);
            WorldSpawnSystem.QueueUpdateModel(World.EntityManager, entity, id, itemDatam.model.data);
            items.Add(id, entity);
        }
Ejemplo n.º 2
0
        private bool SetCharacter(Entity entity, int id, bool isLoadingPlayer, Entity world, int metaID, int classID, int clanID, float3 position, int creatorID = 0)
        {
            if (!World.EntityManager.Exists(world))
            {
                Debug.LogError("Cannot spawn character into a non existing world.");
                return(false);
            }
            if (!World.EntityManager.HasComponent <Voxels.World>(world))
            {
                Debug.LogError("Cannot spawn character into a world without a component.");
                return(false);
            }
            if (characters.ContainsKey(id) == true)
            {
                return(false);
            }
            characters.Add(id, entity);
            if (!meta.ContainsKey(metaID))
            {
                Debug.LogError("Meta not contained: " + metaID);
                return(false);
            }
            CharacterDatam characterDatam = meta[metaID];

            // ZOXID
            World.EntityManager.SetComponentData(entity,
                                                 new ZoxID
            {
                id        = id,
                clanID    = clanID,
                creatorID = creatorID
            });
            World.EntityManager.SetComponentData(entity,
                                                 new Character
            {
                metaID = metaID
            });
            // WORLD BINDING
            int3 voxelDimensions = new int3(16, 64, 16); // float3.zero;

            if (worldSpawnSystem != null)
            {
                voxelDimensions = World.EntityManager.GetComponentData <Voxels.World>(world).voxelDimensions;
            }
            // TRANSFORMS
            World.EntityManager.SetComponentData(entity, new Translation {
                Value = position
            });
            World.EntityManager.SetComponentData(entity, new Rotation {
                Value = quaternion.identity
            });
            World.EntityManager.SetComponentData(entity, new NonUniformScale
            {
                Value = new float3(1, 1, 1)
            });
            // RENDERING
            World.EntityManager.SetSharedComponentData(entity, new RenderMesh {
                material       = Bootstrap.GetVoxelMaterial(),
                mesh           = new Mesh(),
                castShadows    = UnityEngine.Rendering.ShadowCastingMode.On,
                receiveShadows = true
            });
            float3 bodySize = new float3(0.1f, 0.1f, 0.1f);

            if (characterDatam.vox != null && !isLoadingPlayer)
            {
                bodySize = characterDatam.vox.data.GetSize();
                World.EntityManager.SetComponentData(entity, new Body {
                    size = bodySize
                });
                // this can be done in equip system
                WorldSpawnSystem.QueueUpdateModel(World.EntityManager, entity, id, characterDatam.vox.data);
            }
            World.EntityManager.SetComponentData(entity, new WorldBound {
                size            = bodySize,
                world           = world,
                voxelDimensions = voxelDimensions
            });
            World.EntityManager.SetComponentData(entity, characterDatam.stats.Clone());
            // Physics
            World.EntityManager.SetComponentData(entity, new BodyInnerForce
            {
                movementForce  = characterDatam.movementSpeed,
                movementTorque = characterDatam.turnSpeed,
                maxVelocity    = characterDatam.maxVelocity
            });
            // combat stuff
            World.EntityManager.SetComponentData(entity,
                                                 new Targeter
            {
                Value = characterDatam.behaviour.Value.seek
            });

            if (!isLoadingPlayer)
            {
                if (classID != 0)
                {
                    GiveClassSkills(id, classMeta[classID]);
                }
                else if (characterDatam.defaultClass)
                {
                    GiveClassSkills(id, characterDatam.defaultClass);
                }
            }
            Equipment equipment = new Equipment {
            };

            if (!isLoadingPlayer)
            {
                equipment.EquipBody(characterDatam.body);
                equipment.EquipGear(characterDatam.gear);
            }
            World.EntityManager.SetComponentData(entity, equipment);
            return(true);
        }
Ejemplo n.º 3
0
        private void SpawnBullets(int[] metaIDs,
                                  float3[] positions, quaternion[] rotations,
                                  int[] creatorIDs, int[] clanIDs)/*, float[] damages, float[] bulletSpeeds, )*/
        {
            NativeArray <Entity> bulletEntities = new NativeArray <Entity>(positions.Length, Allocator.Temp);

            World.EntityManager.Instantiate(bulletPrefab, bulletEntities);
            // for all bullets, set custom data using indexes entity
            float timeBegun = UnityEngine.Time.time;

            for (int i = 0; i < bulletEntities.Length; i++)
            {
                int metaID = metaIDs[i];
                // increase by character stats and skill level!
                float damage   = UnityEngine.Random.Range(meta[metaID].Value.damage.x, meta[metaID].Value.damage.y);
                float lifetime = meta[metaID].Value.lifetime; // increase by character stats
                float speed    = meta[metaID].Value.speed;    // increase by character stats
                float scale    = meta[metaID].Value.scale;    // increase by character stats

                Entity bulletEntity = bulletEntities[i];
                int    id           = Bootstrap.GenerateUniqueID();
                bullets.Add(id, bulletEntity);
                World.EntityManager.SetComponentData(bulletEntity, new ZoxID {
                    id        = id,
                    creatorID = creatorIDs[i],
                    clanID    = clanIDs[i]
                });
                // stats
                World.EntityManager.SetComponentData(bulletEntity, new Bullet {
                    damage      = damage,
                    timeStarted = timeBegun,
                    lifetime    = lifetime,
                    metaID      = metaID
                });

                // Transforms
                World.EntityManager.SetComponentData(bulletEntity, new Translation {
                    Value = positions[i]
                });
                World.EntityManager.SetComponentData(bulletEntity, new Scale {
                    Value = scale
                });                                                                             //new float3(0.33f, 0.33f, 0.33f) });
                World.EntityManager.SetComponentData(bulletEntity, new Rotation {
                    Value = rotations[i]
                });
                // rendering
                var vox = meta[metaID].model;
                World.EntityManager.SetSharedComponentData(bulletEntity,
                                                           new RenderMesh {
                    material = Bootstrap.GetVoxelMaterial(),
                    mesh     = new Mesh()//meta[metaID].model.bakedMesh
                });
                WorldSpawnSystem.QueueUpdateModel(World.EntityManager, bulletEntity, id, vox.data);

                // movement
                // divide it by mass? or just set acceleration, and mass as parameters
                if (World.EntityManager.HasComponent <BodyForce>(bulletEntity))
                {
                    World.EntityManager.SetComponentData(bulletEntity, new BodyForce {
                        velocity = new float3(0, 0, speed)
                    });
                }

                // Add particle emitter here
                if (meta[metaID].Value.particlesName != "")
                {
                    ParticlesManager.instance.PlayParticles(
                        new ParticleSpawnCommand
                    {
                        name = meta[metaID].Value.particlesName,
                        deathParticleName = meta[metaID].Value.deathParticlesName,
                        deathParticleLife = meta[metaID].Value.deathParticleLife
                    },
                        bulletEntity, World.EntityManager);
                }
            }
            bulletEntities.Dispose();
        }