// here we get an entity conversion at runtime time, then we add this entity to the entity list, with a specific component just for this prefab :D public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) { var entityPrefabData = new Components.Prefabs.BulletAuthoring { prefabEntity = conversionSystem.GetPrimaryEntity(bulletPrefab), speed = speed, attackRange = attackRange, type = type, maxTimeInFly = maxTimeInFly }; dstManager.AddComponentData(entity, entityPrefabData); }
void ShootLinearBullet(ref Components.Prefabs.BulletAuthoring bulletAuthoring, float3 vectorToMouse, ref LocalToWorld location) { var instance = EntityManager.Instantiate(bulletAuthoring.prefabEntity); float3 vel = math.normalize(vectorToMouse) * bulletAuthoring.speed; float time = bulletAuthoring.attackRange / bulletAuthoring.speed; EntityManager.SetComponentData(instance, new Translation { Value = location.Position }); EntityManager.SetComponentData(instance, new PhysicsVelocity { Linear = vel }); EntityManager.SetComponentData(instance, new Components.LifeTime { Value = time, Counting = true }); }
void ShootParabolicBullet(ref Components.Prefabs.BulletAuthoring bulletAuthoring, float3 vectorToMouse, ref LocalToWorld location) { var instance = EntityManager.Instantiate(bulletAuthoring.prefabEntity); float distance = Vector3.Magnitude(vectorToMouse); distance = math.clamp(distance, 0, bulletAuthoring.attackRange); float timeInFly = (distance * bulletAuthoring.maxTimeInFly) / bulletAuthoring.attackRange; float horizontalSpeedMultiplier = distance / timeInFly; float3 vel = math.normalize(vectorToMouse); vel *= horizontalSpeedMultiplier; vel.y = (0.0f - location.Position.y - ((0.5f) * (Physics.gravity.y) * (math.pow(timeInFly, 2.0f)))) / timeInFly; //float time = bulletAuthoring.attackRange / Vector2.SqrMagnitude(new Vector2(vel.x, vel.z)); /* * Debug.Log(string.Format("-------\n"+ * "spawnPos:{9} vectorToMouse:{0}, targetPoint:{1}, \nhorizontalDir:{2} clampedDist:{3}, \nt:{4}, horVel:{5} \nYf:{6}, Y0:{7}, g:{8}, \nBodyVel{10}", * vectorToMouse, targetPoint,horizontalDirection,distance,timeInFly, * horizontalSpeedMultiplier, location.Position.y, 0.0f, * Physics.gravity.y, location.Position, vel)); */ EntityManager.SetComponentData(instance, new Translation { Value = location.Position }); EntityManager.SetComponentData(instance, new PhysicsVelocity { Linear = vel }); EntityManager.SetComponentData(instance, new Components.LifeTime { Value = timeInFly, Counting = true }); EntityManager.SetComponentData(instance, new PhysicsGravityFactor { Value = 1.0f }); }