Esempio n. 1
0
    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;
            }
        }
    }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
    private void Start()
    {
        floatingComponent = GetComponent <FloatingComponent>();
        spriteRenderer    = GetComponent <SpriteRenderer>();

        if (colour.HasValue)
        {
            spriteRenderer.material.SetColor("_Colour", colour.Value);
            spriteRenderer.material.SetFloat("_Amount", 1.0f);
        }
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
 void PickUp_Exit()
 {
     currentPickupTarget     = null;
     movement.MovementTarget = null;
 }
Esempio n. 6
0
 public void Remove(FloatingComponent component)
 {
     component.SpawnTag.ownedBySpawner = false;
     component.SpawnTag.spawnInfo.spawned.Remove(component); // Remove if added
 }