private void CreatePhone()
    {
        //spawnNode = GetEmptyCornerNodes(_emptyNodes).First(); //TEST only
        SpawnNode spawnNode = RandomFindFarEmptyNodeFrom(5, 3, "Phone", SpawnNodeType.Connector, SpawnNodeType.CornerConnector);

        if (spawnNode == null)
        {
            spawnNode = GetFarEmptyNodeFrom(SpawnNodeType.Connector, SpawnNodeType.CornerConnector);
        }

        Vector3 pos = spawnNode.GridNode.Position;

        pos.y = _phonePrefab.position.y + 10f;
        switch (spawnNode.MainDirection)
        {
        case Direction.Up:
        case Direction.Down:
            pos.z -= 0.5f * spawnNode.MainDirection.CreateSign();
            break;

        case Direction.Left:
        case Direction.Right:
            pos.x -= 0.5f * spawnNode.MainDirection.CreateSign();
            break;
        }

        var phone = (Transform)Instantiate(_phonePrefab, pos, DirectionUtils.DirectionToQuaternion(spawnNode.MainDirection));

        phone.parent = _devices;

        //SpawnNodeType.Device  - не нужно
        CreateConnector(spawnNode, spawnNode.MainDirection);
    }
Exemple #2
0
 /// <summary>
 /// Removes the specified node from the zone.
 /// </summary>
 public void RemoveNode(SpawnNode node)
 {
     if (node)
     {
         _nodes.Remove(node);
     }
 }
 void NextEvent(EventNode node)
 {
     //tip handling
     if (node.eventType == SpawnEventType.tip)
     {
         TipNode tipNode = (TipNode)node;
         GameDataManger.manager.ShowTip(tipNode.tipNumber);
     }
     //spawn handling
     else if (node.eventType == SpawnEventType.pickup)
     {
         SpawnNode spawnNode = (SpawnNode)node;
         SpawnPickup(spawnNode.type, spawnNode.direction, spawnNode.offset, spawnNode.grav);
     }
     //wait handling
     else if (node.eventType == SpawnEventType.wait)
     {
         return;
     }
     //Affector Handling
     else if (node.eventType == SpawnEventType.affector)
     {
         AffectorNode affectorNode = (AffectorNode)node;
         SpawnAffector(affectorNode.type, affectorNode.duration, affectorNode.x, affectorNode.y);
     }
 }
Exemple #4
0
 /// <summary>
 /// Adds the specified node, allowing it to spawn enemies for this zone.
 /// </summary>
 public void AddNode(SpawnNode node)
 {
     if (node)
     {
         _nodes.Add(node);
     }
 }
    /// <summary>
    /// Получает самую дальнюю от коннекторов ноду, являющуюся соседней текущей ноде.
    /// </summary>
    private SpawnNode GetFarthestFromConnectorstNeighborNode(SpawnNode node)
    {
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        //если соседняя нода занята, то вернуть ноду с другой стороны
        if (nextItems[0].NodeType != SpawnNodeType.Empty)
        {
            return(prevItems[0]);
        }
        if (prevItems[0].NodeType != SpawnNodeType.Empty)
        {
            return(nextItems[0]);
        }

        for (int i = 0; i < nextItems.Count; i++)
        {
            if (nextItems[i].NodeType != SpawnNodeType.Connector)
            {
                return(prevItems[0]);
            }
            if (prevItems[i].NodeType != SpawnNodeType.Connector)
            {
                return(nextItems[0]);
            }
        }
        Debug.LogError("node with connector not found");
        return(null);
    }
    private void CreateConnector(SpawnNode spawnNode, Direction direction)
    {
        var startConnector_pos = spawnNode.GridNode.AstarNode.position.ToVector3();

        startConnector_pos.y = _connectorPrefab.position.y + 10f;

        switch (direction)
        {
        case Direction.Up:
        case Direction.Down:
            startConnector_pos.z -= 0.5f * direction.CreateSign();
            break;

        case Direction.Left:
        case Direction.Right:
            startConnector_pos.x -= 0.5f * direction.CreateSign();
            break;
        }

        var connector = (Transform)Instantiate(_connectorPrefab, startConnector_pos, DirectionUtils.DirectionToQuaternion(direction));

        connector.parent = SceneContainers.Connectors;

        RemoveNodeFromEmptyNodes(spawnNode, SpawnNodeType.Connector);
    }
 private void RemoveNodeFromEmptyNodes(SpawnNode node, SpawnNodeType newType)
 {
     node.NodeType = newType;
     if (newType == SpawnNodeType.Connector && node.DirectionInCover != Direction.None)
     {
         node.NodeType = SpawnNodeType.CornerConnector;
     }
     _emptyNodes.Remove(node);
 }
