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);
        }
    }
Exemple #2
0
    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;
        }
    }
Exemple #3
0
    /// <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);
    }
Exemple #4
0
 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();
        }
    }
Exemple #6
0
 public void AddPoringCanGetUltimatePoint(Poring poring)
 {
     if (!m_poringGetUltimate.Contains(poring))
     {
         m_poringGetUltimate.Add(poring);
         poring.Property.UltimatePoint += 1;
     }
 }
Exemple #7
0
 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);
    }
Exemple #10
0
    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);
    }
Exemple #11
0
    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
            });
        }
    }
Exemple #12
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);
    }
Exemple #13
0
    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);
    }
Exemple #15
0
    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);
        }
    }
Exemple #16
0
    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
        });
    }
Exemple #17
0
    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));
    }
Exemple #19
0
    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);
        });
    }
Exemple #20
0
    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;
    }
Exemple #21
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]);
    }
Exemple #25
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
        });
    }
Exemple #28
0
    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;
    }
Exemple #30
0
 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);
         }
     }
 }