public void PlaceCard(CardBehaviourScript temp) { // //Find That Card // CardBehaviourScript card = AIHandCards.Find(item => item._name == temp._name); if (card.team == CardBehaviourScript.Team.AI && AIMana - card.mana >= 0 && AITableCards.Count < 10) { AIHandCards.Remove(card); AITableCards.Add(card); Action a; a.Card1 = card._name; a.Card2 = ""; a.Hero = ""; a.OpCode = 0; Actions.Enqueue(a); card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable); if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect { card.canPlay = true; if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll) { card.AddToAll(card, false, delegate { card.Destroy(card); }); } else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies) { card.AddToEnemies(card, PlayerTableCards, false, delegate { card.Destroy(card); }); } } AIMana -= card.mana; } }
public void PlaceCard(CardBehaviourScript card) { if (card.team == CardBehaviourScript.Team.My && MyMana - card.mana >= 0 && MyTableCards.Count < 10) { //card.gameObject.transform.position = MyTablePos.position; card.GetComponent <CardBehaviourScript>().newPos = MyTablePos.position; MyHandCards.Remove(card.gameObject); MyTableCards.Add(card.gameObject); card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable); //PlaySound(cardDrop); if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect { card.canPlay = true; if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll) { card.AddToAll(card, true, delegate { card.Destroy(card); }); } else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies) { card.AddToEnemies(card, AITableCards, true, delegate { card.Destroy(card); }); } } MyMana -= card.mana; } if (card.team == CardBehaviourScript.Team.AI && AIMana - card.mana >= 0 && AITableCards.Count < 10) { //card.gameObject.transform.position = AITablePos.position; card.GetComponent <CardBehaviourScript>().newPos = AITablePos.position; AIHandCards.Remove(card.gameObject); AITableCards.Add(card.gameObject); card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable); //PlaySound(cardDrop); if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect { card.canPlay = true; if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll) { card.AddToAll(card, true, delegate { card.Destroy(card); }); } else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies) { card.AddToEnemies(card, MyTableCards, true, delegate { card.Destroy(card); }); } } AIMana -= card.mana; } TablePositionUpdate(); HandPositionUpdate(); UpdateGame(); }
}//Attack public void Destroy(CardBehaviourScript card) { if (card) { if (card.gameObject != null) { if (card.team == CardBehaviourScript.Team.My) { BoardBehaviourScript.instance.MyTableCards.Remove(card.gameObject); } else if (card.team == CardBehaviourScript.Team.AI) { BoardBehaviourScript.instance.AITableCards.Remove(card.gameObject); } //BoardBehaviourScript.instance.PlaySound(BoardBehaviourScript.instance.cardDestroy); Destroy(card.gameObject); BoardBehaviourScript.instance.TablePositionUpdate(); } } else { //card = null; } }
public void AddToDestroyList(CardBehaviourScript card) { if (cards.Contains(card)) { cardsToDestroy.Add(card); card.gameObject.SetActive(false); } }
void OnTriggerEnter(Collider Obj) { CardBehaviourScript card = Obj.GetComponent <CardBehaviourScript>(); if (card) { card.PlaceCard(); } }
}//Magic public void AddToEnemies(CardBehaviourScript magic, List <CardBehaviourScript> targets, bool addhistory, CustomAction action) { if (magic.canPlay) { foreach (var target in targets) { AddToMonster(magic, target, addhistory, delegate { }); } action(); } }//Magic
public void AddHistory(CardGameBase a, CardGameBase b) { Hashtable hash = new Hashtable(); hash.Add(a, b); boardHistory.Add(hash); currentCard = null; targetCard = null; currentHero = null; targetHero = null; }
}//Magic public void AddToMonster(CardBehaviourScript magic, CardBehaviourScript target, bool addhistory, CustomAction action) { if (magic.canPlay) { target._Attack += magic.AddedAttack; target.health += magic.AddedHealth; action(); if (addhistory) { BoardBehaviourScript.instance.AddHistory(magic, target); } } }//Magic
}//Attack public void AttackHero(CardBehaviourScript attacker, HeroBehaviourScript target, bool addhistory, CustomAction action) { if (attacker.canPlay) { target.health -= attacker._Attack; attacker.health -= target._Attack; action(); if (addhistory) { BoardBehaviourScript.instance.AddHistory(attacker, target); } } }//Attack
// Start is called before the first frame update private void Awake() { int i = UnityEngine.Random.Range(4, 6); while (i >= 0) { CardBehaviourScript card = Instantiate(cardExample); card.transform.SetParent(this.transform); card.OnDestroy += AddToDestroyList; cards.Add(card); i--; } cardsToDestroy = new List <CardBehaviourScript>(); calcCardsPosNoAnim(); }
}//Magic public void AddToAll(CardBehaviourScript magic, bool addhistory, CustomAction action) { if (magic.canPlay) { foreach (var target in BoardBehaviourScript.instance.AITableCards) { AddToMonster(magic, target.GetComponent <CardBehaviourScript>(), addhistory, delegate { }); } foreach (var target in BoardBehaviourScript.instance.MyTableCards) { AddToMonster(magic, target.GetComponent <CardBehaviourScript>(), addhistory, delegate { }); } action(); } }//Magic
public void CardAttackHero(CardBehaviourScript _attacker, HeroBehaviourScript _target) { CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name); Action a; a.Card1 = attacker._name; a.Card2 = ""; a.Hero = _target._name; a.OpCode = 2; Actions.Enqueue(a); attacker.AttackHero(attacker, PlayerHero, false, delegate { attacker.canPlay = false; }); }
private void CardMagicCard(CardBehaviourScript _attacker, CardBehaviourScript _target) { CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name); CardBehaviourScript target = PlayerTableCards.Find(item => item._name == _target._name); { Action a; a.Card1 = attacker._name; a.Card2 = target._name; a.Hero = ""; a.OpCode = 3; Actions.Enqueue(a); attacker.AddToMonster(attacker, target, false, delegate { attacker.Destroy(attacker); }); } }
public void AddToHero(CardBehaviourScript magic, HeroBehaviourScript target, CustomAction action) { if (magic.canPlay) { target._Attack += magic.AddedAttack; if (target.health + magic.AddedHealth <= 30) { target.health += magic.AddedHealth; } else { target.health = 30; } action(); BoardBehaviourScript.instance.AddHistory(magic, target); } }//Magic
public void CardAttackCard(CardBehaviourScript _attacker, CardBehaviourScript _target) { CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name); CardBehaviourScript target = PlayerTableCards.Find(item => item._name == _target._name); //if (attacker!=null&&target!=null) { Action a; a.Card1 = attacker._name; a.Card2 = target._name; a.Hero = ""; a.OpCode = 1; Actions.Enqueue(a); attacker.AttackCard(attacker, target, false, delegate { attacker.canPlay = false; }); } }
void EndTurn() { maxMana += (turnNumber - 1) % 2; if (maxMana >= 10) { maxMana = 10; } MyMana = maxMana; AIMana = maxMana; turnNumber += 1; currentCard = new CardBehaviourScript(); targetCard = new CardBehaviourScript(); currentHero = new HeroBehaviourScript(); targetHero = new HeroBehaviourScript(); foreach (GameObject card in MyTableCards) { card.GetComponent <CardBehaviourScript>().canPlay = true; } foreach (GameObject card in AITableCards) { card.GetComponent <CardBehaviourScript>().canPlay = true; } MyHero.CanAttack = true; AIHero.CanAttack = true; if (turn == Turn.AITurn) { DrawCardFromDeck(CardBehaviourScript.Team.My); turn = Turn.MyTurn; } else if (turn == Turn.MyTurn) { DrawCardFromDeck(CardBehaviourScript.Team.AI); turn = Turn.AITurn; } HandPositionUpdate(); TablePositionUpdate(); OnNewTurn(); }
void Update() { if (Input.GetMouseButtonDown(1)) { currentCard = null; targetCard = null; currentHero = null; targetHero = null; Debug.Log("Action Revet"); } //if(BoardBehaviourScript.instance.currentCard&&BoardBehaviourScript.instance.targetCard) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 250, layer)) { if (hit.transform.CompareTag("Board")) { //do whatever...... //Debug.Log(hit.point); if (BoardBehaviourScript.instance.currentHero) { drawMyLine(BoardBehaviourScript.instance.currentHero.transform.position, hit.point, Color.blue, 0.1f); } if (BoardBehaviourScript.instance.currentCard) { drawMyLine(BoardBehaviourScript.instance.currentCard.transform.position, hit.point, Color.blue, 0.1f); } } } } if (MyHero.health <= 0) { EndGame(AIHero); } if (AIHero.health <= 0) { EndGame(MyHero); } }
}//Magic public object Clone() { CardBehaviourScript temp = new CardBehaviourScript(); temp._name = _name; temp.description = this.description; temp.health = this.health; temp._Attack = this._Attack; temp.mana = this.mana; temp.canPlay = this.canPlay; temp.cardStatus = this.cardStatus; temp.cardtype = this.cardtype; temp.cardeffect = this.cardeffect; temp.AddedHealth = this.AddedHealth; temp.AddedAttack = this.AddedAttack; temp.team = this.team; temp.newPos = this.newPos; temp.distance_to_screen = this.distance_to_screen; temp.Selected = this.Selected; return(temp); }
public void AttackCard(HeroBehaviourScript attacker, CardBehaviourScript target, CustomAction action) { if (attacker.CanAttack) { target.health -= attacker._Attack; attacker.health -= target._Attack; if (target.health <= 0) { target.Destroy(target); } //if (attacker.health <= 0) //{ // BoardBehaviourScript.instance. //} action(); BoardBehaviourScript.instance.AddHistory(attacker, target); } }
void DecksPositionUpdate() { foreach (GameObject CardObject in MyDeckCards) { CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>(); if (c.cardStatus == CardBehaviourScript.CardStatus.InDeck) { c.newPos = MYDeckPos.position + new Vector3(Random.value, Random.value, Random.value); } } foreach (GameObject CardObject in AIDeckCards) { CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>(); if (c.cardStatus == CardBehaviourScript.CardStatus.InDeck) { c.newPos = AIDeckPos.position + new Vector3(Random.value, Random.value, Random.value); } } }
void Start() { foreach (GameObject CardObject in GameObject.FindGameObjectsWithTag("Card")) { CardObject.GetComponent <Rigidbody>().isKinematic = true; CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>(); if (c.team == CardBehaviourScript.Team.My) { MyDeckCards.Add(CardObject); } else { AIDeckCards.Add(CardObject); } } //Update Deck Cards Position DecksPositionUpdate(); //Update Hand Cards Position HandPositionUpdate(); //Start Game StartGame(); }
public void AttackCard(CardBehaviourScript attacker, CardBehaviourScript target, bool addhistory, CustomAction action) { if (attacker.canPlay) { target.health -= attacker._Attack; attacker.health -= target._Attack; if (target.health <= 0) { Destroy(target); } if (attacker.health <= 0) { attacker.Destroy(attacker); } action(); if (addhistory) { BoardBehaviourScript.instance.AddHistory(attacker, target); } } }//Attack
//Delete card func//////////////////////////// public void removeCardFromList(CardBehaviourScript cd) { cards.Remove(cd); calcCardsPos(); }
void RendomActions() { #region placing cards //float chanceToPlace = Random.value; if (AIHandCards.Count == 0) { EndTurn(); } else { PlaceRandomCard(CardBehaviourScript.Team.AI); } #endregion #region attacking Hashtable attacks = new Hashtable(); foreach (GameObject Card in AITableCards) { CardBehaviourScript card = Card.GetComponent <CardBehaviourScript>(); if (card.canPlay) { float changeToAttackhero = Random.value; if (changeToAttackhero < 0.50f) { card.AttackHero(card, MyHero, true, delegate { card.canPlay = false; }); } else if (MyTableCards.Count > 0) { int random = Random.Range(0, MyTableCards.Count); GameObject CardToAttack = MyTableCards[random]; attacks.Add(card, CardToAttack.GetComponent <CardBehaviourScript>()); } } } foreach (DictionaryEntry row in attacks) { CardBehaviourScript tempCard = row.Key as CardBehaviourScript; CardBehaviourScript temp2 = row.Value as CardBehaviourScript; if (tempCard.cardtype == CardBehaviourScript.CardType.Monster) { tempCard.AttackCard(tempCard, temp2, true, delegate { tempCard.canPlay = false; }); } else if (tempCard.cardtype == CardBehaviourScript.CardType.Magic) { tempCard.AddToMonster(tempCard, temp2, true, delegate { tempCard.canPlay = false; tempCard.Destroy(tempCard); }); } } #endregion }
void AIGetAttacks() { AIGameState InitialState = new AIGameState(/*MyHandCards,*/ MyTableCards, AIHandCards, AITableCards, MyHero, AIHero, maxMana, MyMana, AIMana, turn, null); InitialState.GetAllAttackingActions(AILEVEL); //Find Best Score float MaxScore = float.MinValue; AIGameState BestState = new AIGameState(); foreach (AIGameState item in AIGameState.AllStates) { if (item.State_Score > MaxScore) { MaxScore = item.State_Score; BestState = item; } } //Debug.Log("Best choice Index" + BestState.Index); int count = BestState.Actions.Count; //GetActions for (int i = 0; i < count; i++) { AIGameState.Action a; a = BestState.Actions.Dequeue(); if (a.OpCode == 1) { foreach (var item in AITableCards)//Find Card1 { if (item.GetComponent <CardBehaviourScript>()._name == a.Card1) { currentCard = item.GetComponent <CardBehaviourScript>(); break; } } foreach (var item in MyTableCards)//Find Card2 { if (item.GetComponent <CardBehaviourScript>()._name == a.Card2) { targetCard = item.GetComponent <CardBehaviourScript>(); break; } } if (currentCard != null && targetCard != null)//MakeAction { currentCard.AttackCard(currentCard, targetCard, true, delegate { currentCard.canPlay = false; }); } } else if (a.OpCode == 2) { foreach (var item in AITableCards)//Find Card1 { if (item.GetComponent <CardBehaviourScript>()._name == a.Card1) { currentCard = item.GetComponent <CardBehaviourScript>(); break; } } if (a.Hero == "MyHero") { targetHero = MyHero; } if (currentCard != null && targetHero != null) { currentCard.AttackHero(currentCard, MyHero, true, delegate { currentCard.canPlay = false; }); } } else if (a.OpCode == 3) { foreach (var item in AITableCards)//Find Card1 { if (item.GetComponent <CardBehaviourScript>()._name == a.Card1) { currentCard = item.GetComponent <CardBehaviourScript>(); break; } } foreach (var item in MyTableCards)//Find Card2 { if (item.GetComponent <CardBehaviourScript>()._name == a.Card2) { targetCard = item.GetComponent <CardBehaviourScript>(); break; } } if (currentCard != null && targetCard != null)//MakeAction { currentCard.AddToMonster(currentCard, targetCard, true, delegate { currentCard.Destroy(currentCard); }); } } } //AIGameState.AllStates=new List< AIGameState > (); }