// Use this for initialization void Start() { buffer_ = new ComputeBuffer(number_of_buffer_, Marshal.SizeOf(typeof(ParticleStruct))); foreach (var buffer in cs_buffer_soa_.Keys.ToList()) { cs_buffer_soa_[buffer] = new ComputeBuffer(number_of_buffer_, buffer.size); } foreach (var k in cs_kernal_name_index_map_) { k.Value.kernal_id = cs.FindKernel(k.Key); } var pData = new ParticleStruct[number_of_buffer_]; for (int i = 0; i < pData.Length; i++) { pData[i].pos = Random.insideUnitSphere; pData[i].velocity = new Vector3(); } buffer_.SetData(pData); pData = null; mat_ = new Material(rs); }
public void Click(ParticleStruct item) { if (ListObjAvail.Count == 0) { GameObject go = Instantiate(item.ParticlePrefab, CanvasPar.transform, false); go.transform.position = item.StartPos.position; item.ParObj = go; item.speed = SetUpSpeedParticle(item); item.RunBool = true; if (go.TryGetComponent(out ParticleSystem par)) { var particleMain = par.main; particleMain.startLifetime = item.time; particleMain.duration = item.time; var radialOverTime = par.velocityOverLifetime; radialOverTime.speedModifier = ParticleStruct.radialMul - item.time; par.Play(); } ParticleStruct addItem = item; ListObjPar.Add(addItem); } else { ParticleStruct itemAvail = ListObjAvail[0]; Destroy(itemAvail.ParObj); GameObject go = Instantiate(item.ParticlePrefab, CanvasPar.transform, false); go.transform.position = item.StartPos.position; item.ParObj = go; item.speed = SetUpSpeedParticle(item); item.RunBool = true; if (go.TryGetComponent(out ParticleSystem par)) { var particleMain = par.main; particleMain.startLifetime = item.time; particleMain.duration = item.time; var radialOverTime = par.velocityOverLifetime; radialOverTime.speedModifier = ParticleStruct.radialMul - item.time; par.Play(); } ParticleStruct addItem = item; ListObjPar.Add(addItem); ListObjAvail.Remove(ListObjAvail[0]); } }
//movement and rendering public void step() { for (int i = 0; i <= particles.Count - 1; i++) { if (particles[i].GetType() == typeof(ParticleStruct)) { ParticleStruct placeholder = (ParticleStruct)particles[i]; if (placeholder.age < maxage) { placeholder.age++; //move everything (based on max speed and strength) if (this.left != 0) { int offset = fluctCalc.Next(left - movementFluctuation, left + movementFluctuation); placeholder.x -= offset; } if (this.right != 0) { int offset = fluctCalc.Next(right - movementFluctuation, right + movementFluctuation); placeholder.x += offset; } if (this.up != 0) { int offset = fluctCalc.Next(up - movementFluctuation, up + movementFluctuation); placeholder.y -= offset; } if (this.down != 0) { int offset = fluctCalc.Next(down - movementFluctuation, down + movementFluctuation); placeholder.y += offset; } //save back changes particles[i] = placeholder; } else { killParticle(placeholder); } } } }
//------------------------------------------------------------------------- public override void load(EbPropSet prop_set) { Name = prop_set.getPropString("T_Name").get(); var prop_state = prop_set.getPropInt("I_State"); State = prop_state == null ? DataState.Default : (DataState)prop_state.get(); MapName = prop_set.getPropString("T_MapName").get(); Sprites = new List <BackgroundSpriteDataKeyStruct>(); for (int i = 1; i <= 20; ++i) { string strSprites = prop_set.getPropString("T_Sprites" + i.ToString()).get(); string[] arraySprites = strSprites.Split(';'); BackgroundSpriteDataKeyStruct backgroundSpriteDataKeyStruct = new BackgroundSpriteDataKeyStruct(); backgroundSpriteDataKeyStruct.SpriteData = EbDataMgr.Instance.getData <TbDataBackgroundSprite>(int.Parse(arraySprites[0])); backgroundSpriteDataKeyStruct.PositionX = int.Parse(arraySprites[1]); backgroundSpriteDataKeyStruct.PositionY = int.Parse(arraySprites[2]); Sprites.Add(backgroundSpriteDataKeyStruct); } AudioName = prop_set.getPropString("T_AudioName").get(); SeaStarParticle = new List <ParticleStruct>(); for (int i = 1; i <= 10; ++i) { string strSeaStarParticles = prop_set.getPropString("T_SeaStarParticle" + i.ToString()).get(); string[] arraySeaStarParticles = strSeaStarParticles.Split(';'); ParticleStruct particleStruct = new ParticleStruct(); particleStruct.TbDataParticle = EbDataMgr.Instance.getData <TbDataParticle>(int.Parse(arraySeaStarParticles[0])); particleStruct.PositionX = int.Parse(arraySeaStarParticles[1]); particleStruct.PositionY = int.Parse(arraySeaStarParticles[2]); SeaStarParticle.Add(particleStruct); } LevelRippleParticle = EbDataMgr.Instance.getData <TbDataParticle>(prop_set.getPropInt("I_LevelRippleParticle").get()); SwitchLevelAudioName = prop_set.getPropString("T_SwitchLevelAudioName").get(); }
void killParticle(ParticleStruct particle) { particles.Remove(particle); particleCt--; }
public float SetUpSpeedParticle(ParticleStruct par) { return(Vector3.Distance(par.StartPos.position, par.EndPos.position) / (par.time + Time.deltaTime)); }
//------------------------------------------------------------------------- public override void load(EbPropSet prop_set) { Name = prop_set.getPropString("T_Name").get(); var prop_state = prop_set.getPropInt("I_State"); State = prop_state == null ? DataState.Default : (DataState)prop_state.get(); MapName = prop_set.getPropString("T_MapName").get(); Sprites = new List<BackgroundSpriteDataKeyStruct>(); for (int i = 1; i <= 20; ++i) { string strSprites = prop_set.getPropString("T_Sprites" + i.ToString()).get(); string[] arraySprites = strSprites.Split(';'); BackgroundSpriteDataKeyStruct backgroundSpriteDataKeyStruct = new BackgroundSpriteDataKeyStruct(); backgroundSpriteDataKeyStruct.SpriteData = EbDataMgr.Instance.getData<TbDataBackgroundSprite>(int.Parse(arraySprites[0])); backgroundSpriteDataKeyStruct.PositionX = int.Parse(arraySprites[1]); backgroundSpriteDataKeyStruct.PositionY = int.Parse(arraySprites[2]); Sprites.Add(backgroundSpriteDataKeyStruct); } AudioName = prop_set.getPropString("T_AudioName").get(); SeaStarParticle = new List<ParticleStruct>(); for (int i = 1; i <= 10; ++i) { string strSeaStarParticles = prop_set.getPropString("T_SeaStarParticle" + i.ToString()).get(); string[] arraySeaStarParticles = strSeaStarParticles.Split(';'); ParticleStruct particleStruct = new ParticleStruct(); particleStruct.TbDataParticle = EbDataMgr.Instance.getData<TbDataParticle>(int.Parse(arraySeaStarParticles[0])); particleStruct.PositionX = int.Parse(arraySeaStarParticles[1]); particleStruct.PositionY = int.Parse(arraySeaStarParticles[2]); SeaStarParticle.Add(particleStruct); } LevelRippleParticle = EbDataMgr.Instance.getData<TbDataParticle>(prop_set.getPropInt("I_LevelRippleParticle").get()); SwitchLevelAudioName = prop_set.getPropString("T_SwitchLevelAudioName").get(); }