Example #1
0
    private IEnumerator UseSkill(string skillName, Transform character)
    {
        yield return(new WaitForSeconds(1.5f));

        character.GetComponent <CharacterAction>().SetSkill(skillName);
        var       f         = new Vector3(40.5f, 0, 34.5f);
        UnitSkill unitSkill = SkillManager.GetInstance().skillQueue.Peek().Key as UnitSkill;

        rtsCamera.FollowTarget(f);
        yield return(new WaitForSeconds(0.5f));

        unitSkill.Focus(f);

        yield return(new WaitForSeconds(0.5f));

        unitSkill.Confirm();
        yield return(new WaitUntil(() => { return unitSkill.complete == true; }));

        rtsCamera.FollowTarget(character.position);
        ChooseDirection chooseDirection = SkillManager.GetInstance().skillQueue.Peek().Key as ChooseDirection;

        yield return(null);

        chooseDirection.OnArrowHovered("right");
        yield return(new WaitForSeconds(1f));

        chooseDirection.Confirm_AI();
    }
Example #2
0
    IEnumerator useUnitSkillAI(string skillName, Unit aiUnit, Unit target)
    {
        yield return(StartCoroutine(turnToAI(aiUnit, target)));

        outline.RenderOutLine(aiUnit.transform);

        bool isSuccess = aiUnit.GetComponent <CharacterAction>().SetSkill(skillName);
        //Debug.Log("useUnitSkill=>" + skillName + "=>" + isSuccess);

        UnitSkill unitSkill = SkillManager.GetInstance().skillQueue.Peek().Key as UnitSkill;

        rtsCamera.FollowTarget(target.transform.position);
        yield return(new WaitForSeconds(0.5f));

        unitSkill.Init(aiUnit.transform);
        unitSkill.Focus(target.transform.position);

        yield return(new WaitForSeconds(0.5f));

        outline.CancelRender();
        unitSkill.Confirm();
        yield return(new WaitUntil(() => { return unitSkill.complete == true; }));

        rtsCamera.FollowTarget(aiUnit.transform.position);
        yield return(0);
    }
Example #3
0
    IEnumerator UseUnitSkillAI(string skillName, Unit aiUnit, Unit target)
    {
        yield return(StartCoroutine(AIPublicFunc.TurnToAI(aiUnit, target)));

        aiTree.outline.RenderOutLine(aiUnit.transform);

        aiUnit.GetComponent <CharacterAction>().SetSkill(skillName);

        UnitSkill unitSkill = SkillManager.GetInstance().skillQueue.Peek().Key as UnitSkill;

        aiTree.rtsCamera.FollowTarget(target.transform.position);
        yield return(new WaitForSeconds(0.5f));

        unitSkill.Init(aiUnit.transform);
        unitSkill.Focus(target.transform.position);

        yield return(new WaitForSeconds(0.5f));

        aiTree.outline.CancelRender();
        unitSkill.Confirm();
        yield return(new WaitUntil(() => { return unitSkill.complete == true; }));

        aiTree.rtsCamera.FollowTarget(aiUnit.transform.position);
        yield return(0);
    }
Example #4
0
        public void Start(IEventArgs args)
        {
            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            args.TempUse("entity", this);
            args.TempUse(name, this);

            if (createAction != null)
            {
                createAction.Act(args);
            }

            FreeData creator = (FreeData)args.GetUnit("creator");

            if (creator != null)
            {
                CreatorId = creator.Player.playerInfo.EntityId;
            }

            if (skills != null && skills.Count > 0)
            {
                skill = new UnitSkill(this);
                foreach (ISkill sk in skills)
                {
                    skill.AddSkill(sk);
                }
            }

            move.Start(fr, _entity);

            xPara.SetValue(_entity.position.Value.x);
            yPara.SetValue(_entity.position.Value.y);
            zPara.SetValue(_entity.position.Value.z);

            if (effect != null)
            {
                AutoPositionValue auto = new AutoPositionValue();
                auto.SetId(_entity.entityKey.Value.EntityId.ToString());
                auto.SetField("pos");
                effect.AddAuto(auto);

                AutoScaleValue scale = new AutoScaleValue();
                scale.SetId(_entity.entityKey.Value.EntityId.ToString());
                scale.SetField("scale");
                effect.AddAuto(scale);

                effect.SetSelector(new PosAssignSelector(_entity.position.Value.x.ToString(),
                                                         _entity.position.Value.y.ToString(), _entity.position.Value.z.ToString()));

                //Debug.LogFormat("start pos {0}", _entity.position.Value.ToString());

                effect.Act(args);
            }

            args.Resume(name);
            args.Resume("entity");
        }
