private void HandleDir(TransformCom transCom) { if (transCom.ReqDir == DirType.None) { return; } DirType backDir = transCom.ForwardDir == DirType.Right ? DirType.Left : DirType.Right; DirType dirType = DirType.Right; if (transCom.ReqDir == DirType.Right) { dirType = transCom.ForwardDir; } else { dirType = backDir; } if (dirType == transCom.CurrDir) { return; } transCom.CurrDir = dirType; Vector3 dir = new Vector3(0, transCom.CurrDir == DirType.Right ? 0 : 180, 0); transCom.DisplayTrans.localEulerAngles = dir; transCom.ReqDir = DirType.None; }
private void HandleMove(TransformCom transCom, Collider2DCom collider2DCom, AnimCom animCom) { if (transCom.ReqMove.x != 0) { if (collider2DCom.Collider.Left && transCom.ReqMove.x < 0) { transCom.ReqMove.x = 0; } if (collider2DCom.Collider.Right && transCom.ReqMove.x > 0) { transCom.ReqMove.x = 0; } } if (transCom.ReqMove.y != 0) { if (collider2DCom.Collider.Up && transCom.ReqMove.y > 0) { transCom.ReqMove.y = 0; } if (collider2DCom.Collider.Down && transCom.ReqMove.y < 0) { transCom.ReqMove.y = 0; } } if (transCom.ReqMove == Vector3.zero) { return; } transCom.Translate(transCom.ReqMove); animCom.SetReqAnim("run"); transCom.ReqMove = Vector3.zero; }
protected override void HandleComs(List <BaseCom> comList) { GravityCom gravityCom = GetCom <GravityCom>(comList[0]); TransformCom transCom = GetCom <TransformCom>(comList[1]); float yDelta = gravityCom.Mass * _G * Time.deltaTime; transCom.ReqMove = new Vector3(transCom.ReqMove.x, transCom.ReqMove.y + yDelta); }
private Shape GetEntityColliderShape(Entity entity) { Collider2DCom collider2DCom = entity.GetCom <Collider2DCom>(); TransformCom transCom = entity.GetCom <TransformCom>(); Shape shape = collider2DCom.colliderShape; shape.Translate(transCom.GetPos()); return(shape); }
private void HandleMoveDir(PlayerMoveCom moveCom, TransformCom transCom) { if (moveCom.ReqMoveSpeed == 0) { return; } DirType dirType = moveCom.ReqMoveSpeed > 0 ? DirType.Right: DirType.Left; transCom.ReqDir = dirType; }
protected override void HandleComs(List <BaseCom> comList) { TransformCom transCom = GetCom <TransformCom>(comList[0]); Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[1]); AnimCom animCom = GetCom <AnimCom>(comList[2]); HandleDir(transCom); HandleMove(transCom, collider2DCom, animCom); transCom.UpdatePos(); }
/// <summary> /// 实体移动指定偏移 /// </summary> /// <param name="entity"></param> /// <param name="pos"></param> public static void MovePos(this Entity entity, Vector3 pos) { PlayerMoveCom playerMoveCom = entity.GetCom <PlayerMoveCom>(); if (playerMoveCom != null) { playerMoveCom.ReqMove = pos; } else { TransformCom transformCom = entity.GetCom <TransformCom>(); transformCom.ReqMove = pos; } }
public override void Tick(TimelineObj timelineObj) { if (timelineObj.ower == null) { return; } Entity entity = ECSLocate.ECS.GetEntity(timelineObj.ower.EntityId); if (entity == null) { return; } TransformCom transformCom = entity.GetCom <TransformCom>(); float xValue = (transformCom.CurrDir == DirType.Right ? 1 : -1) * movePos.x; Vector3 moveDelta = new Vector3(xValue, movePos.y, 0) * Time.deltaTime; entity.MovePos(moveDelta); }
protected override void HandleComs(List <BaseCom> comList) { WanderCom wanderCom = GetCom <WanderCom>(comList[0]); TransformCom transCom = GetCom <TransformCom>(comList[1]); Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[2]); PropertyCom propertyCom = GetCom <PropertyCom>(comList[3]); wanderCom.WanderDir = CalcWanderMoveDir(transCom, wanderCom, collider2DCom); //更新方向 transCom.ReqDir = wanderCom.WanderDir; //位移 Vector3 delta = new Vector3(wanderCom.WanderDir == DirType.Right ? 1 : -1, 0, 0); delta = delta * propertyCom.MoveSpeed.Curr * Time.deltaTime; transCom.ReqMove = delta; }
protected override void OnEnter(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; string skillId = workData.GetParam().GetString(); //获取环境数据 NodeActionContext context = GetContext <NodeActionContext>(wData); PushSkillData userData = context.GetUserData <PushSkillData>(); userData.skillId = skillId; //打断移动 TransformCom transformCom = workData.MEntity.GetCom <TransformCom>(); if (transformCom != null) { transformCom.ReqMove = Vector3.zero; transformCom.ReqDir = DirType.None; } PlayerMoveCom moveCom = workData.MEntity.GetCom <PlayerMoveCom>(); if (moveCom != null) { moveCom.HasNoReqMove = true; moveCom.Rig.velocity = Vector2.zero; } //释放技能 SkillCom skillCom = workData.MEntity.GetCom <SkillCom>(); if (skillCom.ReleaseSkill(skillId)) { userData.skillId = skillId; LCECS.ECSLocate.Log.Log("释放技能成功>>>>>", skillId); } else { userData.skillId = "-1"; LCECS.ECSLocate.Log.LogError("释放技能失败>>>>>", skillId); } }
public DirType CalcWanderMoveDir(TransformCom transCom, WanderCom wanderCom, Collider2DCom collider2DCom) { //碰撞判断 if (wanderCom.WanderDir == DirType.None) { return((DirType)UnityEngine.Random.Range((int)DirType.Left, (int)DirType.Right)); } //不在地面 if (!collider2DCom.Collider.Down) { return(wanderCom.WanderDir == DirType.Left ? DirType.Right : DirType.Left); } if (collider2DCom.Collider.Left) { return(DirType.Right); } if (collider2DCom.Collider.Right) { return(DirType.Left); } //范围判断 if (wanderCom.WanderRange > 0) { Vector3 currPos = transCom.GetPos(); if (Vector2.Distance(transCom.CreatePos, currPos) > wanderCom.WanderRange) { if (currPos.x - transCom.CreatePos.x > 0) { return(DirType.Left); } else { return(DirType.Right); } } } return(wanderCom.WanderDir); }
protected override void HandleComs(List <BaseCom> comList) { GazeSurroundCom gazeSurroundCom = GetCom <GazeSurroundCom>(comList[0]); TransformCom transCom = GetCom <TransformCom>(comList[1]); PropertyCom propertyCom = GetCom <PropertyCom>(comList[2]); if (gazeSurroundCom.gazeUid <= 0) { return; } Entity gazeEntity = ECSLocate.ECS.GetEntity(gazeSurroundCom.gazeUid); if (gazeEntity == null) { return; } Vector2 selfPos = transCom.GetPos(); Vector2 targetPos = gazeEntity.GetCom <TransformCom>().GetPos(); //方向 if (selfPos.x - targetPos.x > 0) { transCom.ReqDir = DirType.Left; } else { transCom.ReqDir = DirType.Right; } //移动 gazeSurroundCom.moveDir = CalcWanderMoveDir(selfPos, gazeSurroundCom, targetPos); Vector3 delta = new Vector3(gazeSurroundCom.moveDir == DirType.Right ? 1 : -1, 0, 0); delta = delta * propertyCom.MoveSpeed.Curr * Time.deltaTime; transCom.ReqMove = delta; }
protected override void OnEnter(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; //参数 Vector2 inputMove = workData.GetParam().GetVect2(); //组件 PlayerMoveCom moveCom = workData.MEntity.GetCom <PlayerMoveCom>(); TransformCom transCom = workData.MEntity.GetCom <TransformCom>(); Collider2DCom collider2DCom = workData.MEntity.GetCom <Collider2DCom>(); PropertyCom propertyCom = workData.MEntity.GetCom <PropertyCom>(); //跳跃阶段重置 ResetJumpStep(moveCom, collider2DCom); if (CheckMoveTypeInCD(moveCom)) { moveCom.HasNoReqMove = true; return; } else { moveCom.HasNoReqMove = false; } MoveType moveType = CalcMoveType(collider2DCom, moveCom, inputMove); switch (moveType) { case MoveType.None: moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = 0; break; case MoveType.Run: moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * inputMove.x; moveCom.ReqJumpSpeed = 0; break; case MoveType.Jump: moveCom.JumpStep++; moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = propertyCom.JumpSpeed.Curr * inputMove.y; break; case MoveType.Climb: inputMove.x = inputMove.x < 0 ? -inputMove.x : inputMove.x; moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr * inputMove.x; break; case MoveType.ClimbJump: int moveValue = inputMove.x < 0 ? -1 : 1; moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * moveValue; moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr; break; case MoveType.GrabWall: moveCom.ReqMoveSpeed = 0; moveCom.ReqJumpSpeed = 0; break; default: break; } ClampMoveSpeed(moveCom, collider2DCom); HandleMoveTypeCD(moveType, moveCom); HandleMoveDir(moveCom, transCom); //记录状态 moveCom.CurrMoveType = moveType; if (inputMove.y != 0) { Debug.LogWarningFormat("BEV_ACT_Move>>>>>{0}--ReqMoveSpeed:{1}--ReqJumpSpeed:{2}", moveType.ToString(), moveCom.ReqMoveSpeed, moveCom.ReqJumpSpeed); } }
public override bool OnMakeTrue(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; TransformCom selfTransCom = workData.MEntity.GetCom <TransformCom>(); ActorObj actor = MapLocate.Map.GetActor(workData.MEntity.Uid); CampCom selfCampCom = workData.MEntity.GetCom <CampCom>(); if (actor == null || actor.Area == null) { return(false); } if (selfCampCom == null || selfCampCom.Camp == CampType.Neutral) { return(false); } Shape checkShape = checkRange; checkShape.Translate(selfTransCom.GetPos()); GameLocate.ShapeRender.AddShape(ShapeRenderType.攻击范围, workData.MEntity.Uid, checkShape); //检测保存的 if (wData.Blackboard.ContainsKey(EnemyInAttackRangeKey)) { int saveEntityId = (int)wData.Blackboard[EnemyInAttackRangeKey]; Entity saveEntity = LCECS.ECSLocate.ECS.GetEntity(saveEntityId); if (saveEntity == null) { wData.Blackboard.Remove(EnemyInAttackRangeKey); } Shape saveShape = GetEntityColliderShape(saveEntity); if (!saveShape.Intersects(checkShape)) { wData.Blackboard.Remove(EnemyInAttackRangeKey); } else { return(true); } } //先检测玩家 Entity playerEntity = LCECS.ECSLocate.Player.GetPlayerEntity(); if (playerEntity != null) { TransformCom transCom = playerEntity.GetCom <TransformCom>(); if (checkShape.ContainPoint(transCom.GetPos())) { wData.Blackboard.Add(EnemyInAttackRangeKey, playerEntity.Uid); return(true); } } //敌对演员 foreach (var item in actor.Area.Actors.Keys) { if (item == workData.MEntity.Uid) { continue; } Entity entity = LCECS.ECSLocate.ECS.GetEntity(item); if (entity != null) { CampCom campCom = entity.GetCom <CampCom>(); if (campCom != null && campCom.Camp != selfCampCom.Camp) { TransformCom transCom = entity.GetCom <TransformCom>(); if (checkShape.ContainPoint(transCom.GetPos())) { wData.Blackboard.Add(EnemyInAttackRangeKey, entity.Uid); return(true); } } } } return(false); }