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); }
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); }
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); }
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); } } }
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); }