public void EnemyAttackInUpdate() { m_TileCardMap.AllEnemyAttack(); m_TurnState = CardChessTurnState.CharaMove; m_CurrentHoldCard = null; EnemyAttackAfterCheck(); }
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(); }
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); }
public void UIholdCheck() { RaycastHit2D hit = Physics2D.Raycast(m_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); if (hit) { m_UICard = hit.transform.GetComponent <TileCard>(); } }
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()); }
/// <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); } } }
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(); } } }
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(); } }
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; }
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); }
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); }