Exemple #8
0
    /// <summary> Spawns a "spawn" node with given parameters </summary>
    /// <param name="types"> array with the types of the spawn commands </param>
    /// <param name="names"> array with the names of the spawn commands </param>
    public void Spawn_SpawnNode(string[] types, string[] names)
    {
        SpawnNode node = Instantiate(spawn_template).GetComponent <SpawnNode>();

        node.Start_();
        Add(node);
        for (int i = 0; i < types.Length; i++)
        {
            node.Add(new SpawnInst(names[i], types[i]));
        }
    }
    private void InstantiateCover(Transform prefab, SpawnNode spawnNode)
    {
        Direction dir = spawnNode.MainDirection;

        Vector3 pos = spawnNode.GridNode.Position;

        pos.y += 0.22f;
        var cover = (Transform)Instantiate(prefab, pos, DirectionUtils.DirectionToQuaternion(dir));

        cover.parent = _furniture;

        RemoveNodeFromEmptyNodes(spawnNode, SpawnNodeType.Cover);
    }
        void Start()
        {
            var spawnNode = new SpawnNode();


            spawnNode.Add(DelayAction.Allocate(1.0f, () => Debug.Log(Time.time)));
            spawnNode.Add(DelayAction.Allocate(1.0f, () => Debug.Log(Time.time)));
            spawnNode.Add(DelayAction.Allocate(1.0f, () => Debug.Log(Time.time)));
            spawnNode.Add(DelayAction.Allocate(1.0f, () => Debug.Log(Time.time)));
            spawnNode.Add(DelayAction.Allocate(1.0f, () => Debug.Log(Time.time)));

            this.ExecuteNode(spawnNode);
        }
    private int GetNearNodeDistance(SpawnNode node, params SpawnNodeType[] types)
    {
        int distance  = 0;
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        for (int i = 0; i < nextItems.Count; i++)
        {
            distance++;
            if (nextItems[i].NodeType.In(types) || prevItems[i].NodeType.In(types))
            {
                return(distance);
            }
        }
        return(distance);
    }
Exemple #12
0
    public Token(PlayerType playerType, Transform spawnNode, Transform _tokenTransform)
    {
        tokenType                        = playerType;
        originalSpawnNode                = spawnNode;
        originalSpawnNodeComponent       = originalSpawnNode.GetComponent <SpawnNode>();
        originalSpawnNodeComponent.token = this;

        tokenTransform = _tokenTransform;
        tokenTransform.SetPositionAndRotation(originalSpawnNodeComponent.GetPosition(), Quaternion.identity);
        tokenStatus = TokenStatus.LOCKED_IN_SPAWN;

        originalScale = tokenTransform.localScale;

        tokenComponent = tokenTransform.GetComponent <TokenComponent>();
        tokenComponent.tokenInstance = this;
    }
    private void CreateCovers(int targetCount, Transform prefab)
    {
        int count       = 0;
        var cornerNodes = GetEmptyCornerNodes(_emptyNodes);

        foreach (var spawnNode in cornerNodes)
        {
            count++;
            if (count > targetCount)
            {
                return;
            }
            InstantiateCover(prefab, spawnNode);
        }

        for (int i = 0; i < targetCount; i++)
        {
            SpawnNode spawnNode = null;
            for (int j = 0; j < 100; j++)
            {
                var node = RandomUtils.GetRandomItem(_emptyNodes);
                int dist = GetNearNodeDistance(node, SpawnNodeType.Cover);
                if (dist > _nodesBetweenCorners)
                {
                    dist = GetNearNodeDistance(node, SpawnNodeType.CornerConnector);
                    if (dist > 1)
                    {
                        spawnNode = node;
                        break;
                    }
                }
            }

            if (spawnNode == null)
            {
                //Debug.LogWarning(prefab.name + ": not found node with maxCountBetweenNodes=" + _nodesBetweenCorners);
                return;
            }

            count++;
            if (count > targetCount)
            {
                return;
            }
            InstantiateCover(prefab, spawnNode);
        }
    }
