unsafe void IConverter <CharBufView> .Convert(ref char *dst, char *end, CharBufView value, FormatSpec formatSpec) { int lpadding = 0, rpadding = 0; if (formatSpec.argWidth < 0) { rpadding = -formatSpec.argWidth - value.length; } else { lpadding = formatSpec.argWidth - value.length; } while (lpadding-- > 0 && dst < end) { *dst++ = ' '; } for (int i = 0, l = value.length; i < l && dst < end; i++) { *dst++ = value.buf[i + value.start]; } while (rpadding-- > 0 && dst < end) { *dst++ = ' '; } }
public void SendChatAnnouncement(CharBufView message) { var time = (Game.Clock.ElapsedMilliseconds - m_StartTime) / 1000; var minutes = (int)time / 60; var seconds = (int)time % 60; var formatted_length = StringFormatter.Write(ref _buf, 0, "<color=#ffffffff>[{0}:{1:00}]</color><color=#ffa500ff> {2}</color>", minutes, seconds, message); unsafe { fixed(char *ptr = message.buf) { GameDebug.Assert(message.length <= NativeString512.MaxLength); var msg = new NativeString512(); msg.CopyFrom(ptr, (ushort)message.length); var connectionEntities = m_ConnectionQuery.ToEntityArray(Allocator.TempJob); for (int i = 0; i < connectionEntities.Length; ++i) { var connectionEntity = connectionEntities[i]; m_RpcChatQueue.Schedule(EntityManager.GetBuffer <OutgoingRpcDataStreamBufferComponent>(connectionEntity), new RpcChatMessage { Message = msg }); } connectionEntities.Dispose(); } } }
public void SendChatAnnouncement(CharBufView message) { var time = (Game.Clock.ElapsedMilliseconds - m_StartTime) / 1000; var minutes = (int)time / 60; var seconds = (int)time % 60; var formatted_length = StringFormatter.Write(ref _buf, 0, "<color=#ffffffff>[{0}:{1:00}]</color><color=#ffa500ff> {2}</color>", minutes, seconds, message); m_NetworkServer.QueueEventBroadcast((ushort)GameNetworkEvents.EventType.Chat, true, (ref NetworkWriter writer) => { writer.WriteString("message", _buf, formatted_length, 256, NetworkWriter.OverrunBehaviour.WarnAndTrunc); }); }