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); }
/// <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); } }
/// <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); }
/// <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); }
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); } }
//[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); }
/// <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; }
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 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); }