private void InstantiateSnake() { Map currentMap = mapManager.GetCurrentMap(); for (int i = 0; i < snakeLength; i++) { Coord spawnPosition = new Coord(currentMap.mapCenter.x - i, currentMap.mapCenter.y); Vector3 nodeSpawnPosition = mapManager.CoordToPosition(spawnPosition); SnakeNode spawnedNode = Instantiate(nodePrefab, nodeSpawnPosition + Vector3.up * .65f, Quaternion.identity) as SnakeNode; spawnedNode.transform.localScale = Vector3.one * (1 - mapManager.outlinePercent) * mapManager.tileSize * (1 - mapManager.outlinePercent); spawnedNode.position = spawnPosition; spawnedNode.moveSpeed = snakeSpeed; spawnedNode.index = i; snakeBody.Add(spawnedNode); if (i != 0) { spawnedNode.isHead = false; spawnedNode.prevNode = snakeBody[i - 1]; } if (i == 0) { spawnedNode.isHead = true; Renderer rend = spawnedNode.GetComponent<Renderer>(); rend.sharedMaterial = headMaterial; } } ChangeSpeed(currentSpeed); }
private void Attach(SnakeNode snakeNode) { if (!firstSnakeNode) { firstSnakeNode = snakeNode; snakeNode.GetComponent <TargetFollower>().Target = snakeHead; } else { snakeNode.Next = lastSnakeNode; snakeNode.GetComponent <TargetFollower>().Target = lastSnakeNode.transform; } snakeNode.gameObject.SetActive(true); lastSnakeNode = snakeNode; snakeTail.Target = lastSnakeNode.transform; }
private void Detach() { lastSnakeNode.gameObject.SetActive(false); if (lastSnakeNode == firstSnakeNode) { Debug.Log("Last tower has been detatched."); OnLastNodeDetatched?.Invoke(); } else { lastSnakeNode = lastSnakeNode.Next; var lastSnakeNodeFollower = lastSnakeNode.GetComponent <TargetFollower>(); snakeTail.Target = lastSnakeNode.transform; snakeTail.transform.position = lastSnakeNode.transform.position + (lastSnakeNodeFollower.transform.position - lastSnakeNodeFollower.TargetPosition).normalized * 0.5f; } }