protected override void SetHitData(LCharacterHitData data, Vector3 dir) { float hit_down = data.value.GetValueFloat("hit_down", 0.0f); float hit_back = data.value.GetValueFloat("hit_back", 0.0f) * 0.5f; ctrl_time = data.value.GetValueFloat("ctrl_time", 0.0f); MoveDir = Vector3.down * hit_down + dir * hit_back; this.effect = data.effect; this.effect_obj = data.effect_obj; }
public void OnHit(LCharacterHitData data) { int _hp = data.value.GetValueInt("hp", 0); int _mp = data.value.GetValueInt("mp", 0); this.hp -= (int)_hp; this.hp -= (int)_mp; if (null != HitFontManager.globalMgr) { HitFontManager.globalMgr.CreateFont(0, _hp, character.GetCurPosition()); } }
protected override void SetHitData(LCharacterHitData data, Vector3 dir) { float ctrl_time = data.value.GetValueFloat("ctrl_time", 0.0f); float hit_back = data.value.GetValueFloat("hit_back", 0.0f); float hit_fly = data.value.GetValueFloat("hit_fly", 0.0f); //Debug.Log("hit_back = "+ hit_back); JumpTime = ctrl_time; jumpSpeed = hit_back; jumpHeight = hit_fly; MoveDir = dir; this.effect = data.effect; this.effect_obj = data.effect_obj; }
public LCharacterHitData Clone() { //hittedObject 这个必须是自己的 LCharacterHitData data = new LCharacterHitData(); data.characterId = characterId; data.value = this.value; data.firstHit = true; data.cdName = cdName; data.skillState = skillState; data.effect = effect; data.effect_obj = effect_obj; return(data); }
protected override void SetHitData(LCharacterHitData data, Vector3 dir) { float ctrl_time = data.value.GetValueFloat("ctrl_time", 0.0f); float hit_back = data.value.GetValueFloat("hit_back", 0.0f); float hit_back_time = data.value.GetValueFloat("hit_back_time", 0.0f); this.ctrl_time = ctrl_time; this.hit_back_speed = hit_back; this.hit_back_time = hit_back_time; this.effect = data.effect; this.effect_obj = data.effect_obj; MoveDir = dir; }
public override bool CanStopByTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information) { //暂时倒地不能攻击 if (onGround) { return(false); } if (!base.CanStopByTrigger(cdata, other, character, information)) { return(false); } if (cdata.type == "hit") { LCharacterHitData data = cdata.getData <LCharacterHitData>(); ActionType status = (ActionType)data.value.GetValueInt("status", 0); if (status == ActionType.HIT_FLY || status == ActionType.HIT_DOWN) { beBreak = true; return(true); } float slow_motion = data.value.GetValueFloat("slow_motion", 0f); float air_delay = data.value.GetValueFloat("air_delay", 0f); if (data.firstHit) { if (data.cdState == CdState.HIT) { LCharacterInterface chr; if (information.TryGetCharacter(data.characterId, out chr)) { chr.updateCDState(data.cdName, data.skillState); } } if (slow_motion > 0.0001f) { information.slowly(0.01f, slow_motion); data.firstHit = true; } character.ResetAndPlay(animNameFly); this.air_delay = air_delay; } return(false); } return(true); }
public override bool OnTrigger(LCharacterColliderData cdata, Collider other, LChatacterInterface character, LChatacterInformationInterface information) { if (cdata.type == "hit") { LCharacterHitData data = cdata.getData <LCharacterHitData>(); ActionType status = (ActionType)data.value.GetValueInt("status", 0); if (GetActionType() == status) { if (!data.hittedObject.Contains(character.GetId()) && null != data.value) { data.hittedObject.Add(character.GetId()); if (character.IsAI()) { character.AddHaterd(data.characterId, 1); } float slow_motion = data.value.GetValueFloat("slow_motion", 0f); if (data.firstHit) { if (data.cdState == CdState.HIT) { LChatacterInterface chr = information.GetCharacter(data.characterId); chr.updateCDState(data.cdName, data.skillState); } if (slow_motion > 0.0001f) { information.slowly(0.01f, slow_motion); data.firstHit = true; } } Vector3 dir = other.transform.forward; dir.y = 0; dir.Normalize(); SetHitData(data, dir); return(true); } } } return(false); }
public virtual bool CanStopByTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information) { var v = character.GetData((int)ACTIONATA.ROLE_STATE); if (v == null) { return(true); } if (cdata.type == "hit") { //如果是攻击 LCharacterHitData data = cdata.getData <LCharacterHitData>(); long state = System.Convert.ToInt64(v); //如果角色拥有霸体状态. if (state == 1 || state == 2) { //这里加角色检查 //可以让主角打中人或者 霸体状态被打中才发生减速. float slow_motion = data.value.GetValueFloat("slow_motion", 0f); if (data.firstHit) { if (data.cdState == CdState.HIT) { LCharacterInterface chr; if (information.TryGetCharacter(data.characterId, out chr)) { chr.updateCDState(data.cdName, data.skillState); } } if (slow_motion > 0.0001f) { information.slowly(0.01f, slow_motion); data.firstHit = true; } } return(false); } } return(true); }
public override bool OnTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information) { if (cdata.type == "hit") { LCharacterHitData data = cdata.getData <LCharacterHitData>(); ActionType status = (ActionType)data.value.GetValueInt("status", 0); if (GetActionType() == status) { if (!data.hittedObject.Contains(character.GetId()) && null != data.value) { character.OnHit(data); data.hittedObject.Add(character.GetId()); if (character.IsAI()) { character.AddHaterd(data.characterId, 1); } float slow_motion = data.value.GetValueFloat("slow_motion", 0f); if (data.firstHit) { if (data.cdState == CdState.HIT) { LCharacterInterface chr; if (information.TryGetCharacter(data.characterId, out chr)) { chr.updateCDState(data.cdName, data.skillState); } } if (slow_motion > 0.0001f) { information.slowly(0.01f, slow_motion); data.firstHit = true; } } int hit_dir = data.value.GetValueInt("hit_dir", 0); Vector3 dir; if (hit_dir == 0) { dir = other.transform.forward; } else if (hit_dir == 1) { dir = character.GetCurPosition() - other.transform.position; } else if (hit_dir == 2) { LCharacterInterface target; if (information.TryGetCharacter(data.characterId, out target)) { dir = character.GetCurPosition() - target.GetCurPosition(); } else { dir = Vector3.forward; } } else { LCharacterInterface target; if (information.TryGetCharacter(data.characterId, out target)) { dir = target.GetCurPosition() - character.GetCurPosition(); } else { dir = Vector3.forward; } } dir.y = 0; dir.Normalize(); SetHitData(data, dir); return(true); } } } return(false); }
protected abstract void SetHitData(LCharacterHitData data, Vector3 dir);
public void CmpObjectEvent(float curTime, float lastTime, LCHEventChannelData _e, ObjectContain contain, LCharacterInterface character, LChatacterInformationInterface information, Dictionary <int, ObjectContain> objs , CdState cdState , string cdName , int skillState , Vector3 baseGroundPos , ref float beginToTarget , ref float endToTarget , ref Vector3 beginTargetPoint ) { if (contain.isFlyTool) { if (null != contain.gameobject) { contain.gameobject.SetActive(false); } return; } LCHChannelType t = (LCHChannelType)_e.type; ObjDictionary value; float _time; float _keyFrameTime; if (t == LCHChannelType.Object) { int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time, out _keyFrameTime); if (res == 1) { if (null != contain.gameobject) { bool enable = value.GetValue <bool>("enable", true); if (_e.objId == -1) { //因為主對象直接設置 gameObject的Enable,所有腳本都不工作了. if (null != contain.roleRenders) { for (int n = 0; n < contain.roleRenders.Length; n++) { contain.roleRenders[n].enabled = enable; } } } else { if (enable) { contain.gameobject.SetActive(false); contain.gameobject.SetActive(true); } else { contain.gameobject.SetActive(enable); } } if (enable) { if (contain.type == 1) { string anim_name = value.GetValue <string>("anim", ""); if (anim_name.Length > 0) { if (null == contain.animaction) { contain.animaction = contain.gameobject.GetComponent <Animation>(); } if (null != contain.animaction) { bool cf = value.GetValue <bool>("crossFade", true); //crossFade contain.animaction[anim_name].time = _time; if (cf) { contain.animaction.CrossFade(anim_name, 0.05f); } else { contain.animaction[anim_name].time = 0f;//特么不这么干不重置。。。 contain.animaction.Play(anim_name); } } } int ex_action = value.GetValueInt("ex_action", 0); if (ex_action == 1) { //主模型. if (_e.objId == -1) { float ToTargetTime = value.GetValueFloat("ex_action", -1f); if (ToTargetTime > 0f) { beginToTarget = _keyFrameTime; endToTarget = _keyFrameTime + ToTargetTime; beginTargetPoint = baseGroundPos; } } } // else if (ex_action == 2) { contain.stopUpatePos = true; } } } } } else if (res == 0) { if (_e.objId != -1)//非主模型,一开始隐藏 { if (null != contain.gameobject) { if (contain.objId != -1) { contain.gameobject.SetActive(false); } } } } } if (t == LCHChannelType.Event) { int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time, out _keyFrameTime); if (res == 1) { if (contain.type == 2 || contain.type == 3) { if (null == contain.collider) { if (null != contain.gameobject) { contain.collider = contain.gameobject.GetComponent <Collider>(); contain.gameobject.layer = character.GetAttackLayer(); if (null != contain.collider) { contain.collider.isTrigger = true; } } } } if (null != contain.gameobject) { bool enable = value.GetValue <bool>("enable", true); contain.gameobject.SetActive(enable); if (contain.collider) { contain.collider.enabled = enable; if (enable) { if (null == contain.hitData) { LCharacterHitDataCmp hdc = contain.gameobject.GetComponent <LCharacterHitDataCmp>(); if (null == hdc) { hdc = contain.gameobject.AddComponent <LCharacterHitDataCmp>(); } contain.hitData = hdc.data; } contain.hitData.type = "hit"; LCharacterHitData hitData = new LCharacterHitData(); hitData.hittedObject.Clear(); hitData.value = value; hitData.characterId = character.GetId(); hitData.firstHit = true; hitData.cdName = cdName; hitData.skillState = skillState; hitData.cdState = cdState; int effectId = value.GetValueInt("hit_effect", -2); if (effectId != -2 && objs.ContainsKey(effectId)) { var ct = objs[effectId]; hitData.effect = ct.mod; hitData.effect_obj = ct.baseGameObject; } else { hitData.effect = null; hitData.effect_obj = null; } contain.hitData.data = hitData; int IsFlyTool = value.GetValueInt("IsFlyTool", 0); if (IsFlyTool == 1) { if (contain.type == 3) { float FlyToolTime = value.GetValueFloat("FlyToolTime", 20f); float FlyToolSpeed = value.GetValueFloat("FlyToolSpeed", 2f); if (null != contain.gameobject) { var g = GameObject.Instantiate(contain.gameobject); LCharacterHitDataCmp hdc0 = g.GetComponent <LCharacterHitDataCmp>(); g.name = "bullet"; LCHBullet bullet = g.AddComponent <LCHBullet>(); hdc0.data.data = hitData; hdc0.data.type = "hit"; contain.isFlyTool = true; bullet.type = LCHBullet.TYPE.NORMAL; bullet.speed = FlyToolSpeed; bullet.maxTime = FlyToolTime; g.SetActive(true); contain.gameobject.SetActive(false); } } } else if (IsFlyTool == 2) { if (contain.type == 3) { //float FlyToolTime = value.GetValueFloat("FlyToolTime", 20f); float FlyToolSpeed = value.GetValueFloat("FlyToolSpeed", 2f); if (null != contain.gameobject) { var g = GameObject.Instantiate(contain.gameobject); LCharacterHitDataCmp hdc0 = g.GetComponent <LCharacterHitDataCmp>(); g.name = "bullet"; LCHBullet bullet = g.AddComponent <LCHBullet>(); hdc0.data.data = hitData; hdc0.data.type = "hit"; contain.isFlyTool = true; bullet.type = LCHBullet.TYPE.FELLOW; bullet.speed = FlyToolSpeed; bullet.curTargetId = curTargetId; bullet.maxTime = 60f; g.SetActive(true); contain.gameobject.SetActive(false); } } } } } } } else if (res == 0) { if (null != contain.gameobject) { contain.gameobject.SetActive(false); } } } }
public static void CmpObjectEvent(float curTime, float lastTime, LCHEventChannelData _e, ObjectContain contain, LChatacterInterface character, LChatacterInformationInterface information, Dictionary <int, ObjectContain> objs , CdState cdState , string cdName , int skillState ) { LCHChannelType t = (LCHChannelType)_e.type; ObjDictionary value; float _time; if (t == LCHChannelType.Object) { int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time); if (res == 1) { if (null != contain.gameobject) { bool enable = value.GetValue <bool>("enable", true); if (_e.objId == -1) { //因為主對象直接設置 gameObject的Enable,所有腳本都不工作了. if (null != contain.roleRenders) { for (int n = 0; n < contain.roleRenders.Length; n++) { contain.roleRenders[n].enabled = enable; } } } else { if (enable) { contain.gameobject.SetActive(false); contain.gameobject.SetActive(true); /*contain.gameobject.SetActive(enable); * for (int i = 0, l = contain.systems.Length; i < l; i++) * { * //Debug.Log(contain.systems[i].isStopped); * contain.systems[i].gameObject.SetActive(false); * contain.systems[i].gameObject.SetActive(true); * contain.systems[i].Play(true); * }*/ } else { contain.gameobject.SetActive(enable); } //Debug.LogError("_e.objId " + _e.objId + " " + enable); //contain.gameobject.SetActive(enable); } if (enable) { if (contain.type == 1) { string anim_name = value.GetValue <string>("anim", ""); if (anim_name.Length > 0) { if (null == contain.animaction) { contain.animaction = contain.gameobject.GetComponent <Animation>(); } if (null != contain.animaction) { bool cf = value.GetValue <bool>("crossFade", true); //crossFade contain.animaction[anim_name].time = _time; if (cf) { contain.animaction.CrossFade(anim_name, 0.05f); } else { contain.animaction[anim_name].time = 0f;//特么受击不这么干不重置。。。 contain.animaction.Play(anim_name); } } } } } } } else if (res == 0) { if (_e.objId != -1)//非主模型,一开始隐藏 { if (null != contain.gameobject) { if (contain.objId != -1) { contain.gameobject.SetActive(false); } } } } } if (t == LCHChannelType.Event) { int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time); if (res == 1) { if (contain.type == 2 || contain.type == 3) { if (null == contain.collider) { if (null != contain.gameobject) { contain.collider = contain.gameobject.GetComponent <Collider>(); contain.gameobject.layer = character.GetAttackLayer(); if (null != contain.collider) { contain.collider.isTrigger = true; } } } } if (null != contain.gameobject) { bool enable = value.GetValue <bool>("enable", true); contain.gameobject.SetActive(enable); if (contain.collider) { contain.collider.enabled = enable; if (enable) { if (null == contain.hitData) { LCharacterHitDataCmp hdc = contain.gameobject.GetComponent <LCharacterHitDataCmp>(); if (null == hdc) { hdc = contain.gameobject.AddComponent <LCharacterHitDataCmp>(); } contain.hitData = hdc.data; } contain.hitData.type = "hit"; LCharacterHitData hitData = new LCharacterHitData(); hitData.hittedObject.Clear(); hitData.value = value; hitData.characterId = character.GetId(); hitData.firstHit = true; hitData.cdName = cdName; hitData.skillState = skillState; hitData.cdState = cdState; int effectId = value.GetValueInt("hit_effect", -2); if (effectId != -2 && objs.ContainsKey(effectId)) { var ct = objs[effectId]; hitData.effect = ct.mod; hitData.effect_obj = ct.baseGameObject; } else { hitData.effect = null; hitData.effect_obj = null; } contain.hitData.data = hitData; } } } } else if (res == 0) { if (null != contain.gameobject) { contain.gameobject.SetActive(false); } } } }