Example #5
0
        public BaseGameUnit()
        {
            this.paras = new ParaList();
            this.skill = new UnitSkill(this);
            XYZPara xyz = new XYZPara();

            xyz.SetName(POSITION);
            this.paras.AddPara(xyz);
        }
Example #6
0
        public TacticWeaponLogic(int weaponId, IFreeArgs freeArgs)
        {
            _weaponConfig = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(weaponId);

            if (SharedConfig.IsServer)
            {
                _unitSkill = WeaponSkillFactory.GetSkill(weaponId);
                _freeArgs  = freeArgs as ISkillArgs;
            }
        }
Example #7
0
    private void OnButtonClick()
    {
        var btn = EventSystem.current.currentSelectedGameObject;

        dodgeSkillName = btn.name;
        dodgeSkill     = (UnitSkill)SkillManager.GetInstance().skillList.Find(s => s.EName == dodgeSkillName);
        costMP         = dodgeSkill.costMP;
        if (Check())
        {
            ShowConfirm();
        }
    }
Example #8
0
        public static UnitSkill GetSkill(int weaponId)
        {
            UnitSkill unitSkill = new UnitSkill(new WeaponFreeData(weaponId));

            if (skillDic.ContainsKey(weaponId))
            {
                List <ISkill> skills = (List <ISkill>)SerializeUtil.Clone(skillDic[weaponId]);
                for (int i = 0; i < skills.Count; i++)
                {
                    unitSkill.AddSkill(skills[i]);
                }
            }

            return(unitSkill);
        }
Example #9
0
    private void OnButtonClick()
    {
        var btn = EventSystem.current.currentSelectedGameObject;

        dodgeSkillName = btn.name;
        dodgeSkill     = (UnitSkill)SkillManager.GetInstance().skillList.Find(s => s.EName == dodgeSkillName);
        if (dodgeSkill is INinjaTool)
        {
            ((INinjaTool)dodgeSkill).SetItem(buttonRecord[btn]);
        }
        costMP = dodgeSkill.costMP;
        if (Check())
        {
            ShowConfirm(btn);
        }
    }
Example #10
0
    protected override void Update()
    {
        base.Update();

        if (aggroScript.NearFriendliesUnit.Count >= 6)
        {
            if (CurrentMana >= UnitSkill.ManaCost(SkillLevel))
            {
                Skill skill = Instantiate(this.UnitSkill, transform.position, this.UnitSkill.transform.rotation);
                skill.Faction        = this.faction;
                skill.Sender         = this;
                skill.TargetPosition = transform.position;
                CurrentMana         -= skill.ManaCost(SkillLevel);
            }
        }
    }
Example #11
0
    public void RemoveSkill(string skillID)
    {
        if (false == skills.ContainsKey(skillID))
        {
            Debug.LogWarning("can not find unit skill(skill_id:" + skillID + ")");
            return;
        }
        UnitSkill unitSkill = skills[skillID];

        unitSkill.ref_count -= 1;
        if (0 >= unitSkill.ref_count)
        {
            unitSkill.skill_data.OnDetach();
            skills.Remove(skillID);
        }
        Debug.Log("remove skill(skill_id:" + skillID + ", ref_count:" + unitSkill.ref_count + ")");
    }
Example #12
0
    public void AddSkill(Skill skill)
    {
        UnitSkill unitSkill = null;

        if (false == skills.ContainsKey(skill.meta.skill_id))
        {
            unitSkill            = new UnitSkill();
            unitSkill.skill_data = skill;
            unitSkill.ref_count  = 0;
            skill.OnAttach(this);
            skills.Add(skill.meta.skill_id, unitSkill);
        }
        else
        {
            unitSkill = skills[skill.meta.skill_id];
        }

        unitSkill.ref_count += 1;

        Debug.Log("add skill(skill_id:" + skill.meta.skill_id + ", ref_count:" + unitSkill.ref_count + ")");
    }
