Example #1
0
    protected void DettachNode(SnakeNode node)
    {
        if (fFirstNode == null)
        {
            return;
        }
        else if ((fFirstNode == fLastNode) &&
                 (fFirstNode == node))
        {
            fFirstNode = null;
            fLastNode  = null;
        }
        else if (fFirstNode == node)
        {
            fFirstNode             = fFirstNode.NextSibling;
            fFirstNode.PrevSibling = null;
        }
        else if (fLastNode == node)
        {
            fLastNode             = fLastNode.PrevSibling;
            fLastNode.NextSibling = null;
        }
        else
        {
            node.PrevSibling.NextSibling = node.NextSibling;
            node.NextSibling.PrevSibling = node.PrevSibling;
        }

        node.PrevSibling = null;
        node.NextSibling = null;
        fLength--;
    }
Example #2
0
        /// <summary>
        /// Release this instance.
        /// </summary>
        public void Release()
        {
            //Release Component!
            for (int i = 0; i < m_listCompoent.Count; ++i)
            {
                m_listCompoent[i].Release();
            }
            m_listCompoent.Clear();

            //release the snake, head and tail included
            SnakeNode node = m_head;

            while (node != null)
            {
                SnakeNode next = node.Next;
                EntityFactory.ReleaseEntity(node);
                node = next;
            }
            m_head = null;
            m_tail = null;

            if (m_container != null)
            {
                GameObject.Destroy(m_container);
                m_container = null;
            }

            m_context = null;
        }
Example #3
0
    private void Move(Vector3 newPos)
    {
        var previousPosition = this.transform.position;

        if (newPos.x > maxX)
        {
            newPos = new Vector3(minX, newPos.y, newPos.z);
        }
        else if (newPos.x < minX)
        {
            newPos = new Vector3(maxX, newPos.y, newPos.z);
        }
        else if (newPos.z > maxZ)
        {
            newPos = new Vector3(newPos.x, newPos.y, minZ);
        }
        else if (newPos.z < minZ)
        {
            newPos = new Vector3(newPos.x, newPos.y, maxZ);
        }

        this.transform.position = newPos;

        if (_next != null)
        {
            _next.Move(previousPosition);
        }
        else if (shouldSpawn)
        {
            shouldSpawn = false;
            //Soy el ultimo nodo y me toca spawnear otro nodo en la posición que acabo de abandonar
            this._next = Instantiate(snakeNodePrefab, previousPosition, Quaternion.identity).GetComponent <SnakeNode>();
        }
    }
Example #4
0
        private void GenNewSnakeNode()
        {
            SnakeNode snakeNode = null;

            switch (Direct)
            {
            case Direction.UP:
                snakeNode = new SnakeNode(new Point(SnakeNodes[SnakeHead]._pos.X,
                                                    SnakeNodes[SnakeHead]._pos.Y - 1));
                break;

            case Direction.DOWN:
                snakeNode = new SnakeNode(new Point(SnakeNodes[SnakeHead]._pos.X,
                                                    SnakeNodes[SnakeHead]._pos.Y + 1));
                break;

            case Direction.LEFT:
                snakeNode = new SnakeNode(new Point(SnakeNodes[SnakeHead]._pos.X - 1,
                                                    SnakeNodes[SnakeHead]._pos.Y));
                break;

            case Direction.RIGHT:
                snakeNode = new SnakeNode(new Point(SnakeNodes[SnakeHead]._pos.X + 1,
                                                    SnakeNodes[SnakeHead]._pos.Y));
                break;
            }

            if (snakeNode != null)
            {
                SnakeNodes.Insert(0, snakeNode);
                myCanvas.Children.Add(SnakeNodes[0]._rect);
            }
        }
Example #5
0
        protected override void Create(EntityObject entity)
        {
            m_entity  = entity as SnakeNode;
            m_context = GameManager.Instance.Context;
            m_visible = true;

            m_renderer = this.GetComponent <SpriteRenderer>();
            if (m_renderer == null)
            {
                m_renderer = this.GetComponentInChildren <SpriteRenderer>();
            }

            if (m_renderer != null)
            {
                m_renderer.enabled = true;
                m_renderer.color   = m_context.GetUniqueColor(m_entity.TeamId);
                if (m_entity.Index > 0)
                {
                    m_renderer.sortingOrder = 10000 - m_entity.Index;
                }
                else
                {
                    if (m_entity is SnakeTail)
                    {
                        m_renderer.sortingOrder = 0;
                    }
                    else if (m_entity is SnakeHead)
                    {
                        m_renderer.sortingOrder = 10000;
                    }
                }
            }
        }
