123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- class AnniversaryFireworksLauncherClientEvent: FireworksLauncherClientEvent
- {
- override protected int GetExplParticleFromSequence()
- {
- switch (m_Color)
- {
- case "1":
- return ParticleList.FIREWORKS_EXPLOSION_THANKS1;
- case "2":
- return ParticleList.FIREWORKS_EXPLOSION_THANKS2;
- case "3":
- return ParticleList.FIREWORKS_EXPLOSION_THANKS3;
- case "4":
- return ParticleList.FIREWORKS_EXPLOSION_THANKS4;
- case "5":
- return ParticleList.FIREWORKS_EXPLOSION_THANKS5;
- default:
- ErrorEx("Incorrect explosion particle color in the sequence");
- }
- return ParticleList.FIREWORKS_EXPLOSION_RED;
- }
-
- override protected void SetupLight(PointLightBase light)
- {
- switch (m_Color)
- {
- case "1":
- light.SetDiffuseColor(255,51,51);
- light.SetAmbientColor(255,51,51);
-
- break;
- case "2":
- light.SetDiffuseColor(0,255,128);
- light.SetAmbientColor(0,255,128);
- break;
- case "3":
- light.SetDiffuseColor(51,153,255);
- light.SetAmbientColor(51,153,255);
- break;
- case "4":
- light.SetDiffuseColor(255,255,51);
- light.SetAmbientColor(255,255,51);
- break;
- case "5":
- light.SetDiffuseColor(255,102,255);
- light.SetAmbientColor(255,102,255);
- break;
- default:
- ErrorEx("Incorrect explosion particle color in the sequence");
- }
- }
-
- override protected void SpawnSecondaryExplosion()
- {
- AnniversaryFireworksLauncherClientEventSecondary evnt = new AnniversaryFireworksLauncherClientEventSecondary(m_Item,m_Index);
- evnt.Init(GetExplosionPosition());
- evnt.OnExplode();
- m_Events.Insert(evnt);
- RequestSecondaryExplosion();
- }
- }
- //--------------------------------------------------------------------------------------
- class AnniversaryFireworksLauncherClientEventSecondary : AnniversaryFireworksLauncherClientEvent
- {
- protected vector m_ShotPos;
-
- override protected vector GetExplosionPosition()
- {
- return GetShotPos() + m_ShotDir * GetExplosionDistance();
- }
-
- void Init(vector pos)
- {
- m_ShotPos = pos;
- m_ShotDir[0] = Math.RandomFloatInclusive(-1,1);
- m_ShotDir[1] = Math.RandomFloatInclusive(-1,1);
- m_ShotDir[2] = Math.RandomFloatInclusive(-1,1);
- m_ShotDir.Normalize();
- }
- override protected vector GetShotPos()
- {
- return m_ShotPos;
- }
-
- override protected float GetExplosionDistance()
- {
- return Math.RandomFloatInclusive(10,15);
- }
-
- override void OnExplode()
- {
- GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( PlayExplosionSound, GetSoundDelay(), false);
- GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( SpawnLight, GetLightDelay(), false);
- m_ParticleExplosion = ParticleManager.GetInstance().PlayInWorld(GetExplParticleFromSequence(), GetExplosionPosition());
- }
- }
- //--------------------------------------------------------------------------------------
- class Anniversary_FireworksLauncher: FireworksLauncher
- {
- int sequence = 0;
-
- override protected void SetupColorSequences()
- {
- m_ColorSequence.Insert("1234512345123451234512345");
- }
-
- override protected FireworksLauncherClientEventBase SpawnEvent()
- {
- FireworksLauncherClientEventBase evnt = new AnniversaryFireworksLauncherClientEvent(this,m_Index);
- evnt.OnFired();
- return evnt;
- }
-
- override bool IsTakeable()
- {
- return false;
- }
-
- override bool CanSwapEntities(EntityAI otherItem, InventoryLocation otherDestination, InventoryLocation destination)
- {
- return false;
- }
-
- override bool DisableVicinityIcon()
- {
- return true;
- }
-
- override protected int GetMaxShots()
- {
- return 25;
- }
-
- override protected float GetFuseDelay()
- {
- return 1;
- }
-
- //!Called periodically but only after the entity gets ignited
- override protected void OnEventServer(int type)
- {
- m_Index++;
- DamageSystem.ExplosionDamage(this, NULL, GetAmmoType(), GetPosition(), GetDamageType());
-
- if(m_Index > 16)
- {
- sequence++;
- m_Index = 1;
- }
-
- SetSynchDirty();
- if (m_Index + (sequence*16)> GetMaxShots())
- {
- m_Index = GetMaxShots();
- m_TimerEvent = null;
- SetState(EFireworksState.FINISHED);
- }
- else
- {
- RestartEventTimer();
- }
- }
-
- }
|