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