Esempio n. 1
0
	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);
	}
Esempio n. 2
0
    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;
    }
Esempio n. 3
0
    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;
        }
    }