Example #6
0
    void Start()
    {
        restartsCount += 1;
        mapManager     = GameObject.FindObjectOfType <MapManager>();
        spawnManager   = GameObject.FindObjectOfType <SpawnManager>();

        scoreManager = GameObject.FindObjectOfType <ScoreManager>();
        scoreManager.OnScoreMilestoneReach += ScoreManager_OnScoreMilestoneReach;

        snakeManager = GameObject.FindObjectOfType <SnakeManager>();
        SnakeNode head = snakeManager.GetSnakeHead();

        head.OnObstacleCollision    += Head_OnObstacleCollision;
        head.OnOutOfBoundsCollision += Head_OnOutOfBoundsCollision;

        transitionBlack.gameObject.SetActive(false);
        transitionWhite.gameObject.SetActive(false);
        startNextLevelBtn.gameObject.SetActive(false);

        buttons = new List <Button>();
        buttons.Add(upBtn);
        buttons.Add(rightBtn);
        buttons.Add(downBtn);
        buttons.Add(leftBtn);

        if (restartsCount >= 2)
        {
            splashScreenBG.gameObject.SetActive(false);
            splashScreenBtn.gameObject.SetActive(false);
            snakeManager.gameState = GameState.Countdown;
        }
    }
Example #7
0
    private void CheckCollectableCollisions()
    {
        for (int i = 0; i < spawnManager.allActiveCollectables.Count; i++)
        {
            Collectable collectable = spawnManager.allActiveCollectables[i];
            if (this.position == collectable.position)
            {
                // TODO: Extract spawning logic in the SpawnManager
                // You may use event subscribe
                SnakeNode lastNode          = snakeManager.snakeBody[snakeManager.snakeBody.Count - 1];
                Coord     spawnPosition     = new Coord(lastNode.previousPosition.x, lastNode.previousPosition.y);
                Vector3   nodeSpawnPosition = mapManager.CoordToPosition(spawnPosition);
                SnakeNode spawnedNode       = Instantiate(snakeManager.nodePrefab, nodeSpawnPosition + Vector3.up * .65f, Quaternion.identity) as SnakeNode;
                spawnedNode.transform.localScale = Vector3.one * (1 - mapManager.outlinePercent) * mapManager.tileSize;
                spawnedNode.position             = spawnPosition;
                spawnedNode.moveSpeed            = moveSpeed;
                spawnedNode.prevNode             = lastNode;
                spawnedNode.index = lastNode.index + 1;
                snakeManager.snakeBody.Add(spawnedNode);

                spawnManager.DestroyCollectableAtPosition(collectable.position);
                spawnManager.SpawnCollectable();

                if (OnCollectableCollision != null)
                {
                    OnCollectableCollision(collectable.LootValue);
                }
            }
        }
    }
Example #8
0
    protected void AttachNodeBefore(SnakeNode before, SnakeNode node)
    {
        node.PrevSibling = null;
        node.NextSibling = before;

        if (fFirstNode == null)
        {
            fFirstNode = node;
            fLastNode  = node;
        }
        else if ((before == fFirstNode) ||
                 (before == null))
        {
            fFirstNode.PrevSibling = node;
            node.PrevSibling       = null;
            node.NextSibling       = fFirstNode;
            fFirstNode             = node;
        }
        else
        {
            node.PrevSibling = before.PrevSibling;
            node.NextSibling = before;
            before.PrevSibling.NextSibling = node;
            before.PrevSibling             = node;
        }

        fLength++;
    }
    public static SnakeController CreateSnake()
    {
        if (!prefab_snakeHead)
        {
            prefab_snakeHead = Resources.Load <SnakeNode>(PrefabsName.snakeHead);
        }
        if (!prefab_snakeNode)
        {
            prefab_snakeNode = Resources.Load <SnakeNode>(PrefabsName.snakeNode);
        }

        var snakeCtrl = new GameObject("MySnake" + Random.Range(0, 10000)).AddComponent <SnakeController>();

        if (snakeCtrl.NodeList == null)
        {
            snakeCtrl.NodeList = new List <SnakeNode>();
        }

        var   head = Instantiate(prefab_snakeHead, snakeCtrl.transform);
        float dir  = Random.Range(-180, 180);

        head.transform.localEulerAngles = new Vector3(0, 0, dir);
        head.Init();
        snakeCtrl.NodeList.Add(head);

        for (int i = 0; i < 11; i++)
        {
            snakeCtrl.CreateNode();
        }

        return(snakeCtrl);
    }
