internal IList <Segment> CreateSegmentsImpl(IPositionable startNode, IPositionable endNode, object type, Vector start_dir, Vector end_dir, IPositionable middle_pos) { NetOptions options = NetOptionsUtil.Ensure(type); CreateSegmentMessage msg = new CreateSegmentMessage() { start_node_id = startNode is Node ? (ushort)((Node)startNode).id : (ushort)0, end_node_id = endNode is Node ? (ushort)((Node)endNode).id : (ushort)0, start_postition = startNode is Node ? null : startNode.position, end_postition = endNode is Node ? null : endNode.position, net_options = options, start_dir = start_dir, end_dir = end_dir, control_point = middle_pos?.position, auto_split = true }; PythonList <Segment> shell = new PythonList <Segment>(); var handle = ClientHandler.Instance.RemoteCall(Contracts.CreateSegments, msg, (ret, error) => { if (error != null) { shell.AssignData(null, error); return(null); } NetSegmentListMessage raw = ret as NetSegmentListMessage; shell.AssignData(raw.list.Select((item) => ObjectStorage.Instance.Segments.SaveData(item)).ToList()); return(null); }); shell.CacheFunc = () => { ClientHandler.Instance.WaitOnHandle(handle); }; return(shell); }
internal Segment CreateSegmentImpl(IPositionable startNode, IPositionable endNode, object type, Vector start_dir, Vector end_dir, IPositionable middle_pos) { NetOptions options = NetOptionsUtil.Ensure(type); CreateSegmentMessage msg = new CreateSegmentMessage() { start_node_id = startNode is Node ? (ushort)((Node)startNode).id : (ushort)0, end_node_id = endNode is Node ? (ushort)((Node)endNode).id : (ushort)0, start_postition = startNode is Node ? null : startNode.position, end_postition = endNode is Node ? null : endNode.position, net_options = options, start_dir = start_dir, end_dir = end_dir, control_point = middle_pos?.position }; Segment shell = ObjectStorage.Instance.Segments.CreateShell(); ClientHandler.Instance.RemoteCall(Contracts.CreateSegment, msg, (ret, error) => { if (error != null) { shell.AssignData(null, error); return(null); } NetSegmentData data = (NetSegmentData)ret; ObjectStorage.Instance.Segments.AddDataToDictionary(data); shell.AssignData(data); return(null); }); return(shell); }
internal static NetOptions Ensure(object obj) { if (!(obj is string) && !(obj is NetOptions) && !(obj is NetPrefab)) { throw new Exception("Segment type must be prefab name, NetPrefab or NetOptions object - not " + obj.GetType().Name); } NetOptions options = obj as NetOptions ?? new NetOptions(obj is NetPrefab ? ((NetPrefab)obj).name : (string)obj); return(options); }
private PathBuilder(GameAPI api, IPositionable startNode, object options = null) { if (options == null && startNode is Node) { options = ((Node)startNode).prefab_name; } else if (options == null) { throw new Exception("You must provide prefab name or NetOptions as the second param, if that connot be inferred from first param"); } NetOptions parsedOptions = NetOptionsUtil.Ensure(options); this.api = api; last_position = startNode; this.options = parsedOptions; }
internal Segment CreateSegmentImpl(IPositionable startNode, IPositionable endNode, object type, Vector start_dir, Vector end_dir, IPositionable middle_pos) { NetOptions options = NetOptionsUtil.Ensure(type); CreateSegmentMessage msg = new CreateSegmentMessage() { start_node_id = startNode is Node ? (ushort)((Node)startNode).id : (ushort)0, end_node_id = endNode is Node ? (ushort)((Node)endNode).id : (ushort)0, start_postition = startNode is Node ? null : startNode.position, end_postition = endNode is Node ? null : endNode.position, net_options = options, start_dir = start_dir, end_dir = end_dir, control_point = middle_pos?.position }; return(new Segment(api.client.RemoteCall <NetSegmentMessage>(Contracts.CreateSegment, msg), api)); }
internal IList <Segment> CreateSegmentsImpl(IPositionable startNode, IPositionable endNode, object type, Vector start_dir, Vector end_dir, IPositionable middle_pos) { NetOptions options = NetOptionsUtil.Ensure(type); CreateSegmentMessage msg = new CreateSegmentMessage() { start_node_id = startNode is Node ? (ushort)((Node)startNode).id : (ushort)0, end_node_id = endNode is Node ? (ushort)((Node)endNode).id : (ushort)0, start_postition = startNode is Node ? null : startNode.position, end_postition = endNode is Node ? null : endNode.position, net_options = options, start_dir = start_dir, end_dir = end_dir, control_point = middle_pos?.position, auto_split = true }; return(NetLogic.PrepareSegmentList(api.client.RemoteCall <NetSegmentListMessage>(Contracts.CreateSegments, msg).list, api)); }