public void UpdateBufferData(int index, ProjectileType projectileType, ProjectileData data) { if (projectileType.Index != LastAccessedProjectileTypeIndex) { LastAccessedProjectileTypeIndex = projectileType.Index; LastAccessedRenderer = IndirectRenderers[LastAccessedProjectileTypeIndex]; } LastAccessedRenderer.UpdateBufferData(projectileType.BufferIndex, data); projectileType.BufferIndex++; }
public virtual void Start() { Interval = INTERVAL; // If projectile type is not set, use default if (ProjectileType == null) { ProjectileType = ProjectileManager.Instance.GetProjectileType(0); } m_speedSlowPercent = GameplayParameters.instance.SlowDownPercent; CustomEvents.EventUtil.AddListener(CustomEventList.PARAMETER_CHANGE, OnParameterChange); CustomEvents.EventUtil.AddListener(CustomEventList.SLOW_TIME, OnSlowTime); }
void Initialize() { if (!Initialized) { // Grab a list of Projectile Types founds in assets folder "ProjectileTypes" GameObject[] projectileTypes = Resources.LoadAll <GameObject>("ProjectileTypes"); ProjectileTypes = new List <ProjectileType>(); IndirectRenderers = new Dictionary <int, IndirectRenderer>(); ProjectileTypeCounters = new Dictionary <int, ProjectileTypeCounters>(); // Process projectile types for (int n = 0; n < projectileTypes.Length; n++) { ProjectileType type = projectileTypes[n].GetComponent <ProjectileType>(); type.SetIndex(n); ProjectileTypes.Add(type); // If material is set to be a static color ensure we do not send color data to shader float isStaticFloat = type.Material.GetFloat("_StaticColor"); bool isStatic = false; if (isStaticFloat == 1) { isStatic = true; } IndirectRenderers.Add(n, new IndirectRenderer(type.MaxProjectileCount, type.Material, type.Mesh, isStatic)); ProjectileTypeCounters.Add(n, new ProjectileTypeCounters()); } EmittersArray = new ProjectileEmitterBase[MaxEmitters]; // Get a list of all emitters in the scene RegisterEmitters(); CustomEvents.EventUtil.AddListener(CustomEventList.GAME_PAUSED, OnGamePause); Initialized = true; } }