public override void FixedUpdate(int deltaTime) { List <EntityBase> list = GetEntityList(); for (int i = 0; i < list.Count; i++) { CommandComponent cc = list[i].GetComp <CommandComponent>(); CDComponent cdc = list[i].GetComp <CDComponent>(); SkillStatusComponent ssc = list[i].GetComp <SkillStatusComponent>(); cdc.CD -= deltaTime; if (cc.skillDir.ToVector() != Vector3.zero && cc.isFire && cdc.CD <= 0) { cdc.CD = 2 * 1000; Debug.Log("FIRE!!!"); //FIRE!!! string skillID = "2000"; ssc.m_skillTime = 0; ssc.m_isTriggerSkill = false; ssc.m_skillStstus = SkillStatusEnum.Before; ssc.m_currentSkillData = ssc.GetSkillData(skillID); ssc.m_currentSkillData.UpdateInfo(); } } }
void SkillLogic(EntityBase entity, int deltaTime) { SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); MoveComponent mc = entity.GetComp <MoveComponent>(); if (ssc.m_isHit) { SkillDataGenerate skillData = ssc.m_currentSkillData.SkillInfo; //TODO 技能代处理 //获取伤害列表 List <EntityBase> damageList = GetSkillDamageList(entity, skillData); //创建飞行物 CreateFlyObject(skillData, entity); for (int i = 0; i < damageList.Count; i++) { //伤害处理 Damage(entity, damageList[i], skillData); //击飞处理 BlowFly(entity, damageList[i], skillData); //伤害Buff处理 DamageBuff(entity, damageList[i], skillData); } //TODO 恢复 } }
List <EntityBase> GetSkillDamageList(EntityBase entity, SkillDataGenerate skillData) { CampComponent acc = entity.GetComp <CampComponent>(); SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); List <EntityBase> result = new List <EntityBase>(); List <EntityBase> list = GetEntityList(new string[] { "CollisionComponent", "LifeComponent", "CampComponent" }); SkillUtils.UpdateArea(skillAreaCache, skillData.m_EffectArea, ssc.skillDir.ToVector(), entity); Debug.DrawRay(skillAreaCache.position, skillAreaCache.direction, Color.red, 10); for (int i = 0; i < list.Count; i++) { CollisionComponent bcc = list[i].GetComp <CollisionComponent>(); CampComponent bcampc = list[i].GetComp <CampComponent>(); LifeComponent lc = list[i].GetComp <LifeComponent>(); //Debug.Log("bcampc.creater " + bcampc.creater + " AreaCollideSucceed -->" + skillAreaCache.AreaCollideSucceed(bcc.area)); if (acc.creater != bcampc.creater && skillAreaCache.AreaCollideSucceed(bcc.area) && lc.Life > 0) { result.Add(list[i]); } } return(result); }
public static void BlowFly(WorldBase world, EntityBase skiller, EntityBase hurter, string blowFlyID) { MoveComponent amc = skiller.GetComp <MoveComponent>(); MoveComponent bmc = hurter.GetComp <MoveComponent>(); Vector3 dir = amc.dir.ToVector(); if (skiller.GetExistComp <SkillStatusComponent>()) { SkillStatusComponent assc = skiller.GetComp <SkillStatusComponent>(); dir = assc.skillDir.ToVector(); } //Debug.Log("BlowFly --> skill id " + skillData.m_key + " blowfly id " + blowFlyID + " skilltoken pos " + amc.pos.ToVector() + " "); if (blowFlyID != "null") { //Debug.Log("BlowFly " + hurter.ID + " skillID " + skillData.m_key); //击飞处理 if (hurter.GetExistComp <BlowFlyComponent>()) { BlowFlyComponent bfc = hurter.GetComp <BlowFlyComponent>(); if (!bfc.isBlow) { bfc.isBlow = true; bfc.blowFlyID = blowFlyID; bfc.blowTime = (int)(bfc.BlowData.m_Time * 1000); bfc.SetBlowFly(amc.pos.ToVector(), bmc.pos.ToVector(), dir); } } } }
public override void FixedUpdate(int deltaTime) { List <EntityBase> list = GetEntityList(); for (int i = 0; i < list.Count; i++) { CommandComponent cc = (CommandComponent)list[i].GetComp("CommandComponent"); SkillStatusComponent ssc = (SkillStatusComponent)list[i].GetComp("SkillStatusComponent"); PlayerComponent pc = (PlayerComponent)list[i].GetComp("PlayerComponent"); MoveComponent mc = (MoveComponent)list[i].GetComp("MoveComponent"); LifeComponent lc = (LifeComponent)list[i].GetComp("LifeComponent"); //CD for (int j = 0; j < ssc.m_skillList.Count; j++) { ssc.m_CDList[j] -= deltaTime; } if (ssc.skillDirCache.ToVector() != Vector3.zero && cc.isFire && !pc.GetIsDizziness() && lc.Life > 0 && cc.skillDir.ToVector() == Vector3.zero ) { string skillID = SkillUtils.GetSkillName(cc); SkillData data = ssc.GetSkillData(skillID); if (ssc.GetSkillCDFinsih(skillID)) { //Debug.Log("FIRE!!! --> " + skillID); ssc.m_skillTime = 0; ssc.m_skillStstus = SkillStatusEnum.Before; ssc.m_isTriggerSkill = false; ssc.m_currentSkillData = data; ssc.m_currentSkillData.UpdateInfo(); ssc.SetSkillCD(skillID, data.CDSpace); ssc.skillDir = ssc.skillDirCache.DeepCopy(); AreaDataGenerate areaData = DataGenerateManager <AreaDataGenerate> .GetData(ssc.m_currentSkillData.SkillInfo.m_EffectArea); float distance = ssc.skillDir.ToVector().magnitude; distance = areaData.m_SkewDistance + Mathf.Clamp(distance, 0, areaData.m_distance); Vector3 aimPos = mc.pos.ToVector() + ssc.skillDir.ToVector().normalized *distance; if (areaData.m_Shape != AreaType.Rectangle) { ssc.skillPos.FromVector(aimPos); } else { ssc.skillPos.FromVector(mc.pos.ToVector() + ssc.skillDir.ToVector().normalized *(areaData.m_SkewDistance - areaData.m_Length / 2)); } } } ssc.skillDirCache = cc.skillDir.DeepCopy(); } }
public void UpperAnim(EntityBase entity, AnimComponent ac) { SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>(); if (sc.m_skillStstus != SkillStatusEnum.Finish && sc.m_skillStstus != SkillStatusEnum.None) { string attackAnimName = "null"; switch (sc.m_skillStstus) { case SkillStatusEnum.Before: attackAnimName = sc.m_currentSkillData.BeforeInfo.m_AnimName; break; case SkillStatusEnum.Current: attackAnimName = sc.m_currentSkillData.CurrentInfo.m_AnimName; break; case SkillStatusEnum.Later: attackAnimName = sc.m_currentSkillData.LaterInfo.m_AnimName; break; } if (attackAnimName != "null") { //TODO 将来可能对动画做追赶 ac.anim.Play(attackAnimName, 1); } else { ac.anim.Play("empty", 1); } } }
public override MomentComponentBase DeepCopy() { SkillStatusComponent sc = new SkillStatusComponent(); sc.m_skillStstus = m_skillStstus; sc.m_skillTime = m_skillTime; sc.m_skillTriggerTimeSpace = m_skillTriggerTimeSpace; sc.m_isHit = m_isHit; sc.m_isEnter = m_isEnter; sc.m_isTriggerSkill = m_isTriggerSkill; sc.skillDir = skillDir.DeepCopy(); if (m_currentSkillData != null) { sc.m_currentSkillData = m_currentSkillData.DeepCopy(); } for (int i = 0; i < m_skillList.Count; i++) { sc.m_skillList.Add(m_skillList[i].DeepCopy()); } return(sc); }
public void CreateSkillAreaTip(EntityBase entity, SkillStatusComponent status) { //if (RangeTip == null) //{ // GameObject tip = GameObjectManager.CreateGameObjectByPool("AreaTips"); // RangeTip = tip.GetComponent<CreatMesh>(); //} //RangeTip.gameObject.SetActive(true); //RangeTip.SetMesh(entity, status.m_currentSkillData.SkillInfo.m_EffectArea, true, status.m_currentSkillData.SkillInfo.m_AreaTexture); }
public static Vector3 GetAreaDir(Area area, AreaDataGenerate areaData, EntityBase skiller, EntityBase aim = null) { MoveComponent smc = skiller.GetComp <MoveComponent>(); SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>(); Vector3 l_dir = Vector3.zero; if (aim == null) { switch (areaData.m_SkewDirection) { case DirectionEnum.Forward: l_dir = ssc.skillDir.ToVector(); break; case DirectionEnum.Backward: l_dir = ssc.skillDir.ToVector() * -1; break; case DirectionEnum.Close: Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向,修正为forward"); l_dir = ssc.skillDir.ToVector(); break; case DirectionEnum.Leave: Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向,修正为Backward"); l_dir = ssc.skillDir.ToVector() * -1; break; default: Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向"); break; } } if (aim != null) { MoveComponent amc = aim.GetComp <MoveComponent>(); switch (areaData.m_SkewDirection) { case DirectionEnum.Forward: l_dir = ssc.skillDir.ToVector(); break; case DirectionEnum.Backward: l_dir = ssc.skillDir.ToVector() * -1; break; case DirectionEnum.Leave: l_dir = amc.pos.ToVector() - smc.pos.ToVector(); break; case DirectionEnum.Close: l_dir = smc.pos.ToVector() - amc.pos.ToVector(); break; } } return(l_dir); }
void SkillLogic(EntityBase entity, int deltaTime) { SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); MoveComponent mc = entity.GetComp <MoveComponent>(); if (ssc.m_isHit) { SkillDataGenerate skillData = ssc.m_currentSkillData.m_skillInfo; Debug.Log("isHit"); //获取伤害列表 //创建飞行物 CreateFlyObject(skillData, entity); } }
void SkillBehaviorLogic(EntityBase entity, int deltaTime) { SkillBehaviorCompoent sbc = entity.GetComp <SkillBehaviorCompoent>(); SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); if (ssc.m_skillStstus == SkillStatusEnum.Before || ssc.m_skillStstus == SkillStatusEnum.Current || ssc.m_skillStstus == SkillStatusEnum.Later) { sbc.FXTimer += deltaTime; if (!sbc.isTriggerFX && sbc.FXTimer > GetDelayTime(ssc)) { sbc.isTriggerFX = true; CreatSkillEffect(entity, ssc); } } }
//CreatMesh RangeTip; public void CreatSkillEffect(EntityBase entity, SkillStatusComponent skillComp) { SkillStatusDataGenerate skillStatusData = null; switch (skillComp.m_skillStstus) { case SkillStatusEnum.Before: skillStatusData = skillComp.m_currentSkillData.BeforeInfo; break; case SkillStatusEnum.Current: skillStatusData = skillComp.m_currentSkillData.CurrentInfo; break; case SkillStatusEnum.Later: skillStatusData = skillComp.m_currentSkillData.LaterInfo; break; } string FXName = skillStatusData.m_FXName; float FXLifeTime = skillStatusData.m_FXLifeTime; float offset = skillStatusData.m_FXOffSet; HardPointEnum FXCreatPoint = skillStatusData.m_FXCreatPoint; string followFXName = skillStatusData.m_FollowFXName; float FLoffset = skillStatusData.m_FollowFXOffSet; HardPointEnum followFXCreatPoint = skillStatusData.m_FollowFXCreatPoint; float followFXLifeTime = skillStatusData.m_FollowFXLifeTime; //Debug.Log("FXName " + FXName); //Debug.Log("followFXName " + followFXName); //现在不管特效填跟不跟随都跟随角色,并在技能被打断时退出 if (FXName != "null") { //恢复不follow CreateEffect(entity, FXName, FXCreatPoint, FXLifeTime, offset); } if (followFXName != "null") { CreateFollowSkillEffect(entity, followFXName, followFXCreatPoint, followFXLifeTime); } }
void SkillLogic(EntityBase entity, int deltaTime) { SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); MoveComponent mc = entity.GetComp <MoveComponent>(); CampComponent cc = entity.GetComp <CampComponent>(); if (ssc.m_isHit) { SkillDataGenerate skillData = ssc.m_currentSkillData.SkillInfo; //技能代处理 SkillUtils.TokenUseSkill(m_world, entity.ID, skillData.m_SkillAgency, mc.pos.ToVector(), ssc.skillDir.ToVector()); //获取伤害列表 List <EntityBase> damageList = GetSkillDamageList(entity, skillData); //Debug.Log("damageList " + damageList.Count); //创建飞行物 CreateFlyObject(skillData, entity); //自身buff SkillUtils.AddBuff(m_world, entity, entity, skillData.m_SelfBuff); //Debug.Log("SkillLogic hit " + entity.ID + " createrid " + cc.creater + " damageList.Count " + damageList.Count); for (int i = 0; i < damageList.Count; i++) { //伤害处理 Damage(entity, damageList[i], skillData); //击飞处理 BlowFly(entity, damageList[i], skillData); //伤害Buff处理 DamageBuff(entity, damageList[i], skillData); } //TODO 恢复 Recover(entity, entity, skillData); } }
public static void TokenUseSkill(WorldBase world, int createrID, string skillID, Vector3 pos, Vector3 dir) { //Debug.Log("TokenUseSkill pos" + pos + " frame " + world.FrameCount + " skillID" + skillID); if (skillID != null && skillID != "null" && skillID != "Null") { SkillStatusComponent ssc = new SkillStatusComponent(); ssc.m_skillTime = 0; ssc.m_skillStstus = SkillStatusEnum.Before; ssc.m_isTriggerSkill = false; ssc.m_isHit = false; ssc.m_skillList.Add(new SkillData(skillID)); ssc.m_currentSkillData = ssc.GetSkillData(skillID); ssc.m_currentSkillData.UpdateInfo(); ssc.skillDir.FromVector(dir); if (ssc.m_currentSkillData.LaterTime == 0) { Debug.LogError("技能代 " + skillID + "的持续时间不能为 0 !"); return; } TransfromComponent tc = new TransfromComponent(); tc.pos.FromVector(pos); tc.dir.FromVector(dir); //打印 Debug.DrawRay(tc.pos.ToVector(), -tc.dir.ToVector(), Color.green, 10); CampComponent cc = new CampComponent(); cc.creater = createrID; LifeSpanComponent lsc = new LifeSpanComponent(); lsc.lifeTime = (int)(ssc.m_currentSkillData.LaterTime * 1000); world.CreateEntity(createrID + "SkillToken", tc, ssc, cc, lsc); } }
int GetDelayTime(SkillStatusComponent skillComp) { SkillStatusDataGenerate skillStatusData = null; switch (skillComp.m_skillStstus) { case SkillStatusEnum.Before: skillStatusData = skillComp.m_currentSkillData.BeforeInfo; break; case SkillStatusEnum.Current: skillStatusData = skillComp.m_currentSkillData.CurrentInfo; break; case SkillStatusEnum.Later: skillStatusData = skillComp.m_currentSkillData.LaterInfo; break; } float delayTime = skillStatusData.m_FXDelay; return((int)(delayTime * 1000)); }
public static void UpdateArea(Area area, string areaID, Vector3 dir, EntityBase skiller, EntityBase aim = null) { //MoveComponent smc = skiller.GetComp<MoveComponent>(); SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>(); AreaDataGenerate areaData = DataGenerateManager <AreaDataGenerate> .GetData(areaID); Vector3 dirTmp = GetAreaDir(area, areaData, dir, skiller, aim); area.areaType = areaData.m_Shape; area.length = areaData.m_Length; area.Width = areaData.m_Width; area.angle = areaData.m_Angle; area.radius = areaData.m_Radius; area.direction = dirTmp.normalized; //area.position = smc.pos.ToVector() + area.direction * areaData.m_SkewDistance; area.position = ssc.skillPos.ToVector() + areaData.m_SkewDistance * ssc.skillDir.ToVector().normalized; //Debug.Log( "skiller forward"+skiller.transform.forward); }
public void CreateEffect(EntityBase entity, string effectName, HardPointEnum hardPoint, float time, float offset) { PerfabComponent pc = entity.GetComp <PerfabComponent>(); SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>(); MoveComponent mc = entity.GetComp <MoveComponent>(); //挂载点完全放弃了 Transform creatPoint = pc.hardPoint.hardPoint.GetHardPoint(hardPoint); Vector3 createPos = mc.pos.ToVector() + ssc.skillDir.ToVector() * offset; Vector3 charactorEugle = Vector3.zero; Vector3 m_aimWaistDir = ssc.skillDir.ToVector(); float euler = Mathf.Atan2(m_aimWaistDir.x, m_aimWaistDir.z) * Mathf.Rad2Deg; if (m_aimWaistDir.z == 0) { euler = 0; } charactorEugle.y = euler; TransfromComponent etc = new TransfromComponent(); etc.pos.FromVector(createPos); etc.dir.FromVector(m_aimWaistDir); AssetComponent eac = new AssetComponent(); eac.m_assetName = effectName; LifeSpanComponent elc = new LifeSpanComponent(); elc.lifeTime = (int)(time * 1000); m_world.CreateEntity("Effect" + effectName + entity.ID + createPos, etc, eac, elc); }
public override void FixedUpdate(int deltaTime) { List <EntityBase> list = GetEntityList(); for (int i = 0; i < list.Count; i++) { CommandComponent cc = list[i].GetComp <CommandComponent>(); CDComponent cdc = list[i].GetComp <CDComponent>(); SkillStatusComponent ssc = list[i].GetComp <SkillStatusComponent>(); PlayerComponent pc = list[i].GetComp <PlayerComponent>(); cdc.CD -= deltaTime; //Debug.Log(cc.element1 + " --> " + cc.element2 + " CanFire " + (cdc.CD <= 0)); if (cc.skillDir.ToVector() != Vector3.zero && cc.isFire && cdc.CD <= 0) { cdc.CD = 2 * 1000; //FIRE!!! 2000 2002技能可用 string skillID = GetSkillName(cc); //Debug.Log("FIRE!!! --> " + skillID); ssc.m_skillTime = 0; ssc.m_skillStstus = SkillStatusEnum.Before; ssc.m_isTriggerSkill = false; ssc.m_currentSkillData = ssc.GetSkillData(skillID); ssc.m_currentSkillData.UpdateInfo(); ssc.skillDir = cc.skillDir.DeepCopy(); } } }
List <CreatPostionInfo> GetCreatePostionInfos(SkillDataGenerate skillData, EntityBase skiller, int Length) { MoveComponent mc = skiller.GetComp <MoveComponent>(); SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>(); List <CreatPostionInfo> result = new List <CreatPostionInfo>(); //result.Clear(); if (Length == 0) { return(result); } HardPointEnum l_FXCreatPoint = skillData.m_FlyCreatPoint; SyncVector3 forward = new SyncVector3().FromVector(ssc.skillDir.ToVector().normalized); SyncVector3 dir = forward; SyncVector3 pos = mc.pos; SyncVector3 leftBorder = new SyncVector3(); SyncVector3 leftDir = new SyncVector3(); SyncVector3 leftPos = new SyncVector3(); float sectorStep = 0; float rectangleStep = 0; AreaDataGenerate area = DataGenerateManager <AreaDataGenerate> .GetData(skillData.m_FlyObjectArea); switch (area.m_SkewDirection) { case DirectionEnum.Forward: break; case DirectionEnum.Backward: forward *= -1; break; //case DirectionEnum.Close: forward = (emc.pos - mc.pos); break; //case DirectionEnum.Leave: forward = (mc.pos - emc.pos); break; } switch (area.m_Shape) { case AreaType.Circle: leftBorder = forward.RotateInXZ(360 * 0.5f); sectorStep = 360 / (Length + 1); break; case AreaType.Sector: leftBorder = forward.RotateInXZ(area.m_Angle * 0.5f); sectorStep = area.m_Angle / (Length + 1); pos = pos + forward * area.m_SkewDistance; break; case AreaType.Rectangle: leftDir = forward.RotateInXZ(90); leftPos = pos + leftDir * area.m_Width * 0.5f; rectangleStep = area.m_Width / (Length + 1); break; } for (int i = 0; i < Length; i++) { switch (area.m_Shape) { case AreaType.Circle: case AreaType.Sector: dir = leftBorder.RotateInXZ2((i + 1) * sectorStep); break; case AreaType.Rectangle: pos = leftPos - leftDir * rectangleStep * (i + 1); break; } CreatPostionInfo cpi = new CreatPostionInfo(); pos.y = 0; dir.y = 0; cpi.m_pos = pos; cpi.m_dir = dir; result.Add(cpi); //CreatPostionInfo cpi = new CreatPostionInfo(); //cpi.m_pos = mc.pos.DeepCopy(); //cpi.m_dir.FromVector( ssc.skillDir.DeepCopy().ToVector().normalized); //result.Add(cpi); } return(result); }
public void PlayerJoin(EntityBase entity) { ConnectionComponent connectComp = entity.GetComp <ConnectionComponent>(); PlayerComponent playerComp = null; if (!entity.GetExistComp <PlayerComponent>()) { playerComp = new PlayerComponent(); entity.AddComp(playerComp); } else { playerComp = entity.GetComp <PlayerComponent>(); } //将角色ID传入游戏 playerComp.characterID = connectComp.m_session.player.characterID; playerComp.nickName = connectComp.m_session.player.playerID; ElementData e1 = new ElementData(); e1.id = 100; e1.num = 10; playerComp.elementData.Add(e1); ElementData e2 = new ElementData(); e2.id = 101; e2.num = 10; playerComp.elementData.Add(e2); ElementData e3 = new ElementData(); e3.id = 102; e3.num = 10; playerComp.elementData.Add(e3); ElementData e4 = new ElementData(); e4.id = 103; e4.num = 00; playerComp.elementData.Add(e4); if (!entity.GetExistComp <CommandComponent>()) { CommandComponent c = new CommandComponent(); entity.AddComp(c); } if (!entity.GetExistComp <TransfromComponent>()) { TransfromComponent c = new TransfromComponent(); c.pos.FromVector(new Vector3(15, 0, 0)); entity.AddComp(c); } if (!entity.GetExistComp <AssetComponent>()) { AssetComponent c = new AssetComponent(); c.m_assetName = playerComp.CharacterData.m_ModelID; entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); c.pos.FromVector(new Vector3(15, 0, 0)); entity.AddComp(c); } if (!entity.GetExistComp <SkillStatusComponent>()) { SkillStatusComponent c = new SkillStatusComponent(); DataTable data = DataManager.GetData("SkillData"); for (int i = 0; i < data.TableIDs.Count; i++) { c.m_skillList.Add(new SkillData(data.TableIDs[i], i)); } entity.AddComp(c); } if (!entity.GetExistComp <CDComponent>()) { CDComponent c = new CDComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CampComponent>()) { CampComponent c = new CampComponent(); c.creater = entity.ID; entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CollisionComponent>()) { CollisionComponent c = new CollisionComponent(); c.area.areaType = AreaType.Circle; c.area.radius = 0.5f; entity.AddComp(c); } if (!entity.GetExistComp <LifeComponent>()) { LifeComponent c = new LifeComponent(); c.maxLife = playerComp.CharacterData.m_hp; c.life = playerComp.CharacterData.m_hp; entity.AddComp(c); } if (!entity.GetExistComp <BlowFlyComponent>()) { BlowFlyComponent c = new BlowFlyComponent(); entity.AddComp(c); } //预测一个输入 //TODO 放在框架中 if (entity.GetExistComp <ConnectionComponent>()) { ConnectionComponent cc = entity.GetComp <ConnectionComponent>(); cc.m_lastInputCache = new CommandComponent(); cc.m_defaultInput = new CommandComponent(); } GameTimeComponent gtc = m_world.GetSingletonComp <GameTimeComponent>(); gtc.GameTime = 10000 * 1000; }
List <CreatPostionInfo> GetCreatePostionInfos(SkillDataGenerate skillData, EntityBase skiller, int Length) { MoveComponent mc = skiller.GetComp <MoveComponent>(); SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>(); List <CreatPostionInfo> result = new List <CreatPostionInfo>(); result.Clear(); if (Length == 0) { return(result); } HardPointEnum l_FXCreatPoint = skillData.m_FlyCreatPoint; Vector3 forward = ssc.skillDir.ToVector(); Vector3 dir = forward; Vector3 pos = Vector3.zero; //获取散射区域 Area skillArea = SkillUtils.UpdatSkillArea(areaCache, skillData, skiller, null); //TODO 寻敌方法 //CharacterBase enemy = GetRecentlyEnemy(skillArea, skiller.m_camp, false); //CharacterBase enemy = null; MoveComponent emc = null; if (l_FXCreatPoint != HardPointEnum.enemy) { pos = mc.pos.ToVector(); } else { if (emc == null) { return(result); } else { pos = emc.pos.ToVector(); } } Vector3 leftBorder = Vector3.zero; Vector3 leftDir = Vector3.zero; Vector3 leftPos = Vector3.zero; float sectorStep = 0; float rectangleStep = 0; AreaDataGenerate area = DataGenerateManager <AreaDataGenerate> .GetData(skillData.m_FlyObjectArea); switch (area.m_SkewDirection) { case DirectionEnum.Forward: break; case DirectionEnum.Backward: forward *= -1; break; case DirectionEnum.Close: forward = (emc.pos.ToVector() - mc.pos.ToVector()).normalized; break; case DirectionEnum.Leave: forward = (mc.pos.ToVector() - emc.pos.ToVector()).normalized; break; } switch (area.m_Shape) { case AreaType.Circle: leftBorder = forward.Vector3RotateInXZ(360 * 0.5f); sectorStep = 360 / (Length + 1); break; case AreaType.Sector: leftBorder = forward.Vector3RotateInXZ(area.m_Angle * 0.5f); sectorStep = area.m_Angle / (Length + 1); break; case AreaType.Rectangle: leftDir = forward.Vector3RotateInXZ(90); leftPos = pos + leftDir * area.m_Width * 0.5f; rectangleStep = area.m_Width / (Length + 1); break; } for (int i = 0; i < Length; i++) { switch (area.m_Shape) { case AreaType.Circle: case AreaType.Sector: dir = leftBorder.Vector3RotateInXZ2((i + 1) * sectorStep); pos = pos + forward * area.m_SkewDistance; break; case AreaType.Rectangle: pos = leftPos - leftDir * rectangleStep * (i + 1); break; } CreatPostionInfo cpi = new CreatPostionInfo(); cpi.m_pos = mc.pos.DeepCopy(); cpi.m_dir = ssc.skillDir.DeepCopy(); result.Add(cpi); } return(result); }
public void PlayerJoin(EntityBase entity) { PlayerComponent playerComp = null; if (!entity.GetExistComp <PlayerComponent>()) { playerComp = new PlayerComponent(); playerComp.characterID = "1"; playerComp.nickName = "Test model"; ElementData e1 = new ElementData(); e1.id = 100; e1.num = 10; playerComp.elementData.Add(e1); ElementData e2 = new ElementData(); e2.id = 101; e2.num = 10; playerComp.elementData.Add(e2); ElementData e3 = new ElementData(); e3.id = 102; e3.num = 10; playerComp.elementData.Add(e3); ElementData e4 = new ElementData(); e4.id = 103; e4.num = 00; playerComp.elementData.Add(e4); entity.AddComp(playerComp); } if (!entity.GetExistComp <CommandComponent>()) { CommandComponent c = new CommandComponent(); entity.AddComp(c); } if (!entity.GetExistComp <TransfromComponent>()) { TransfromComponent c = new TransfromComponent(); entity.AddComp(c); } if (!entity.GetExistComp <AssetComponent>()) { AssetComponent c = new AssetComponent(); c.m_assetName = "famale_01"; entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); c.pos.FromVector(new Vector3(15, 0, 0)); entity.AddComp(c); } if (!entity.GetExistComp <SkillStatusComponent>()) { SkillStatusComponent c = new SkillStatusComponent(); DataTable data = DataManager.GetData("SkillData"); for (int i = 0; i < data.TableIDs.Count; i++) { c.m_skillList.Add(new SkillData(data.TableIDs[i], i)); } entity.AddComp(c); } if (!entity.GetExistComp <CDComponent>()) { CDComponent c = new CDComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CampComponent>()) { CampComponent c = new CampComponent(); c.creater = entity.ID; entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CollisionComponent>()) { CollisionComponent c = new CollisionComponent(); c.area.areaType = AreaType.Circle; c.area.radius = 0.5f; entity.AddComp(c); } if (!entity.GetExistComp <LifeComponent>()) { LifeComponent c = new LifeComponent(); c.maxLife = playerComp.CharacterData.m_hp; c.life = playerComp.CharacterData.m_hp; entity.AddComp(c); } if (!entity.GetExistComp <BlowFlyComponent>()) { BlowFlyComponent c = new BlowFlyComponent(); entity.AddComp(c); } }
public void SkillStatusLogic(EntityBase entity, int deltaTime) { SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>(); if (sc.m_skillStstus != SkillStatusEnum.Finish && sc.m_skillStstus != SkillStatusEnum.None) { //Debug.Log("ID: " + entity.ID + " m_skillStstus " + sc.m_skillStstus + " frame " + m_world.FrameCount +" skillTime "+ sc.m_skillTime +" LaterTime " + sc.m_currentSkillData.LaterTime); sc.m_skillTime += deltaTime; sc.FXTimer += deltaTime; if (sc.m_skillTime > sc.m_currentSkillData.BeforeTime) { if (sc.m_skillStstus != SkillStatusEnum.Current) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Current; m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity); } else { sc.m_isEnter = false; } } if (sc.m_skillTime > sc.m_currentSkillData.HitTime) { if (sc.m_currentSkillData.SkillInfo.m_Moment) { if (sc.m_isTriggerSkill == false) { sc.m_isTriggerSkill = true; sc.m_isHit = true; m_world.eventSystem.DispatchEvent(GameUtils.c_SkillHit, entity); } else { sc.m_isHit = false; } } else { sc.m_skillTriggerTimeSpace -= deltaTime; //Debug.Log("m_skillTriggerTimeSpace " + sc.m_skillTriggerTimeSpace); if (sc.m_skillTriggerTimeSpace < 0) { sc.m_skillTriggerTimeSpace = sc.m_currentSkillData.SkillInfo.m_TriggerSpaceTime; //加个伤害间隔 sc.m_isHit = true; m_world.eventSystem.DispatchEvent(GameUtils.c_SkillHit, entity); } else { sc.m_isHit = false; } } } if (sc.m_skillTime > sc.m_currentSkillData.CurrentTime) { sc.m_isHit = false; if (sc.m_skillStstus != SkillStatusEnum.Later) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Later; m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity); } else { sc.m_isEnter = false; } } if (sc.m_skillTime > sc.m_currentSkillData.LaterTime) { if (sc.m_skillStstus != SkillStatusEnum.Finish) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Finish; m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity); } else { sc.m_isEnter = false; } } } }
public void PlayerJoin(EntityBase entity) { if (!entity.GetExistComp <CommandComponent>()) { CommandComponent c = new CommandComponent(); entity.AddComp(c); } if (!entity.GetExistComp <ViewComponent>()) { ViewComponent c = new ViewComponent(); entity.AddComp(c); } if (!entity.GetExistComp <AssetComponent>()) { AssetComponent c = new AssetComponent(); c.m_assetName = "famale_01"; entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); entity.AddComp(c); } if (!entity.GetExistComp <PlayerComponent>()) { PlayerComponent c = new PlayerComponent(); entity.AddComp(c); } if (!entity.GetExistComp <SkillStatusComponent>()) { SkillStatusComponent c = new SkillStatusComponent(); DataTable data = DataManager.GetData("SkillData"); for (int i = 0; i < data.TableIDs.Count; i++) { c.m_skillList.Add(new SkillData(data.TableIDs[i], i)); } entity.AddComp(c); } if (!entity.GetExistComp <CDComponent>()) { CDComponent c = new CDComponent(); entity.AddComp(c); } if (!entity.GetExistComp <MoveComponent>()) { MoveComponent c = new MoveComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CampComponent>()) { CampComponent c = new CampComponent(); entity.AddComp(c); } if (!entity.GetExistComp <CollisionComponent>()) { CollisionComponent c = new CollisionComponent(); c.area.areaType = AreaType.Circle; c.area.radius = 0.5f; entity.AddComp(c); } if (!entity.GetExistComp <LifeComponent>()) { LifeComponent c = new LifeComponent(); c.maxLife = 100; c.life = 100; entity.AddComp(c); } //预测一个输入 //TODO 放在框架中 if (entity.GetExistComp <ConnectionComponent>()) { ConnectionComponent cc = entity.GetComp <ConnectionComponent>(); cc.m_lastInputCache = new CommandComponent(); } }
void ReceviceSkillHit(EntityBase entity, params object[] objs) { SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>(); CreateSkillAreaTip(entity, sc); }
public void SkillStatusLogic(EntityBase entity, int deltaTime) { SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>(); if (sc.m_skillStstus != SkillStatusEnum.Finish && sc.m_skillStstus != SkillStatusEnum.None) { sc.m_skillTime += deltaTime; if (sc.m_skillTime > sc.m_currentSkillData.BeforeTime * 1000) { if (sc.m_skillStstus != SkillStatusEnum.Current) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Current; } else { sc.m_isEnter = false; } } if (sc.m_skillTime > sc.m_currentSkillData.HitTime * 1000) { if (sc.m_currentSkillData.SkillInfo.m_Moment) { if (sc.m_isTriggerSkill == false) { sc.m_isTriggerSkill = true; sc.m_isHit = true; } else { sc.m_isHit = false; } } else { sc.m_skillTriggerTimeSpace -= deltaTime; if (sc.m_skillTriggerTimeSpace < 0) { sc.m_skillTriggerTimeSpace = (int)(sc.m_currentSkillData.SkillInfo.m_TriggerSpaceTime) * 1000; //加个伤害间隔 sc.m_isHit = true; } else { sc.m_isHit = false; } } } if (sc.m_skillTime > sc.m_currentSkillData.CurrentTime * 1000) { if (sc.m_skillStstus != SkillStatusEnum.Later) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Later; } else { sc.m_isEnter = false; } } if (sc.m_skillTime > sc.m_currentSkillData.LaterTime * 1000) { if (sc.m_skillStstus != SkillStatusEnum.Finish) { sc.m_isEnter = true; sc.m_skillStstus = SkillStatusEnum.Finish; } else { sc.m_isEnter = false; } } } }