void LateUpdate() { foreach (SpawnInfo spawnInfo in spawnInfos) { if (Time.time >= spawnInfo.nextSpawn && spawnInfo.spawned.Count < spawnInfo.maxSpawned) { GameObject prefab = RandomExtensions.RandomElement(spawnInfo.prefabs); // TODO: Set position properly so it doesn't spawn inside the camera's view Vector2 position = RandomExtensions.RandomInsideBounds(spawnBounds); GameObject instance = Instantiate(prefab, position, Quaternion.identity); FloatingComponent component = instance.GetComponent <FloatingComponent>(); component.SpawnTag = new SpawnTag() { spawnInfo = spawnInfo, spawner = this }; // Note, after instantiating this object, start won't be called until next frame. To prevent other objects from running // into trouble trying to use a non-initialised floating component, the script execution of the spawner is set to be after // everything else. // Add as spawned by this spawner Add(component); spawnInfo.nextSpawn = Time.time + spawnInfo.spawnRate; } } }
public void Add(FloatingComponent component) { component.SpawnTag.ownedBySpawner = true; if (!component.SpawnTag.spawnInfo.spawned.Contains(component)) { // Add if this spawner doesn't already own the component component.SpawnTag.spawnInfo.spawned.Add(component); } }
private void Start() { floatingComponent = GetComponent <FloatingComponent>(); spriteRenderer = GetComponent <SpriteRenderer>(); if (colour.HasValue) { spriteRenderer.material.SetColor("_Colour", colour.Value); spriteRenderer.material.SetFloat("_Amount", 1.0f); } }
bool FindNearbyFloatingComponent(out FloatingComponent bestComponent, float maxDistance) { // TODO: don't go after a bow or stern if we don't have the planks for it bestComponent = null; foreach (FloatingComponent component in componentSpawner.FindNearbySpawnedComponents(shipStructure, maxDistance)) { if (component.CompareTag("Bow") && !shipStructure.CanPickupBow) { continue; } if (component.CompareTag("Weapon") && !shipStructure.CanPickupWeapon) { continue; } if (component.CompareTag("Stern") && !shipStructure.CanPickupStern) { continue; } if (component.CompareTag("Oar") && !shipStructure.CanPickupOar) { continue; } if (!bestComponent) { bestComponent = component; } else if (component.NPCPriority > bestComponent.NPCPriority) { bestComponent = component; } } return(bestComponent != null); }
void PickUp_Exit() { currentPickupTarget = null; movement.MovementTarget = null; }
public void Remove(FloatingComponent component) { component.SpawnTag.ownedBySpawner = false; component.SpawnTag.spawnInfo.spawned.Remove(component); // Remove if added }