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); }
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); }
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(); }