public void EnemyAttackInUpdate()
 {
     m_TileCardMap.AllEnemyAttack();
     m_TurnState       = CardChessTurnState.CharaMove;
     m_CurrentHoldCard = null;
     EnemyAttackAfterCheck();
 }
示例#2
0
    public void ChangeCard(TileCard a, TileCard b)
    {
        //tilemap素组内的调整
        TileCard c = a;

        m_tileCardMap[a.m_Anchor.x, a.m_Anchor.y] = b;
        m_tileCardMap[b.m_Anchor.x, b.m_Anchor.y] = c;

        //tilecard内的anchor的调整。
        TileCardAnchor ca = a.m_Anchor;

        a.m_Anchor = b.m_Anchor;
        b.m_Anchor = ca;

        //tilecard内的currentlocation的调整。
        a.m_currentLocation = a.m_Anchor.position;
        b.m_currentLocation = b.m_Anchor.position;



        //回到具体的位置。
        a.StopMove();
        b.StopMove();

        AlltileGetSurroundCard();
    }
示例#3
0
    void SaveCardToJson(TileCard card)
    {
        string data_as_json  = JsonUtility.ToJson(card);
        string file_path     = Path.Combine(tiles_folder, card.id.ToString());
        string complete_path = Path.Combine(Application.dataPath, file_path);

        File.WriteAllText(complete_path, data_as_json);
    }