Example #10
0
    public void UpdateSnake(Node N, bool PutTail)
    {
        int HoldIndexX, HoldIndexY;
        int DesIndexX = N.getIndexX(), DesIndexY = N.getIndexY();

        foreach (SnakeNode SN in SnakeBody)
        {
            HoldIndexX = SN.getIndexX();
            HoldIndexY = SN.getIndexY();

            SN.setIndexX(DesIndexX);
            SN.setIndexY(DesIndexY);

            AC.changeNode(DesIndexX, DesIndexY, Enums.NodeState.Snake);

            DesIndexX = HoldIndexX;
            DesIndexY = HoldIndexY;
        }

        if (PutTail)
        {
            SnakeNode S = new SnakeNode();
            S.SetSnakeNode(DesIndexX, DesIndexY);
            SnakeBody.Add(S);
            AC.changeNode(DesIndexX, DesIndexY, Enums.NodeState.Snake);
        }
        else
        {
            AC.changeNode(DesIndexX, DesIndexY, Enums.NodeState.None);
        }
    }
Example #11
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);
	}
Example #12
0
    private void GenerateNewNode()
    {
        GameObject node     = GameObject.Instantiate(_snakeNodePrefab);
        SnakeNode  nodeComp = node.AddComponent <SnakeNode>();
        SnakeNode  last     = _snake[_snake.Count - 1];
        Vector3    pos      = Vector3.zero;

        switch (last.moveDir)
        {
        case MoveDir.UP:
            pos = last.transform.position + (new Vector3(0f, -SnakeNode.nodeSize, 0));
            break;

        case MoveDir.DOWN:
            pos = last.transform.position + (new Vector3(0f, SnakeNode.nodeSize, 0));
            break;

        case MoveDir.LEFT:
            pos = last.transform.position + (new Vector3(SnakeNode.nodeSize, 0f, 0));
            break;

        case MoveDir.RIGHT:
            pos = last.transform.position + (new Vector3(-SnakeNode.nodeSize, 0f, 0));
            break;
        }
        node.transform.position = pos;
        nodeComp.moveDir        = last.moveDir;
        _snake.Add(nodeComp);
    }
Example #13
0
	public void OnTurnRightBtnPress()
	{
		SnakeNode head = GetSnakeHead();
		Direction nextRightDirection = FindRightDirection(head);
		head.nextDirection = nextRightDirection;
		UnPauseSnake();
	}
Example #14
0
    protected void AttachNodeAfter(SnakeNode after, SnakeNode node)
    {
        node.PrevSibling = after;
        node.NextSibling = null;

        if (fFirstNode == null)
        {
            fFirstNode = node;
            fLastNode  = node;
        }
        else if ((after == fLastNode) ||
                 (after == null))
        {
            fLastNode.NextSibling = node;
            node.PrevSibling      = fLastNode;
            node.NextSibling      = null;
            fLastNode             = node;
        }
        else
        {
            node.PrevSibling = after;
            node.NextSibling = after.NextSibling;
            after.NextSibling.PrevSibling = node;
            after.NextSibling             = node;
        }

        fLength++;
    }
Example #15
0
    protected void AddNode()
    {
        SnakeNode new_node = fNodePool.TakeElement() as SnakeNode;

        new_node.Owner = this;
        AttachNodeBefore(null, new_node);
    }
Example #16
0
    public void AddFirst(GameObject s)
    {
        SnakeNode toAdd = new SnakeNode();

        toAdd.segment = s;
        toAdd.next    = headNode;
        headNode      = toAdd;
        Debug.Log("hoi");
    }
Example #17
0
    void OriginalSnake(Color[] colors)
    {
        snakeNode = new SnakeNode(snakePrefab, new Vector3(3, 0.5f, 0), colors[0], null);

        for (int i = 1; i < colors.Length; i++)
        {
            snakeNode.eatFood(snakeNode, colors[i], null);
        }
    }
Example #18
0
    public override IDataPool_Element ElementConstructor()
    {
        SnakeNode node = new SnakeNode();

        node.Initializer();
        node.Name = "element" + fId;
        fId++;
        return(node);
    }
Example #19
0
    void MoveNodeBefore(SnakeNode before, SnakeNode node)
    {
        if (fFirstNode == fLastNode)
        {
            return;
        }

        DettachNode(node);
        AttachNodeBefore(before, node);
    }
Example #20
0
    public void Move(SnakeNode node, Vector3 _pos)
    {
        if (node == null)
        {
            return;
        }

        Move(node.nextNode, node.snakeObj.transform.position);
        node.snakeObj.transform.position = _pos;
    }
Example #21
0
    public void Move(SnakeNode a, Vector3 _pos) //把 a 挪到 -pos的位置
    {
        if (a == null)
        {
            return;
        }

        Move(a.nextNode, a.snakeObj.transform.position);
        a.snakeObj.transform.position = _pos;
    }
