コード例 #1
0
ファイル: GameAttributeMap.cs プロジェクト: yg7845333/mooege
        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);
        }
コード例 #2
0
        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);
        }