Example #13
0
    public override IEnumerator Execute()
    {
        Transform targetTransform = aiTree.aiTarget.transform;
        Transform unitTransform   = aiTree.aiUnit.transform;

        //Move
        if (unitTransform.position == aiTree.moveTarget)   //target position is as same as aiUnit, don't need to move
        {
            Debug.Log(aiTree.aiUnit.name + " don't need to move");
            yield return(new WaitForSeconds(0.5f));
        }
        else
        {
            //auto move forward target
            aiTree.aiUnit.GetComponent <CharacterAction>().SetSkill("Move");
            Move moveSkill = SkillManager.GetInstance().skillQueue.Peek().Key as Move;

            moveSkill.Init(unitTransform);

            //var path = aiTree.moveTarget - unitTransform.position;
            //Debug.Log(path);
            //if(path.x > 0)
            //{
            //    for (int i = 0; i < path.x; i++)
            //    {
            //        moveSkill.Focus(unitTransform.position + new Vector3(i, 0, 0));
            //        yield return new WaitForSeconds(0.1f);
            //     }
            //}
            //if(path.z > 0)
            //{
            //    for (int i = 0; i < path.z; i++)
            //    {
            //        moveSkill.Focus(unitTransform.position + new Vector3(path.x, 0, 0) + new Vector3(0, 0, i));
            //        yield return new WaitForSeconds(0.1f);
            //    }
            //}

            moveSkill.Focus(aiTree.moveTarget);
            yield return(new WaitForSeconds(0.5f));

            aiTree.outline.CancelRender();
            moveSkill.Confirm();
            yield return(new WaitUntil(() => { return moveSkill.skillState == Skill.SkillState.reset; }));
        }
        aiTree.moveRange.Delete();
        yield return(new WaitForSeconds(0.1f));

        //Use Skill
        if (aiTree.skillName != "")
        {
            yield return(StartCoroutine(AIPublicFunc.TurnToAI(aiTree.aiUnit, aiTree.aiTarget)));

            if (aiTree.outline)
            {
                aiTree.outline.RenderOutLine(unitTransform);
            }

            aiTree.aiUnit.GetComponent <CharacterAction>().SetSkill(aiTree.skillName);

            UnitSkill unitSkill = SkillManager.GetInstance().skillQueue.Peek().Key as UnitSkill;
            aiTree.rtsCamera.FollowTarget(targetTransform.position);
            yield return(new WaitForSeconds(0.5f));

            unitSkill.Init(unitTransform);

            unitSkill.Focus(targetTransform.position);

            yield return(new WaitForSeconds(0.5f));

            if (aiTree.outline)
            {
                aiTree.outline.CancelRender();
            }
            unitSkill.Confirm();
            yield return(new WaitUntil(() => { return unitSkill.complete == true; }));

            aiTree.rtsCamera.FollowTarget(unitTransform.position);
        }

        //ChooseDirection
        yield return(StartCoroutine(AIPublicFunc.TurnToAI(aiTree.aiUnit, aiTree.finalDirection)));

        //ChooseTrick

        Data = true;
        yield return(0);
    }