Exemple #14
0
    //[UnityTest]
    public IEnumerator SpawnNodeTest()
    {
        var stopwatch = new Stopwatch();

        stopwatch.Start();

        var spawnNode = new SpawnNode();

        spawnNode.Add(DelayAction.Allocate(1, () => {  }));
        spawnNode.Add(DelayAction.Allocate(1, () => {  }));
        spawnNode.Add(DelayAction.Allocate(1, () => { stopwatch.Stop(); }));

        while (!spawnNode.Execute(Time.deltaTime))
        {
            yield return(null);
        }
        Debug.Log(stopwatch.ElapsedMilliseconds);
    }
    private SpawnNode GetNearNode(SpawnNode node, params SpawnNodeType[] types)
    {
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        for (int i = 0; i < nextItems.Count; i++)
        {
            if (nextItems[i].NodeType.In(types))
            {
                return(nextItems[i]);
            }
            if (prevItems[i].NodeType.In(types))
            {
                return(prevItems[i]);
            }
        }
        Debug.LogError("Empty node not found");
        return(null);
    }
    private void CreateComp()
    {
        SpawnNode compSpawnNode = RandomFindFarEmptyNodeFrom(5, 3, "Comp", SpawnNodeType.Connector, SpawnNodeType.CornerConnector);

        if (compSpawnNode == null)
        {
            compSpawnNode = GetFarEmptyNodeFrom(SpawnNodeType.Connector, SpawnNodeType.CornerConnector);
        }

        var compPrefab = RandomUtils.GetRandomItem(_compPrefabs);
        var comp       = (Transform)Instantiate(compPrefab, compSpawnNode.GridNode.Position, DirectionUtils.DirectionToQuaternion(compSpawnNode.MainDirection));

        comp.parent = _devices;

        RemoveNodeFromEmptyNodes(compSpawnNode, SpawnNodeType.Device);

        var       connectorSpawnNode = GetFarthestFromConnectorstNeighborNode(compSpawnNode);
        Direction connectorDir       = compSpawnNode.DirectionInCover == Direction.None ? compSpawnNode.MainDirection : connectorSpawnNode.MainDirection;

        CreateConnector(connectorSpawnNode, connectorDir);
    }
Exemple #17
0
    /// <summary>
    /// Spawns and evenly distributes the specified number of enemies over
    /// all attached SpawnNodes.
    /// </summary>
    private void SpawnEnemies(int quantity)
    {
        if (quantity <= 0)
        {
            Debug.LogError("SpawnZone's SpawnEnemy function was called with quantity paramater <= 0.");
            return;
        }

        // Split spawns evenly between all attached nodes
        int nodes = _nodes.Count;

        if (nodes > 0)
        {
            // Divide quantity up by each node
            int qtyEachNode = (int)(quantity / nodes);
            int remainder   = quantity % nodes;

            // Loop through each node and spawn enemies
            for (int i = 0; i < nodes; i++)
            {
                SpawnNode n = _nodes[i];

                int quantityForThisNode = qtyEachNode;
                if (i < remainder)
                {
                    quantityForThisNode++;
                }

                if (quantityForThisNode > 0)
                {
                    n.SpawnEnemies(quantityForThisNode);
                }
            }

            // Reset rest time
            _currentRestDuration = 0;
        }
    }
    private SpawnNode GetNearNode(SpawnNode node, params SpawnNodeType[] types)
    {
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        for (int i = 0; i < nextItems.Count; i++)
        {
            if (nextItems[i].NodeType.In(types))
                return nextItems[i];
            if (prevItems[i].NodeType.In(types))
                return prevItems[i];
        }
        Debug.LogError("Empty node not found");
        return null;
    }
