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(); }
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); }
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); }
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"); }
public BaseGameUnit() { this.paras = new ParaList(); this.skill = new UnitSkill(this); XYZPara xyz = new XYZPara(); xyz.SetName(POSITION); this.paras.AddPara(xyz); }
public TacticWeaponLogic(int weaponId, IFreeArgs freeArgs) { _weaponConfig = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(weaponId); if (SharedConfig.IsServer) { _unitSkill = WeaponSkillFactory.GetSkill(weaponId); _freeArgs = freeArgs as ISkillArgs; } }
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(); } }
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); }
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); } }
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); } } }
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 + ")"); }
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 + ")"); }
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); }
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; } }
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; }
protected override bool ComboFilter(UnitSkill unitSkill) { return(unitSkill.EName == "MeatBulletTank"); }
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"); }
protected virtual bool ComboFilter(UnitSkill unitSkill) { return(unitSkill.skillType == UnitSkill.SkillType.attack); }