Example #14
0
    public void LogSkillInfo(UnitSkill unitSkill, GameObject listUI)
    {
        var costTitle     = listUI.transform.Find("SkillInfoPanel").Find("CostTitle").GetComponent <Text>();
        var effectTitle   = listUI.transform.Find("SkillInfoPanel").Find("EffectTitle").GetComponent <Text>();
        var distanceTitle = listUI.transform.Find("SkillInfoPanel").Find("DistanceTitle").GetComponent <Text>();
        var rangeTitle    = listUI.transform.Find("SkillInfoPanel").Find("RangeTitle").GetComponent <Text>();
        var durationTitle = listUI.transform.Find("SkillInfoPanel").Find("DurationTitle").GetComponent <Text>();
        var rateTitle     = listUI.transform.Find("SkillInfoPanel").Find("RateTitle").GetComponent <Text>();

        var costInfo     = listUI.transform.Find("SkillInfoPanel").Find("CostInfo").GetComponent <Text>();
        var effectInfo   = listUI.transform.Find("SkillInfoPanel").Find("EffectInfo").GetComponent <Text>();
        var distanceInfo = listUI.transform.Find("SkillInfoPanel").Find("DistanceInfo").GetComponent <Text>();
        var rangeInfo    = listUI.transform.Find("SkillInfoPanel").Find("RangeInfo").GetComponent <Text>();
        var durationInfo = listUI.transform.Find("SkillInfoPanel").Find("DurationInfo").GetComponent <Text>();
        var rateInfo     = listUI.transform.Find("SkillInfoPanel").Find("RateInfo").GetComponent <Text>();


        var skillDescription = listUI.transform.Find("DescriptionPanel").Find("SkillDescription").GetComponent <Text>();

        switch (unitSkill.skillClass)
        {
        case UnitSkill.SkillClass.ninjutsu:
            costTitle.text = "消耗查克拉";
            costInfo.text  = unitSkill.costMP.ToString();
            break;

        case UnitSkill.SkillClass.taijutsu:
            costTitle.text = "消耗体力";
            costInfo.text  = unitSkill.costHP.ToString();
            break;

        default:
            costTitle.text = "";
            costInfo.text  = "";
            break;
        }

        var skillLog = unitSkill.LogSkillEffect();

        effectTitle.text = skillLog[0];
        effectInfo.text  = skillLog[1];

        if (unitSkill.skillRange > 0)
        {
            distanceTitle.text = "距离";
            distanceInfo.text  = unitSkill.skillRange.ToString();
        }
        else
        {
            distanceTitle.text = "";
            distanceInfo.text  = "";
        }
        if (unitSkill.hoverRange >= 0 && unitSkill.skillRange > 0)
        {
            rangeTitle.text = "范围";
            rangeInfo.text  = (unitSkill.hoverRange + 1).ToString();
            switch (unitSkill.rangeType)
            {
            case UnitSkill.RangeType.common:
                rangeTitle.text += "      普通型";

                break;

            case UnitSkill.RangeType.straight:
                rangeTitle.text += "      直线型";
                break;
            }
        }
        else
        {
            rangeTitle.text = "";
            rangeInfo.text  = "";
        }

        durationTitle.text = "";
        durationInfo.text  = "";

        if (skillLog.Count == 3)
        {
            durationTitle.text = "持续回合";
            durationInfo.text  = skillLog[2];
        }

        rateTitle.text = "成功率";
        rateInfo.text  = unitSkill.skillRate + "%";
        if (listUI.transform.Find("DescriptionPanel").Find("SkillDescription").Find("SkillCombo").gameObject.activeInHierarchy)
        {
            skillDescription.text = "  " + unitSkill.CName + "\n" + unitSkill.description;
        }
        else
        {
            skillDescription.text = unitSkill.CName + "\n" + unitSkill.description;
        }
    }
