Exemple #1
0
        protected override void Execute(List <ClientEntity> entities)
        {
            foreach (var e in entities)
            {
                BattleAction     action = e.battleAction.value;
                BattleActionType type   = action.type;
                int          id         = action.subject;
                ClientEntity subject    = _context.GetEntityWithBattleUnitId(id);

                switch (type)
                {
                case BattleActionType.Move:
                    BattleActionMove battleActionMove = action as BattleActionMove;
                    subject.ReplaceSpeed(battleActionMove.speed);
                    subject.ReplaceDirection(battleActionMove.dir);
                    break;

                case BattleActionType.Stop:
                    BattleActionStop battleActionStop = action as BattleActionStop;
                    subject.ReplaceSpeed(0);
                    subject.ReplacePosition(battleActionStop.position);
                    break;

                default:
                    break;
                }
            }
        }
Exemple #2
0
        public void Execute()
        {
            var entities = _context.GetGroup(ServerMatcher.Position);

            foreach (var e in entities)
            {
                if (!e.isMoving)
                {
                    continue;
                }

                var oldPos = e.position.value;
                var newPos = oldPos + e.direction.value * e.speed.value * AppConst.TimeStep;
                e.ReplacePosition(newPos);


                // 足够近
                float distance = Vec2.Distance(e.targetPos.value, e.position.value);
                if (distance < e.speed.value * AppConst.TimeStep)
                {
                    if (Math.Abs(distance) < AppConst.Epsilon)
                    {
                        e.isMoving = false;
                        BattleAction battleAction = new BattleActionStop()
                        {
                            subject  = e.battleUnitId.value,
                            position = e.position.value
                        };
                        _context.CreateEntity().AddBattleAction(battleAction);
                    }
                    else
                    {
                        var dir = e.direction.value;
                        e.ReplaceSpeed(distance / AppConst.TimeStep);
                        BattleAction battleAction = new BattleActionMove()
                        {
                            subject = e.battleUnitId.value,
                            speed   = e.speed.value,
                            dir     = e.direction.value
                        };
                        _context.CreateEntity().AddBattleAction(battleAction);
                    }
                }
            }
        }