Exemple #19
0
 void OnSceneLoaded(Scene scene, LoadSceneMode mode)
 {
     spawnObject = GameObject.Find("Player1_UnitGenerator").GetComponent <SpawnNode>();
 }
    private void CreateConnector(SpawnNode spawnNode, Direction direction)
    {
        var startConnector_pos = spawnNode.GridNode.AstarNode.position.ToVector3();
        startConnector_pos.y = _connectorPrefab.position.y + 10f;

        switch (direction)
        {
            case Direction.Up:
            case Direction.Down:
                startConnector_pos.z -= 0.5f*direction.CreateSign();
                break;

            case Direction.Left:
            case Direction.Right:
                startConnector_pos.x -= 0.5f * direction.CreateSign();
                break;
        }

        var connector = (Transform)Instantiate(_connectorPrefab, startConnector_pos, DirectionUtils.DirectionToQuaternion(direction));
        connector.parent = SceneContainers.Connectors;

        RemoveNodeFromEmptyNodes(spawnNode, SpawnNodeType.Connector);
    }
    private void InstantiateCover(Transform prefab, SpawnNode spawnNode)
    {
        Direction dir = spawnNode.MainDirection;

        Vector3 pos = spawnNode.GridNode.Position;
        pos.y += 0.22f;
        var cover = (Transform)Instantiate(prefab, pos, DirectionUtils.DirectionToQuaternion(dir));
        cover.parent = _furniture;

        RemoveNodeFromEmptyNodes(spawnNode, SpawnNodeType.Cover);
    }
    private int GetNearNodeDistance(SpawnNode node, params SpawnNodeType[] types)
    {
        int distance = 0;
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        for (int i = 0; i < nextItems.Count; i++)
        {
            distance++;
            if (nextItems[i].NodeType.In(types) || prevItems[i].NodeType.In(types))
                return distance;
        }
        return distance;
    }
    /// <summary>
    /// Получает самую дальнюю от коннекторов ноду, являющуюся соседней текущей ноде.
    /// </summary>
    private SpawnNode GetFarthestFromConnectorstNeighborNode(SpawnNode node)
    {
        var nextItems = ListUtils.CreateListFrom(node.Index, _allNodes);
        var prevItems = ListUtils.CreateReversedListFrom(node.Index, _allNodes);

        //если соседняя нода занята, то вернуть ноду с другой стороны
        if (nextItems[0].NodeType!= SpawnNodeType.Empty)
            return prevItems[0];
        if (prevItems[0].NodeType != SpawnNodeType.Empty)
            return nextItems[0];

        for (int i = 0; i < nextItems.Count; i++)
        {
            if (nextItems[i].NodeType != SpawnNodeType.Connector)
                return prevItems[0];
            if (prevItems[i].NodeType != SpawnNodeType.Connector)
                return nextItems[0];
        }
        Debug.LogError("node with connector not found");
        return null;
    }
 private void RemoveNodeFromEmptyNodes(SpawnNode node, SpawnNodeType newType)
 {
     node.NodeType = newType;
     if (newType == SpawnNodeType.Connector && node.DirectionInCover!=Direction.None)
         node.NodeType = SpawnNodeType.CornerConnector;
     _emptyNodes.Remove(node);
 }