示例#4
0
    public void UIholdCheck()
    {
        RaycastHit2D hit = Physics2D.Raycast(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (hit)
        {
            m_UICard = hit.transform.GetComponent <TileCard>();
        }
    }
示例#5
0
    void Awake()
    {
        DataController dc = new DataController();
        TileCard       tc = new TileCard();

        tc.name = "Check";
        Debug.Log(tc.id.ToString());
        dc.SaveCardToJson(tc);
        tc = new TileCard();
        Debug.Log(tc.id.ToString());
        tc = dc.LoadCardFromJson("1");
        Debug.Log(tc.name + tc.id.ToString());
    }
示例#6
0
    /// <summary>
    /// 关于角色小标签部分
    /// </summary>
    public void ShowCurrentCardCheck()
    {
        m_AllInfoCards.Clear();
        RaycastHit2D hit = Physics2D.Raycast(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (hit)
        {
            TileCard tc = hit.transform.GetComponent <TileCard>();
            if (!m_AllInfoCards.Exists(t => t.transform == tc.transform))
            {
                m_AllInfoCards.Add(tc);
            }
        }
    }
示例#7
0
    private TileCard LoadCardFromJson(string name)
    {
        string   file_path     = Path.Combine(tiles_folder, name);
        string   complete_path = Path.Combine(Application.dataPath, file_path);
        TileCard tile_obj      = new TileCard();

        if (File.Exists(complete_path))
        {
            string data_as_json = File.ReadAllText(complete_path);
            return(JsonUtility.FromJson <TileCard>(data_as_json));
        }
        else
        {
            Debug.LogError("Cannot load game data!");
        }
        return(tile_obj);
    }
    public void CharaAttackInUpdate()
    {
        ///首先是屏幕显示攻击范围。设定周围的卡片都是闪光效果
        m_TileCardMap.SetFlashByChara(m_CurrentAttackCharaTile);
        //tcs.Add(NeighborCard)
        ///然后射线确定点击内容。
        ///如果是攻击范围。则发动技能。并且浸入下一个阶段。所有的敌人的一遍流程。
        ///如果不是,那么就灭有回应
        ///
        ///
        ///
        ///
        //整体初始位置
        RaycastHit2D hit = Physics2D.Raycast(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (Input.GetMouseButtonDown(0))
        {
            if (hit && hit.transform.tag == "Enemy" && hit.transform.GetComponent <TileCard>().isFlash&& hit.transform.GetComponent <TileCard>().m_IsOpen)
            {
                Debug.Log("Attack function");
                ///确认是不是能够攻击对象。
                m_CurrentAttackCharaTile.Attack(hit.transform.GetComponent <TileCard>());
                ///对对象使用应该使用的m_cuurentattackcharatile的 攻击部分。
                m_CurrentAttackCharaTile = null;
                ///跳到下一阶段
                CharaAfterAttackAnyUnMoveCard();
            }
            else if (hit && hit.transform.tag == "Item" && hit.transform.GetComponent <TileCard>().isFlash&& hit.transform.GetComponent <TileCard>().m_IsOpen)///如果碰到一张卡片,但是这张卡片没有打开。那么就跳过。
            {
                ///当前卡片交互
                m_CurrentAttackCharaTile.Interact(hit.transform.GetComponent <TileCard>());


                m_CurrentAttackCharaTile = null;
                CharaAfterAttackAnyUnMoveCard();
            }
            else if (hit && hit.transform.GetComponent <TileCard>().isFlash)
            {
                m_CurrentAttackCharaTile = null;
                CharaAfterAttackAnyUnMoveCard();
            }
        }
    }
示例#9
0
 public void SetFlashByChara(TileCard tc)///这里还可以改变,更具tc中具有的chara攻击类型,决定flash的那几个。
 {
     if (tc.m_neigbborCard.up)
     {
         tc.m_neigbborCard.up.Flash();
     }
     if (tc.m_neigbborCard.down)
     {
         tc.m_neigbborCard.down.Flash();
     }
     if (tc.m_neigbborCard.left)
     {
         tc.m_neigbborCard.left.Flash();
     }
     if (tc.m_neigbborCard.right)
     {
         tc.m_neigbborCard.right.Flash();
     }
 }
示例#10
0
    public void CalculateCardOBJFromRatio(TileCard t)
    {
        int seed = Random.Range(0, 100);
        CalculateOBJType nextType = CalculateOBJType.Empty;

        if (seed > 50)
        {
            nextType = CalculateOBJType.Coin;
        }
        else if (seed >= 0)
        {
            nextType = CalculateOBJType.Zombie;
        }
        else if (seed >= 0)
        {
            nextType = CalculateOBJType.Chara;
        }

        switch (nextType)
        {
        case CalculateOBJType.Empty:
            break;

        case CalculateOBJType.Coin:
            Item coin = new Item(m_Coin);
            t.RegistCoin(coin);
            break;

        case CalculateOBJType.Zombie:
            Enemy e = new Enemy();
            e.Copy(m_EnemyType);
            t.RegistEnemy(e);
            break;

        case CalculateOBJType.Chara:
            break;
        }


        t.m_CurrentChara = null;
    }
示例#11
0
    public void AlltileGetSurroundCard()
    {
        ///测定计算周围的卡片
        foreach (TileCard tc in m_tileCardMap)
        {
            TileCard up    = null;
            TileCard down  = null;
            TileCard left  = null;
            TileCard right = null;

            TileCardAnchor upAnchor    = new TileCardAnchor(tc.m_Anchor.x, tc.m_Anchor.y + 1);
            TileCardAnchor downAnchor  = new TileCardAnchor(tc.m_Anchor.x, tc.m_Anchor.y - 1);
            TileCardAnchor leftAnchor  = new TileCardAnchor(tc.m_Anchor.x - 1, tc.m_Anchor.y);
            TileCardAnchor rightAnchor = new TileCardAnchor(tc.m_Anchor.x + 1, tc.m_Anchor.y);

            if (upAnchor.x >= 0 && upAnchor.x < 4 && upAnchor.y >= 0 && upAnchor.y < 4)
            {
                up = m_tileCardMap[upAnchor.x, upAnchor.y];
            }

            if (downAnchor.x >= 0 && downAnchor.x < 4 && downAnchor.y >= 0 && downAnchor.y < 4)
            {
                down = m_tileCardMap[downAnchor.x, downAnchor.y];
            }

            if (leftAnchor.x >= 0 && leftAnchor.x < 4 && leftAnchor.y >= 0 && leftAnchor.y < 4)
            {
                left = m_tileCardMap[leftAnchor.x, leftAnchor.y];
            }

            if (rightAnchor.x >= 0 && rightAnchor.x < 4 && rightAnchor.y >= 0 && rightAnchor.y < 4)
            {
                right = m_tileCardMap[rightAnchor.x, rightAnchor.y];
            }

            NeighborCard nc = new NeighborCard(up, down, left, right);

            tc.StartByTileCardMangerSetNeighbor(nc);
        }
    }
 public NeighborCard(TileCard u, TileCard d, TileCard l, TileCard r)
 {
     if (u)
     {
         up = u;
         allTileCard.Add(up);
     }
     if (d)
     {
         down = d;
         allTileCard.Add(down);
     }
     if (l)
     {
         left = l;
         allTileCard.Add(left);
     }
     if (r)
     {
         right = r;
         allTileCard.Add(right);
     }
 }
    public NeighborCard(NeighborCard n)
    {
        up    = n.up;
        down  = n.down;
        left  = n.left;
        right = n.right;

        if (up)
        {
            allTileCard.Add(up);
        }
        if (down)
        {
            allTileCard.Add(down);
        }
        if (left)
        {
            allTileCard.Add(left);
        }
        if (right)
        {
            allTileCard.Add(right);
        }
    }
 /// <summary>
 /// 攻击和交互相关
 /// </summary>
 /// <param name="tileCard"></param>
 public void Attack(TileCard tileCard)
 {
     ///对tilecadr用本tilcard的角色的血量的攻击方式。
     ///应该有概率,但是我不想用了。
     m_CurrentChara.AttackEnemy(tileCard.m_CurrentEnemy);
 }
 private void Death()
 {
     m_TileCard.Cancel();
     m_TileCard = null;
     m_CharaManager.m_AllEnemy.Remove(this);
 }
示例#16
0
    private void Awake()
    {
        m_Calculate = GetComponent <TileObjCalculate>();

        for (int x = 0; x < 4; x++)
        {
            for (int y = 0; y < 4; y++)
            {
                TileCardAnchor tca = new TileCardAnchor(x, y);
                m_tileCardAnchorMap[x, y] = tca;
            }
        }

        foreach (TileCardAnchor tca in m_tileCardAnchorMap)
        {
            GameObject obj = Instantiate(m_TileCardPrefab, tca.position, transform.rotation);
            m_tileCardMap[tca.x, tca.y] = obj.GetComponent <TileCard>();
            StringBuilder sb = new StringBuilder(tca.x + "," + tca.y);
            obj.name = sb.ToString();
            obj.GetComponent <TileCard>().StartByTileCardManger(tca);
        }


        ///测定计算周围的卡片
        foreach (TileCard tc in m_tileCardMap)
        {
            TileCard up    = null;
            TileCard down  = null;
            TileCard left  = null;
            TileCard right = null;

            TileCardAnchor upAnchor    = new TileCardAnchor(tc.m_Anchor.x, tc.m_Anchor.y + 1);
            TileCardAnchor downAnchor  = new TileCardAnchor(tc.m_Anchor.x, tc.m_Anchor.y - 1);
            TileCardAnchor leftAnchor  = new TileCardAnchor(tc.m_Anchor.x - 1, tc.m_Anchor.y);
            TileCardAnchor rightAnchor = new TileCardAnchor(tc.m_Anchor.x + 1, tc.m_Anchor.y);

            if (upAnchor.x >= 0 && upAnchor.x < 4 && upAnchor.y >= 0 && upAnchor.y < 4)
            {
                up = m_tileCardMap[upAnchor.x, upAnchor.y];
            }

            if (downAnchor.x >= 0 && downAnchor.x < 4 && downAnchor.y >= 0 && downAnchor.y < 4)
            {
                down = m_tileCardMap[downAnchor.x, downAnchor.y];
            }

            if (leftAnchor.x >= 0 && leftAnchor.x < 4 && leftAnchor.y >= 0 && leftAnchor.y < 4)
            {
                left = m_tileCardMap[leftAnchor.x, leftAnchor.y];
            }

            if (rightAnchor.x >= 0 && rightAnchor.x < 4 && rightAnchor.y >= 0 && rightAnchor.y < 4)
            {
                right = m_tileCardMap[rightAnchor.x, rightAnchor.y];
            }

            NeighborCard nc = new NeighborCard(up, down, left, right);

            tc.StartByTileCardMangerSetNeighbor(nc);
        }
    }
    public void CharaMoveInUpdate()
    {
        m_CurrentMousePosition = m_camera.ScreenToWorldPoint(Input.mousePosition);

        //整体初始位置
        RaycastHit2D hit = Physics2D.Raycast(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (Input.GetMouseButtonDown(0))
        {
            m_LastMousePosition = m_camera.ScreenToWorldPoint(Input.mousePosition);
            if (hit && hit.transform.tag == "Chara" && hit.transform.GetComponent <TileCard>().m_CurrentChara.m_IsMoveFinished == false)
            {
                m_CurrentHoldCard = hit.collider.gameObject.GetComponent <TileCard>();
                m_CurrentHoldCard.StartMove();
            }
            else
            {
                m_CurrentHoldCard = null;
            }
        }


        if (m_CurrentHoldCard)
        {
            RaycastHit2D[] hit2 = Physics2D.RaycastAll(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
            foreach (RaycastHit2D r in hit2)
            {
                if (r.transform != m_CurrentHoldCard.transform)
                {
                    if (m_CurrentHoldCard.m_neigbborCard.FindInNeibor(r.transform))
                    {
                        m_CurrentChangeCard = r.transform.GetComponent <TileCard>();//再加一个检测,要保证这个新的 卡牌在原来currenthold卡牌的周围。
                        m_CurrentChangeCard.HighLight();
                    }
                    else
                    {
                        m_CurrentChangeCard = null;
                    }
                }
            }

            m_Distance = m_CurrentMousePosition - m_LastMousePosition;

            if (Input.GetMouseButton(0))
            {
                m_CurrentHoldCard.Move(m_Distance);
            }

            ///当鼠标抬起的时候,调整角色返回或者更换卡牌。
            if (Input.GetMouseButtonUp(0))
            {
                if (m_CurrentChangeCard)
                {
                    m_TileCardMap.ChangeCard(m_CurrentHoldCard, m_CurrentChangeCard);
                    m_TurnState = CardChessTurnState.CharaAttack;
                    m_CurrentAttackCharaTile = m_CurrentHoldCard;
                    ///这里的设计,让角色不影响内容…就是说,确定当前卡片已经活跃过了。这点放在卡片里面。不要放在chara类里面。因为上面还要检测。
                    m_CurrentHoldCard.m_CurrentChara.m_IsMoveFinished = true;
                    m_CurrentHoldCard = null;
                }
                else
                {
                    m_CurrentHoldCard.StopMove();
                    m_CurrentAttackCharaTile = null;
                    m_CurrentHoldCard        = null;
                }
                m_CurrentChangeCard = null;
                m_CurrentHoldCard   = null;
            }
            m_CurrentChangeCard = null;///这里的设计稍微有问题。但是影响不大。
        }
    }
 public void Interact(TileCard tileCard)
 {
     ///对tilecadr用本tilcard的角色的血量的攻击方式。
     ///应该有概率,但是我不想用了。
     m_CurrentChara.GetItem(tileCard.m_CurrentItem);
 }