private void ServerEvent(Client sender, string ev, object[] args) { if (ev == "QUERY_MODEL_RESPONSE") { int model = (int)args[0]; Vector3 max = (Vector3)args[1]; Vector3 min = (Vector3)args[2]; var mdims = new ModelDimensions() { Model = model, Max = max, Min = min }; if (_callbacks.ContainsKey(model) && _callbacks[model] != null && _callbacks[model].Count > 0) { foreach (var callback in _callbacks[model]) { callback(mdims); } } _callbacks.Remove(model); if (!_cachedDims.ContainsKey(model)) { _cachedDims.Add(model, mdims); } } }
private void SetupScaleAndPosition() { ModelDimensions dimensions = model.Dimensions; scale = 0f; float dx = dimensions.Max.X - dimensions.Min.X; float dy = dimensions.Max.Y - dimensions.Min.Y; float dz = dimensions.Max.Z - dimensions.Min.Z; float size = (float)(75 / 10); CalcScale(dx, size); CalcScale(dy, size); CalcScale(dz, size); if (scale == 0f) { scale = 1f; } // Расчитать позицию (расположить модель посередине стола) position.X = -(dx / 2 + dimensions.Min.X) * scale; position.Y = -(dy / 2 + dimensions.Min.Y) * scale; position.Z = (-dimensions.Min.Z) * scale; }
private ModelDimensions RequestModelDimensions(int model) { if (_cachedDims.ContainsKey(model)) { return(_cachedDims[model]); } var players = API.getAllPlayers(); if (players.Count == 0) { return(null); } ModelDimensions dims = null; Action <ModelDimensions> callback = new Action <ModelDimensions>((m) => { dims = m; }); if (!_callbacks.ContainsKey(model)) { _callbacks.Add(model, new List <Action <ModelDimensions> >()); } _callbacks[model].Add(callback); players[0].triggerEvent("QUERY_MODEL_SIZE", model); DateTime start = DateTime.Now; while (dims == null && DateTime.Now.Subtract(start).TotalMilliseconds < 1000) { API.sleep(0); } return(dims); }