private List <GameMessage> GetMessageListFromEnumerator(IEnumerator <KeyId> e, int count, bool level) { var messageList = new List <GameMessage>(); if (count == 0) { return(messageList); } if (count == 1) { AttributeSetValueMessage msg = new AttributeSetValueMessage(); if (!e.MoveNext()) { throw new Exception("Expected value in enumerator."); } var keyid = e.Current; var value = _attributeValues[keyid]; int id = keyid.Id; msg.ActorID = _parent.DynamicID; msg.Field1 = new Mooege.Net.GS.Message.Fields.NetAttributeKeyValue(); msg.Field1.Field0 = keyid.Key; // FIXME: need to rework NetAttributeKeyValue, and maybe rename GameAttribute to NetAttribute? msg.Field1.Attribute = GameAttribute.Attributes[id]; // FIXME if (msg.Field1.Attribute.IsInteger) { msg.Field1.Int = value.Value; } else { msg.Field1.Float = value.ValueF; } messageList.Add(msg); } else { // FIXME: probably need to rework AttributesSetValues as well a bit if (count >= 15) { for (; count >= 15; count -= 15) { AttributesSetValuesMessage msg = new AttributesSetValuesMessage(); msg.ActorID = _parent.DynamicID; msg.atKeyVals = new Mooege.Net.GS.Message.Fields.NetAttributeKeyValue[15]; for (int i = 0; i < 15; i++) { msg.atKeyVals[i] = new Mooege.Net.GS.Message.Fields.NetAttributeKeyValue(); } for (int i = 0; i < 15; i++) { KeyId keyid; if (!e.MoveNext()) { if (level) { keyid = new KeyId { Id = GameAttribute.Level.Id }; level = false; } else { throw new Exception("Expected values in enumerator."); } } else { keyid = e.Current; } var kv = msg.atKeyVals[i]; if (level && keyid.Id == GameAttribute.Level.Id) { i--; continue; } var value = _attributeValues[keyid]; var id = keyid.Id; kv.Field0 = keyid.Key; kv.Attribute = GameAttribute.Attributes[id]; if (kv.Attribute.IsInteger) { kv.Int = value.Value; } else { kv.Float = value.ValueF; } } messageList.Add(msg); } } if (count > 0) { AttributesSetValuesMessage msg = new AttributesSetValuesMessage(); msg.ActorID = _parent.DynamicID; msg.atKeyVals = new Mooege.Net.GS.Message.Fields.NetAttributeKeyValue[count]; for (int i = 0; i < count; i++) { KeyId keyid; if (!e.MoveNext()) { if (level) { keyid = new KeyId { Id = GameAttribute.Level.Id }; level = false; } else { throw new Exception("Expected values in enumerator."); } } else { keyid = e.Current; } var kv = new Mooege.Net.GS.Message.Fields.NetAttributeKeyValue(); msg.atKeyVals[i] = kv; if (level && keyid.Id == GameAttribute.Level.Id) { i--; continue; } var value = _attributeValues[keyid]; var id = keyid.Id; kv.Field0 = keyid.Key; kv.Attribute = GameAttribute.Attributes[id]; if (kv.Attribute.IsInteger) { kv.Int = value.Value; } else { kv.Float = value.ValueF; } } messageList.Add(msg); } } return(messageList); }
private List <GameMessage> GetChangedMessageList() { var messageList = new List <GameMessage>(); if (_changedAttributesQueue.Count == 0) { return(messageList); } /*if (_changedAttributesQueue.Count == 1) * { * AttributeSetValueMessage msg = new AttributeSetValueMessage(); * Int32 Id = _changedAttributesQueue.Dequeue(); * AttributeValue value = _attributeValues[Id]; * * msg.ActorID = _parent.DynamicID; * msg.NetAttribute = new NetAttributeKeyValue(); * * msg.NetAttribute.Attribute = GameAttributeStaticList.AttributesByID[Id]; * if (msg.NetAttribute.Attribute.IsInteger) * msg.NetAttribute.Int = value.Value; * else * msg.NetAttribute.Float = value.ValueF; * * messageList.Add(msg); * } * else * {*/ while (_changedAttributesQueue.Count >= 15) { AttributesSetValuesMessage msg = new AttributesSetValuesMessage(); msg.ActorID = owner.DynamicID; msg.atKeyVals = new NetAttributeKeyValue[15]; for (int i = 0; i < 15; i++) { Int32 Id = _changedAttributesQueue.Dequeue(); AttributeValue value = _currentAttributeMap[Id]; msg.atKeyVals[i] = new NetAttributeKeyValue(); msg.atKeyVals[i].Attribute = GameAttributeStaticList.AttributesByID[Id]; if (msg.atKeyVals[i].Attribute.IsInteger) { msg.atKeyVals[i].Int = value.Value; } else { msg.atKeyVals[i].Float = value.ValueF; } } messageList.Add(msg); // Agrega el msg con 15 netattr } if (_changedAttributesQueue.Count > 0) { AttributesSetValuesMessage msg = new AttributesSetValuesMessage(); msg.ActorID = owner.DynamicID; msg.atKeyVals = new NetAttributeKeyValue[_changedAttributesQueue.Count]; int countleft = _changedAttributesQueue.Count; for (int i = 0; i < countleft; i++) { Int32 Id = _changedAttributesQueue.Dequeue(); AttributeValue value = _currentAttributeMap[Id]; msg.atKeyVals[i] = new NetAttributeKeyValue(); msg.atKeyVals[i].Attribute = GameAttributeStaticList.AttributesByID[Id]; if (msg.atKeyVals[i].Attribute.IsInteger) { msg.atKeyVals[i].Int = value.Value; } else { msg.atKeyVals[i].Float = value.ValueF; } } messageList.Add(msg); // Agrega el msg con len left (entre 1 y 15) } return(messageList); }