public bool TakeDamage(Poring ownerDamage, float damageResult, bool ignoreUltimate = false, GameObject particle = null) { if (!ignoreUltimate && damageResult != 0) { PrototypeGameMode.Instance.AddPoringCanGetUltimatePoint(this); PrototypeGameMode.Instance.AddPoringCanGetUltimatePoint(ownerDamage); } Property.CurrentHp -= damageResult; if (particle != null) { InstantiateParticleEffect.CreateFx(particle, transform.position); } if (Property.CurrentHp > 0) { Animator.Play((damageResult == 0) ? "Dodge" : "take_damage"); return(true); } else { Animator.Play("die"); if (ownerDamage != null) { ownerDamage.Property.CurrentPoint += Property.CurrentPoint / 2; ownerDamage.WinCondition += 1; } m_currentEffects.Clear(); m_currentIconEffects.ForEach(icon => Destroy(icon.image.gameObject)); m_currentIconEffects.Clear(); PrototypeGameMode.Instance.CheckEndGame(); return(false); } }
private void OnRollEnd(int index, DiceType type, Poring poring) { switch (type) { case DiceType.Move: MoveDice moveDice = m_currentPlayer.Poring.Property.MoveDices[0]; m_step = moveDice.GetNumberFromDiceFace(moveDice.GetDiceFace(index)); // Debug.LogFormat("Roll move number : {0}", number); m_cameraController.Show(CameraType.TopDown); ParseMovableNode(m_step); DisplayNodeHeat(); isSelectedNode = false; if (IsMineTurn()) { StartCoroutine(WaitForSelectNode()); } break; case DiceType.Offensive: OffensiveDice offDice = poring.Property.OffensiveDices[0]; poring.OffensiveResult += offDice.GetNumberFromDiceFace(offDice.GetDiceFace(index)); poring.OffensiveResultList.Add(index); break; case DiceType.Deffensive: DeffensiveDice defDice = poring.Property.DeffensiveDices[0]; poring.DeffensiveResult += defDice.GetNumberFromDiceFace(defDice.GetDiceFace(index)); poring.DeffensiveResultList.Add(index); break; } }
/// <summary> /// Use every time before sent result of skill. /// </summary> public List <EffectReceiver> SetEffectOwnerIdAndDamage(Poring poring) { List <EffectReceiver> resultList = new List <EffectReceiver>(); EffectsReceiver.ForEach(fx => { float d = 0; if (fx.Damage == -1) { d = ((DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; d *= DamageMultiple; } else { d = fx.Damage; } EffectReceiver result = new EffectReceiver() { OwnerId = PrototypeGameMode.Instance.GetPoringIndexByPoring(poring), Damage = d, EffectDuration = fx.EffectDuration, Status = fx.Status, Particle = fx.Particle }; resultList.Add(result); }); return(resultList); }
private void SetCurrentPlayer(Poring poring) { halo.transform.SetParent(poring.transform); halo.transform.localPosition = Vector3.zero;// new Vector3(0, 0.25f, 0); HUDController.Instance.UpdateCurrentHUD(m_currentPlayer.Index); m_currentPlayer.Poring = poring; }
private void AddDamageToTarget(Poring poring, Poring targetPoring, float damage) { if (EffectOnHit != null) { InstantiateParticleEffect.CreateFx(EffectOnHit, targetPoring.transform.localPosition); } foreach (var s in StrongerList) { if (targetPoring.CheckHasStatus(s.Status)) { damage *= s.DamageMultiple; } } bool isAlive = targetPoring.TakeDamage(poring, damage); if (isAlive) { isAlive = targetPoring.OnReceiverEffect(SetEffectOwnerIdAndDamage(poring)); } if (!isAlive) { targetPoring.Behavior.Respawn(); } }
public void AddPoringCanGetUltimatePoint(Poring poring) { if (!m_poringGetUltimate.Contains(poring)) { m_poringGetUltimate.Add(poring); poring.Property.UltimatePoint += 1; } }
private void ActivateHeal(Poring poring) { if (poring.Property.CurrentHp < poring.Property.CurrentMaxHp) { poring.Property.CurrentHp = poring.Property.CurrentMaxHp; members[poring] = 3; } }
public override void OnActivate(Poring poring, Poring targetPoring = null, Node targetNode = null, List <Node> nodeList = null) { if (targetNode == null) { targetNode = poring.Node; } PrototypeGameMode.Instance.StartCoroutine(WaitForAnimation(poring, targetNode)); }
private void WarpTo(Poring poring, Node node) { TileWarpOut o = (TileWarpOut)node.TileProperty; poring.Node.RemovePoring(poring); node.AddPoring(poring); poring.transform.position = node.transform.position; poring.Animator.Play("Warp_down"); o.WarpReceivePoring(poring, node); }
private void ChangeModeToSelectTarget(BaseSkill skill, Poring poring, int index) { isActiveSkill = true; CameraController.Instance.Show(CameraType.TopDown); gameMode.PhotonNetworkRaiseEvent(EventCode.HighlightNodeSkill, new object[] { skill.name, index }); CancelSkillBtn.onClick.RemoveAllListeners(); CancelSkillBtn.onClick.AddListener(OnClickCancelSkill); }
public override OnDefenseSkillResult OnDefense(Poring attacker, Poring poring, FaceDice faceDice) { if (faceDice == ActiveOnType && CurrentCD <= 0) { // Debug.LogError($"{poring.name} : {this.name}!!"); float damage = 0; switch (DefenseType) { case DefenseTypeResult.None: damage = 0; break; case DefenseTypeResult.Counter: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePower != null) ? maximizePower.Damage : 1; if (attacker.Node != poring.Node) { DefenseType = DefenseTypeResult.None; damage = 0; } if (poring.CheckHasStatus(SkillStatus.Blind)) { damage = 0; } break; case DefenseTypeResult.Dodge: damage = 0; break; } return(new OnDefenseSkillResult() { Type = DefenseType, DamageType = DamageType, EffectStatusResults = SetEffectOwnerIdAndDamage(poring), DamageResult = damage, EffectOnSelf = EffectOnSelf, EffectOnTarget = EffectOnHit, }); } else { return(new OnDefenseSkillResult() { Type = DefenseTypeResult.None, DamageType = DamageType, EffectStatusResults = new List <EffectReceiver>(), DamageResult = 0 }); } }
public override void OnActivate(Poring poring, Poring targetPoring = null, Node targetNode = null, List <Node> nodeList = null) { gameMode = (PrototypeGameMode)PrototypeGameMode.Instance; if (targetPoring != null || targetNode != null) { GameObject target = (targetPoring != null) ? targetPoring.gameObject : targetNode.gameObject; poring.transform.LookAt(target.transform.position); } SkillEffectActivate(poring, targetPoring, targetNode); }
public int GetPoringIndexByPoring(Poring poring) { for (int i = 0; i < m_player.Count; i++) { if (m_player[i] == poring) { return(i); } } return(-1); }
public override void OnRollEnd(int number, DiceType type, Poring poring = null) { stepWalking = number; state = DokaponGameState.plan; SetCamera(CameraType.TopDown); panelStepRemain.SetActive(true); ParseMovableNode(); DisplayNodeHeat(); bgm.ChangeVolume(0.5f); }
public void WarpReceivePoring(Poring poring, Node node) { if (PrototypeGameMode.Instance.CheckAnotherPoringInTargetNode(node)) { poring.Target = node.porings.Find(p => p != poring); poring.AttackResultIndex = Random.Range(0, 5); poring.DefendResultIndex = Random.Range(0, 5); poring.Target.AttackResultIndex = Random.Range(0, 5); poring.Target.DefendResultIndex = Random.Range(0, 5); } }
public override void OnFinish(Poring poring, Node node) { var e = new EffectReceiver() { EffectDuration = 1, Status = SkillStatus.Ambursh }; InstantiateParticleEffect.CreateFx(particle, poring.transform.position); poring.OnReceiverEffect(new List <EffectReceiver>() { e }); }
public void PoringKeepValueOnTile(Poring poring, bool ignoreOnFinish = false) { EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); int value = (maximizePower != null) ? AppleList.Count / 2 : AppleList.Count; poring.Property.CurrentPoint += value; AppleList.ForEach(apple => DestroyImmediate(apple)); AppleList.Clear(); if (!ignoreOnFinish) { TileProperty.OnFinish(poring, this); } }
private float AdaptiveDefenseCalculate(float damage, Poring poring) { int result = 0; for (int i = 0; i < poring.Property.DeffensiveDices.Count; i++) { var defDice = poring.Property.DeffensiveDices[i]; int diceResult = defDice.GetNumberFromDiceFace(defDice.GetDiceFace(poring.DeffensiveResultList[i])); result = result + diceResult; } damage = damage - (damage / 100) * (result * 10); return(Mathf.Ceil(damage)); }
private void SetEventToAttackBtn(Poring poring) { AttackBtn.onClick.RemoveAllListeners(); AttackBtn.onClick.AddListener(() => { isActiveAttack = true; CameraController.Instance.Show(CameraType.TopDown); gameMode.PhotonNetworkRaiseEvent(EventCode.HighlightNodeAttack, new object[] { poring.Property.AttackRange }); SetActivePanel(false, currentPoring.Node.TileProperty.Type); CancelSkillBtn.onClick.RemoveAllListeners(); CancelSkillBtn.onClick.AddListener(OnClickCancelAttack); }); }
private void Spawn() { foreach (var player in PhotonNetwork.PlayerList) { int baseCharacterIndex = BaseCharacterIndexExtensions.GetBaseCharacterIndex(player); Poring poring = GameObject.Instantiate(m_propertyStarter[baseCharacterIndex].Prefab, StartNode.transform.position, Quaternion.identity).GetComponent <Poring>(); poring.PlayerName = player.NickName; m_player.Add(poring); StartNode.AddPoring(poring); poring.Init(m_propertyStarter[baseCharacterIndex]); } SetCurrentPlayer(m_player[0]); m_currentPlayer.Index = IndexCurrentPlayer = 0; }
private void SetSkillsEvent(List <BaseSkill> skillList, Poring poring, int index) { BaseSkill ultimateSkill = poring.Property.UltimateSkill; UltimateSkillBtn.GetComponentInChildren <Text>().text = ultimateSkill.name; UltimateSkillBtn.GetComponent <SkillDetail>().SetDetail(ultimateSkill, poring); UltimateSkillBtn.onClick.RemoveAllListeners(); UltimateSkillBtn.onClick.AddListener(() => { SetActivePanel(false, currentPoring.Node.TileProperty.Type); ChangeModeToSelectTarget(ultimateSkill, poring, index); }); BtnGroup.ForEach(group => { group.BtnObject.onClick.RemoveAllListeners(); group.BtnObject.gameObject.SetActive(false); }); for (int i = 0; i < skillList.Count; i++) { ButtonGroup group = BtnGroup[i]; BaseSkill skill = skillList[i]; skill.CurrentCD--; group.BtnName.text = skill.name; group.BtnObject.gameObject.SetActive(true); var skillDetail = group.BtnObject.gameObject.GetComponent <SkillDetail>(); skillDetail.SetDetail(skill, poring); group.BtnObject.interactable = (skill.CurrentCD <= 0 && skill.SkillMode == SkillMode.Activate); if (skill.MoveToTarget && poring.CheckHasStatus(SkillStatus.Root)) { group.BtnObject.interactable = false; } group.BtnObject.onClick.AddListener(() => { BtnGroup.ForEach(g => { g.BtnObject.interactable = false; }); UltimateSkillBtn.interactable = false; SetActivePanel(false, currentPoring.Node.TileProperty.Type); ChangeModeToSelectTarget(skill, poring, index); }); } }
private OnDefenseSkillResult CalculateDefenderDiceResult(Poring attacker, Poring poring) { OnDefenseSkillResult result = new OnDefenseSkillResult(DefenseTypeResult.None, DamageType.PAtk, 0); FaceDice faceDice = poring.Property.DeffensiveDices[0].GetDiceFace(poring.DeffensiveResultList[0]); poring.Property.SkillList.ForEach(skill => { var subResult = skill.OnDefense(attacker, poring, faceDice); if (subResult.Type != DefenseTypeResult.None) { result = subResult; } }); return(result); }
private OnAttackSkillResult CalculateAtackerDiceResult(Poring poring) { OnAttackSkillResult result = new OnAttackSkillResult(AttackTypeResult.None, DamageType.PAtk, 0); FaceDice faceDice = poring.Property.OffensiveDices[0].GetDiceFace(poring.OffensiveResultList[0]); poring.Property.SkillList.ForEach(skill => { var subResult = skill.OnAttack(poring, faceDice); if (subResult.Type != AttackTypeResult.None) { result = subResult; } }); return(result); }
public override void OnFinish(Poring poring, Node node) { PrototypeGameMode gameMode = PrototypeGameMode.Instance; List <Node> nodes = new List <Node>(); foreach (var n in gameMode.Nodes) { if (n != node && n.TileProperty.Type == TileType.WarpOut) { nodes.Add(n); } } WarpTo(poring, nodes[0]); }
public bool AddPoring(Poring poring) { poring.transform.position = transform.position; poring.Node = this; porings.Add(poring); if (porings.Count > 1 && porings[0].CheckHasStatus(SkillStatus.Ambursh) && !poring.CheckHasStatus(SkillStatus.Ambursh)) { porings[0].Animator.Play("Skill"); float damage = porings[0].Property.CurrentPAtk; damage *= porings[0].GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePower != null) ? maximizePower.Damage : 1; if (porings[0].CheckHasStatus(SkillStatus.Blind)) { damage = 0; } poring.TakeDamage(porings[0], damage, porings[0].Property.NormalAttackEffect); } TileProperty.OnEnter(poring, this); List <EffectReceiver> effectsResult = new List <EffectReceiver>(); for (int i = 0; i < effectsOnTile.Count; i++) { BaseEffectOnTile baseFx = effectsOnTile[i]; List <EffectReceiver> listEffect = baseFx.OnEnter(this); effectsResult.AddRange(listEffect); } bool isAlive = poring.OnReceiverEffect(effectsResult); if (!isAlive) { return(false); } foreach (var fx in effectsResult) { SkillStatus e = SkillStatus.Freeze | SkillStatus.Root | SkillStatus.Sleep | SkillStatus.Stun; if (fx.Status.CheckHasStatus(e)) { return(false); } } return(true); }
private void SkillEffectActivate(Poring poring, Poring targetPoring = null, Node targetNode = null) { float damageResult = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damageResult *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damageResult *= (maximizePower != null) ? maximizePower.Damage : 1; damageResult *= DamageMultiple; if (poring.CheckHasStatus(SkillStatus.Blind) && targetNode == null) { damageResult = 0; } PrototypeGameMode.Instance.StartCoroutine(WaitForAnimation(poring, damageResult, targetPoring, targetNode)); }
public override void OnEnter(Poring poring, Node node) { var e = new EffectReceiver() { OwnerId = -1, Damage = tileDamage, EffectDuration = 5, Status = SkillStatus.Posion, Particle = particle }; InstantiateParticleEffect.CreateFx(particle, poring.transform.position); poring.OnReceiverEffect(new List <EffectReceiver>() { e }); }
public void Init(BaseMonsterScriptableObject baseProperty, Poring poring) { Data.Name = baseProperty.Data.Name; Data.Attack = baseProperty.Data.Attack; Data.MaxHp = baseProperty.Data.MaxHp; Data.CurrentHp = baseProperty.Data.CurrentHp; Data.DropExp = baseProperty.Data.DropExp; Data.DropCurrency = baseProperty.Data.DropCurrency; Data.BuffEffects = baseProperty.Data.BuffEffects; Name.text = Data.Name; transform.SetParent(poring.Node.transform); transform.localPosition = Vector3.zero; poring.Node.AddMonster(this); animator.Play("Spawn"); }
public void SetDetail(BaseSkill baseSkill, Poring poring) { float d = (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; Damage = (int)((baseSkill.SkillMode == SkillMode.Activate) ? (baseSkill.DamageType == DamageType.PAtk) ? baseSkill.DamageMultiple * poring.Property.CurrentPAtk : baseSkill.DamageMultiple * poring.Property.CurrentMAtk : (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); DamageType = baseSkill.DamageType; TargetTypestr = (baseSkill.TargetType == TargetType.Another) ? "Poring" : baseSkill.TargetType.ToString(); MoveToTarget = baseSkill.MoveToTarget; AOE = baseSkill.AOEValue; Range = $"{baseSkill.MinRangeValue} - {baseSkill.MaxRangeValue}"; CD = baseSkill.TurnCD; Description = baseSkill.Description; }
private void AOESkillActivate(Poring poring, Node currentNode, int value, Node prevNode = null) { if (value > 0) { value--; foreach (var neighbor in currentNode.NeighborList) { if (neighbor.Node == prevNode) { continue; } if (neighbor.Node.TileProperty.Type != TileType.Sanctuary) { LootNodeTarget(poring, neighbor.Node); } AOESkillActivate(poring, neighbor.Node, value, currentNode); } } }