Example #15
0
    private void LogSkillInfo(UnitSkill unitSkill, Transform descriptionPanel, Transform skillInfoPanel, Transform roleInfoPanel, Transform button)
    {
        //确保不出边界。
        var skillPanelRect     = descriptionPanel.parent.Find("SkillPanel").GetComponent <RectTransform>();
        var skillInfoPanelRect = skillInfoPanel.GetComponent <RectTransform>();

        var syncY = button.position.y - button.GetComponent <RectTransform>().sizeDelta.y / 2;
        var minY  = descriptionPanel.parent.position.y + skillInfoPanelRect.sizeDelta.y / 2 * skillInfoPanelRect.lossyScale.y;
        var maxY  = descriptionPanel.parent.position.y + skillPanelRect.sizeDelta.y * skillPanelRect.lossyScale.y - skillInfoPanelRect.sizeDelta.y / 2 * skillInfoPanelRect.lossyScale.y;

        float y;

        if (syncY >= maxY)
        {
            y = maxY;
        }
        else if (syncY <= minY)
        {
            y = minY;
        }
        else
        {
            y = syncY;
        }

        //Debug.Log("y:" + y + " syncY:" + syncY + " minY:" + minY);

        skillInfoPanel.position = new Vector3(skillInfoPanel.position.x, y, skillInfoPanel.position.z);

        var costTitle     = skillInfoPanel.Find("CostTitle").GetComponent <Text>();
        var effectTitle   = skillInfoPanel.Find("EffectTitle").GetComponent <Text>();
        var distanceTitle = skillInfoPanel.Find("DistanceTitle").GetComponent <Text>();
        var rangeTitle    = skillInfoPanel.Find("RangeTitle").GetComponent <Text>();
        var durationTitle = skillInfoPanel.Find("DurationTitle").GetComponent <Text>();
        var rateTitle     = skillInfoPanel.Find("RateTitle").GetComponent <Text>();

        var costInfo     = skillInfoPanel.Find("CostInfo").GetComponent <Text>();
        var effectInfo   = skillInfoPanel.Find("EffectInfo").GetComponent <Text>();
        var distanceInfo = skillInfoPanel.Find("DistanceInfo").GetComponent <Text>();
        var rangeInfo    = skillInfoPanel.Find("RangeInfo").GetComponent <Text>();
        var durationInfo = skillInfoPanel.Find("DurationInfo").GetComponent <Text>();
        var rateInfo     = skillInfoPanel.Find("RateInfo").GetComponent <Text>();


        var skillDescription = descriptionPanel.Find("SkillDescription").GetComponent <Text>();

        switch (unitSkill.skillClass)
        {
        case UnitSkill.SkillClass.ninjutsu:
            costTitle.text = "消耗查克拉";
            costInfo.text  = unitSkill.costMP.ToString();
            break;

        case UnitSkill.SkillClass.taijutsu:
            costTitle.text = "消耗体力";
            costInfo.text  = unitSkill.costHP.ToString();
            break;

        default:
            costTitle.text = "";
            costInfo.text  = "";
            break;
        }

        var skillLog = unitSkill.LogSkillEffect();

        effectTitle.text = skillLog[0];
        effectInfo.text  = skillLog[1];

        if (unitSkill.skillRange > 0)
        {
            distanceTitle.text = "距离";
            distanceInfo.text  = unitSkill.skillRange.ToString();
        }
        else
        {
            distanceTitle.text = "";
            distanceInfo.text  = "";
        }
        if (unitSkill.hoverRange >= 0 && unitSkill.skillRange > 0)
        {
            rangeTitle.text = "范围";
            rangeInfo.text  = (unitSkill.hoverRange + 1).ToString();
            switch (unitSkill.rangeType)
            {
            case UnitSkill.RangeType.common:
                rangeTitle.text += "      普通型";

                break;

            case UnitSkill.RangeType.straight:
                rangeTitle.text += "      直线型";
                break;
            }
        }
        else
        {
            rangeTitle.text = "";
            rangeInfo.text  = "";
        }

        durationTitle.text = "";
        durationInfo.text  = "";

        if (skillLog.Count == 3)
        {
            durationTitle.text = "持续回合";
            durationInfo.text  = skillLog[2];
        }

        rateTitle.text = "成功率";
        rateInfo.text  = unitSkill.skillRate + "%";

        //if (descriptionPanel.Find("SkillDescription").Find("SkillCombo").gameObject.activeInHierarchy)
        //{
        //    skillDescription.text = "  " + unitSkill.description;
        //}
        //else
        //{
        //    skillDescription.text = unitSkill.description;
        //}
        skillDescription.text = unitSkill.description;
    }
Example #16
0
 protected override bool ComboFilter(UnitSkill unitSkill)
 {
     return(unitSkill.EName == "MeatBulletTank");
 }
Example #17
0
        public void Start(IEventArgs args)
        {
            this.paras.AddFields(new ObjectFields(_entity.freeData));

            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            args.TempUse("entity", this);
            args.TempUse(name, this);

            if (createAction != null)
            {
                createAction.Act(args);
            }

            FreeData creator = (FreeData)args.GetUnit("creator");

            if (creator != null)
            {
                CreatorId = creator.Player.playerInfo.EntityId;
            }

            if (skills != null && skills.Count > 0)
            {
                skill = new UnitSkill(this);
                foreach (ISkill sk in skills)
                {
                    skill.AddSkill(sk);
                }
            }

            move.Start(fr, _entity);

            xPara.SetValue(_entity.position.Value.x);
            yPara.SetValue(_entity.position.Value.y);
            zPara.SetValue(_entity.position.Value.z);

            if (effect != null)
            {
                AutoPositionValue auto = new AutoPositionValue();
                auto.SetId(_entity.entityKey.Value.EntityId.ToString());
                auto.SetField("pos");
                effect.AddAuto(auto);

                effect.SetSelector(new PosAssignSelector(_entity.position.Value.x.ToString(),
                                                         _entity.position.Value.y.ToString(), _entity.position.Value.z.ToString()));

                HashSet <int> playerIds = new HashSet <int>();
                foreach (PlayerEntity player in args.GameContext.player.GetInitializedPlayerEntities())
                {
                    playerIds.Add(player.entityKey.Value.EntityId);
                }
                effect.SetPlayerIds(playerIds);
                //Debug.LogFormat("start pos {0}", _entity.position.Value.ToString());

                effect.Act(args);

                lastEffectTime = args.Rule.ServerTime;
            }

            args.Resume(name);
            args.Resume("entity");
        }
Example #18
0
 protected virtual bool ComboFilter(UnitSkill unitSkill)
 {
     return(unitSkill.skillType == UnitSkill.SkillType.attack);
 }