Example #22
0
    void MoveNodeAfter(SnakeNode after, SnakeNode node)
    {
        if (fFirstNode == fLastNode)
        {
            return;
        }

        DettachNode(node);
        AttachNodeAfter(after, node);
    }
Example #23
0
    }                                   //键盘输入上下左右

    public void eatFood(SnakeNode node) //增加一节node 在最后一节的位置上增加一节
    {
        if (node.nextNode == null)
        {
            node.nextNode = new SnakeNode(snakeObj, snakeObj.transform.position);
        }
        else
        {
            eatFood(node.nextNode);
        }
    }
Example #24
0
    private void RetroSnakerStart()
    {
        GameObject node = GameObject.Instantiate(_snakeHeadPrefab);

        _snakeHead         = node.AddComponent <SnakeNode>();
        _snakeHead.moveDir = MoveDir.UP;
        _moveDir           = _snakeHead.moveDir;
        _snake.Add(_snakeHead);
        for (int i = 1; i < _startNodeCount; i++)
        {
            GenerateNewNode();
        }
    }
Example #25
0
    /* * * * Lifecycle methods * * * */

    void Awake()
    {
        // set up nodes' data
        this.head = nodes[0];
        this.head.setDirection(DIRECTION_POS_X);
        this.head.setCoordinates(4, 2, 2);
        nodes[1].setNodeBefore(nodes[0]);
        nodes[1].setDirection(DIRECTION_POS_X);
        nodes[1].setCoordinates(3, 2, 2);
        this.tail = nodes[2];
        this.tail.setNodeBefore(nodes[1]);
        this.tail.setDirection(DIRECTION_POS_X);
        this.tail.setCoordinates(2, 2, 2);
    }
Example #26
0
    //Adding a Node to the snake
    public void AddNode(Node N)
    {
        //Create new Snake node
        SnakeNode S = new SnakeNode();

        //set the node in the snake body
        S.SetSnakeNode(N.getIndexX(), N.getIndexY());

        //Add the Node
        SnakeBody.Add(S);

        //Change the ArrayNode Statue in the Main Array
        AC.changeNode(N.getIndexX(), N.getIndexY(), Enums.NodeState.Snake);
    }
Example #27
0
    ///<summary>Adds a new node to the snake for one turn, with animation if necessary.</summary>
    public void grow(float timeToMove, bool shouldMoveSmoothly)
    {
        // like the move function, but instantiates a new node as the head instead of moving the tail up
        SnakeNode newHead = Instantiate(this.snakeNodePrefab, this.head.transform.position, this.head.transform.rotation, this.gameOrigin.transform) as SnakeNode;

        newHead.setDirection(this.head.getDirection());
        newHead.setCoordinates(this.head.getCoordinates());
        this.nodes.Add(newHead);

        newHead.StartCoroutine(newHead.moveToCoordinates(this.head.coordinatesOfNextNode(), timeToMove, shouldMoveSmoothly));

        this.head.setNodeBefore(newHead);
        this.head = newHead;
    }
Example #28
0
    protected void Clear()
    {
        SnakeNode node  = fFirstNode;
        SnakeNode cache = null;

        while (node != null)
        {
            cache = node;
            node  = node.NextSibling;
            RemoveNode(cache);
        }

        fLength = 0;
    }
    //Check if the next move is good
    Node CheckAviMove()
    {
        //get the Head of the snake
        SnakeNode SN = snake.GetHead();

        int x = 0, y = 0;

        switch (MC.getMoveState())
        {
        case MoveState.up: x = -1; y = 0;
            break;

        case MoveState.down: x = 1; y = 0;
            break;

        case MoveState.left: x = 0; y = -1;
            break;

        case MoveState.right: x = 0; y = 1;
            break;
        }

        Node N = new Node();

        //make the move and trasfer it to the snake
        N.SetNode(SN.getIndexX() + x, SN.getIndexY() + y);

        if (N.getIndexX() < 0)
        {
            N.setIndexX(Height - 1);
        }

        if (N.getIndexY() < 0)
        {
            N.setIndexY(Width - 1);
        }

        if (N.getIndexX() == Height)
        {
            N.setIndexX(0);
        }

        if (N.getIndexY() == Width)
        {
            N.setIndexY(0);
        }

        return(N);
    }
Example #30
0
 public void eatFood(SnakeNode node, Color color, Texture texture)
 {
     if (node.nextNode == null)
     {
         node.nextNode = new SnakeNode(snakeObj, snakeObj.transform.position, color, texture);
         if (texture != null)
         {
             count += 1;
         }
     }
     else
     {
         eatFood(node.nextNode, color, texture);
     }
 }