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 override bool checkProceduralPrecondition(GameObject agent, BlackBoard bb) { CampComponent[] c = bb.GetData("camp") as CampComponent[]; if (c == null || c.Length <= 0) { return(false); } camp = c[0]; target = camp.gameObject; return(camp != null); }
void CreateFlyObject(SkillDataGenerate skillData, EntityBase skiller) { CampComponent campComp = skiller.GetComp <CampComponent>(); //Debug.Log("CreateFlyObject " + skiller.ID + " " + campComp.creater); if (skillData.m_FlyObjectName.Length != 0) { List <CreatPostionInfo> poss = GetCreatePostionInfos(skillData, skiller, skillData.m_FlyObjectName.Length); for (int i = 0; i < poss.Count; i++) { FlyDataGenerate flyData = DataGenerateManager <FlyDataGenerate> .GetData(skillData.m_FlyObjectName[i]); TransfromComponent tc = new TransfromComponent(); tc.pos = poss[i].m_pos; tc.dir = poss[i].m_dir; MoveComponent mc = new MoveComponent(); mc.pos = poss[i].m_pos; mc.dir = poss[i].m_dir; mc.m_velocity = flyData.m_Speed; LifeSpanComponent lsc = new LifeSpanComponent(); lsc.lifeTime = flyData.m_LiveTime; AssetComponent ac = new AssetComponent(); ac.m_assetName = flyData.m_ModelName; CampComponent cp = new CampComponent(); cp.camp = campComp.camp; cp.creater = campComp.creater; CollisionComponent cc = new CollisionComponent(); cc.area.areaType = AreaType.Circle; cc.area.radius = flyData.m_Radius / 1000; FlyObjectComponent fc = new FlyObjectComponent(); fc.createrID = skiller.ID; fc.damage = skillData.m_FlyDamageValue; fc.flyObjectID = skillData.m_FlyObjectName[i]; string identify = skiller.ID + "FlyObject" + i + poss[i].m_pos; m_world.CreateEntity(identify, tc, mc, ac, cp, lsc, cc, fc); } } }
public static void FlyDamageLogic(WorldBase world, EntityBase fly, EntityBase entity) { FlyObjectComponent fc = fly.GetComp <FlyObjectComponent>(); LifeComponent lc = entity.GetComp <LifeComponent>(); CampComponent campComp = fly.GetComp <CampComponent>(); MoveComponent mc = fly.GetComp <MoveComponent>(); //Debug.Log("FlyDamageLogic " + entity.ID + " ===> campComp.creater " + campComp.creater + " " + world.GetEntity(campComp.creater).ID); Damage(world, world.GetEntity(campComp.creater), entity, fc.damage); //飞行物击飞 BlowFly(world, fly, entity, fc.FlyData.m_BlowFlyID); //飞行物Buff AddBuff(world, world.GetEntity(campComp.creater), entity, fc.FlyData.m_HurtBuff); //释放触发技能 //TokenUseSkill(world,campComp.creater,fc.FlyData.m_TriggerSkill, mc.pos.ToVector(),mc.dir.ToVector()); }
public void ECSBeRecover(EntityBase entity, params object[] pbjs) { PerfabComponent pc = entity.GetComp <PerfabComponent>(); LifeComponent lc = entity.GetComp <LifeComponent>(); PlayerComponent plc = entity.GetComp <PlayerComponent>(); CampComponent cc = entity.GetComp <CampComponent>(); UpdateLifeSliderRecover((float)lc.Life / (float)lc.maxLife); float recoverNum = lc.Life - n_oldHp; if (recoverNum > 0) { //if ((bool)(args[1]) == false || character.m_camp == Camp.Brave)//怪物的自动回血,不显示 { DisplayNum(lc.Life - n_oldHp, Camp.Brave, TextDisplaySizeType.Middle, TextDisplayStyleType.Recover); } } n_oldHp = lc.Life; }
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); } }
void DamageLogic(EntityBase entity) { CollisionComponent cc = entity.GetComp <CollisionComponent>(); FlyObjectComponent fc = entity.GetComp <FlyObjectComponent>(); CampComponent acc = entity.GetComp <CampComponent>(); if (cc.CollisionList.Count > 0) { for (int i = 0; i < cc.CollisionList.Count; i++) { if (cc.CollisionList[i].GetExistComp <LifeComponent>() && cc.CollisionList[i].GetExistComp <CampComponent>() && acc.creater != cc.CollisionList[i].GetComp <CampComponent>().creater) { //Debug.Log("fly DamageLogic frame-> " + m_world.FrameCount + " id " + cc.CollisionList[i].ID + " Fly ID " + entity.ID); if (!fc.damageList.Contains(cc.CollisionList[i].ID)) //第一次伤害 { SkillUtils.FlyDamageLogic(m_world, entity, cc.CollisionList[i]); fc.damageList.Add(cc.CollisionList[i].ID); } //不能穿人销毁飞行物 if (!fc.FlyData.m_AcrossEnemy) { m_world.ClientDestroyEntity(entity.ID); } //Debug.Log("fc.FlyData.m_AcrossEnemy " + fc.FlyData.m_AcrossEnemy); } if (cc.CollisionList[i].GetExistComp <BlockComponent>()) { //不能穿墙摧毁飞行物 if (fc.FlyData.m_CollisionTrigger) { m_world.ClientDestroyEntity(entity.ID); } } } } }
List <EntityBase> GetSkillDamageList(EntityBase entity, SkillDataGenerate skillData) { List <EntityBase> result = new List <EntityBase>(); List <EntityBase> list = GetEntityList(new string[] { "CollisionComponent", "LifeComponent", "CampComponent" }); UpdateArea(skillAreaCache, skillData.m_EffectArea, entity); for (int i = 0; i < list.Count; i++) { CollisionComponent bcc = list[i].GetComp <CollisionComponent>(); CampComponent cc = list[i].GetComp <CampComponent>(); if (skillAreaCache.AreaCollideSucceed(bcc.area) && entity.ID != list[i].ID) { result.Add(list[i]); } } return(result); }
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); } }
void CreateFlyObject(SkillDataGenerate skillData, EntityBase skiller) { CampComponent campComp = skiller.GetComp <CampComponent>(); if (skillData.m_FlyObjectName.Length != 0) { List <CreatPostionInfo> poss = GetCreatePostionInfos(skillData, skiller, skillData.m_FlyObjectName.Length); for (int i = 0; i < poss.Count; i++) { FlyDataGenerate flyData = DataGenerateManager <FlyDataGenerate> .GetData(skillData.m_FlyObjectName[i]); MoveComponent mc = new MoveComponent(); mc.pos.FromVector(poss[i].m_pos); mc.dir.FromVector(poss[i].m_dir); mc.m_velocity = (int)(flyData.m_Speed * 1000); LifeSpanComponent lsc = new LifeSpanComponent(); lsc.lifeTime = (int)(flyData.m_LiveTime * 1000); AssetComponent ac = new AssetComponent(); ac.m_assetName = flyData.m_ModelName; CampComponent cp = new CampComponent(); cp.camp = campComp.camp; CollisionComponent cc = new CollisionComponent(); cc.area.areaType = AreaType.Circle; cc.area.radius = flyData.m_Radius; FlyObjectComponent fc = new FlyObjectComponent(); fc.createrID = skiller.ID; fc.damage = skillData.m_DamageValue; m_world.CreateEntity(mc, ac, cp, lsc, cc, fc); Debug.Log(poss[i].m_pos.ToString()); } } }
public void Damage(EntityBase skiller, EntityBase hurter, SkillDataGenerate skillData) { bool isCrit = false; bool isDisrupting = false; int damageNumber = DamageValueFormula(skillData, skiller, hurter, out isCrit, out isDisrupting); if (damageNumber == 0) { return; } CampComponent acc = skiller.GetComp <CampComponent>(); CampComponent bcc = hurter.GetComp <CampComponent>(); //Debug.Log("Damage == " + damageNumber + " hurter " + hurter.ID + " acc " + acc.creater + " bcc " + bcc.creater + " frame " + m_world.FrameCount); //TODO 吸血 Absorb(damageNumber, skiller, skillData); //伤害处理 SkillUtils.Damage(m_world, skiller, hurter, damageNumber); }
public void SetEntity(EntityBase entity) { if (CameraService.Instance.m_mainCameraGo == null) { return; } PerfabComponent pc = entity.GetComp <PerfabComponent>(); LifeComponent lc = entity.GetComp <LifeComponent>(); PlayerComponent plc = entity.GetComp <PlayerComponent>(); CampComponent cc = entity.GetComp <CampComponent>(); mainCamera = CameraService.Instance.m_mainCamera; m_entityID = entity.ID; GetEventKey(m_entityID); //ECSEvent.AddListener(m_InitKey, InitCharacter); //ECSEvent.AddListener(m_MoveKey, RefreshPoition); entity.World.eventSystem.AddListener(m_DamageKey, ECSBeAttack, true); entity.World.eventSystem.AddListener(m_RecoverKey, ECSBeRecover, true); //ECSEvent.AddListener(m_SKillKey, UseSkill); //ECSEvent.AddListener(m_AttackKey, UseSkill); //ECSEvent.AddListener(m_BeBreakKey, BeBreak); go_character = pc.perfab.gameObject; n_oldHp = lc.maxLife; //TODO 血条高度读取配置 v3_FollowOffset.y = -0.15f * Screen.height; bloodIsFull = true; UpdateSliderLength(0, lc.maxLife); InitLifeSlider(cc.camp); }
public void ECSBeAttack(EntityBase entity, params object[] pbjs) { Debug.Log("ECSBeAttack " + entity.World.FrameCount); PerfabComponent pc = entity.GetComp <PerfabComponent>(); LifeComponent lc = entity.GetComp <LifeComponent>(); PlayerComponent plc = entity.GetComp <PlayerComponent>(); CampComponent cc = entity.GetComp <CampComponent>(); //Debug.Log("BeAttack -->"); UpdateLifeSlider((float)lc.Life / (float)lc.maxLife); UpdateSliderLength(0, lc.maxLife); TextDisplaySizeType textSizeType = TextDisplaySizeType.Small; //if ((bool)args[1] == true) //{ // textSizeType = TextDisplaySizeType.Large; //} DisplayNum(n_oldHp - lc.Life, cc.camp, textSizeType, TextDisplayStyleType.Hurt); n_oldHp = lc.Life; }
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 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(); } }
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; }