Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        private void HandleMoveDir(PlayerMoveCom moveCom, TransformCom transCom)
        {
            if (moveCom.ReqMoveSpeed == 0)
            {
                return;
            }
            DirType dirType = moveCom.ReqMoveSpeed > 0 ? DirType.Right: DirType.Left;

            transCom.ReqDir = dirType;
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        /// <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;
            }
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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;
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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;
        }
Esempio n. 13
0
        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);
            }
        }
Esempio n. 14
0
        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);
        }