Example #1
0
        public override ParamGroup ExcCmd()
        {
            SingleManager <SnakeManager> .Get().CreateCmd <RotateCmd>(this, group.GetParam(CmdType.Rotate))?.Exc();

            SingleManager <SnakeManager> .Get().CreateCmd <MoveCmd>(this, group.GetParam(CmdType.Move))?.Exc();

            return(group);
        }
Example #2
0
        public override ParamGroup ExcCmd()
        {
            ParamGroup param = cmdFlow.Dequeue();

            SingleManager <SnakeManager> .Get().CreateCmd <RotateCmd>(this, param.GetParam(CmdType.Rotate))?.Exc();

            SingleManager <SnakeManager> .Get().CreateCmd <MoveCmd>(this, param.GetParam(CmdType.Move))?.Exc();

            return(param);
        }
Example #3
0
        public override RotateParam SubmitRotate()
        {
            RotateParam param = new RotateParam();

            if (_reached)
            {
                return(param);
            }

            param = SingleManager <ControllerManager> .Get().CalculateRotate(UID, _target);

            if (Mathf.Abs(param.rotSpeed) < 0.0001f)
            {
                _reached = true;
            }
            return(param);
        }
Example #4
0
        public void UpdateExc()
        {
            for (int i = 0; i < controllers.Length; i++)
            {
                if (controllers[i] == null)
                {
                    continue;
                }

                Snaker snake = SingleManager <SnakeManager> .Get().GetSnake(controllers[i].UID);

                if (snake != null)
                {
                    Inject(snake.RotateControl, controllers[i].Rotate);
                }
            }
        }
Example #5
0
        public RotateParam CalculateRotate(int uid, Vector3 target)
        {
            Snaker snake = SingleManager <SnakeManager> .Get().GetSnake(uid);

            RotateParam param = new RotateParam();

            if (snake != null)
            {
                float angle = Vector3.SignedAngle(snake.Direction, target - snake.GetPosition(), Vector3.up);
                if (angle > 0)
                {
                    param.rotSpeed = Mathf.Min(angle, snake.RotateSpeed);
                }
                else
                {
                    param.rotSpeed = Mathf.Max(angle, -snake.RotateSpeed);
                }
            }

            return(param);
        }