Пример #1
0
    BsonTreeModel::BsonTreeModel(const std::vector<MongoDocumentPtr> &documents, QObject *parent) :
        BaseClass(parent),
        _root(new BsonTreeItem(this))
    {
        for (int i = 0; i < documents.size(); ++i) {
            MongoDocumentPtr doc = documents[i]; 
            BsonTreeItem *child = new BsonTreeItem(doc->bsonObj(), _root);
            parseDocument(child, doc->bsonObj(), doc->bsonObj().isArray());

            QString idValue;
            BsonTreeItem *idItem = child->childByKey("_id");
            if (idItem) {
                idValue = idItem->value();
            }

            child->setKey(QString("(%1) %2").arg(i + 1).arg(idValue));

            int count = BsonUtils::elementsCount(doc->bsonObj());

            if (doc->bsonObj().isArray()) {
                child->setValue(arrayValue(count));
                child->setType(mongo::Array);
            } else {
                child->setValue(objectValue(count));
                child->setType(mongo::Object);
            }
            _root->addChild(child);
        }
    }
Пример #2
0
            void Opcode80E1::_run()
            {
                // @TODO: add implementation
                Logger::debug("SCRIPT") << "[80E1] [*] int metarule3(int meta, int p1, int p2, int p3)" << std::endl;
                auto dataStack = _script->dataStack();

                auto arg3 = dataStack->pop();
                auto arg2 = dataStack->pop();
                auto arg1 = dataStack->pop();
                auto meta = dataStack->popInteger();
                int result = 0;
                switch(meta)
                {
                    case 100: // rm_fixed_timer_event(object, fixed_param, 0)
                    {
                        auto state = Game::Game::getInstance()->locationState();
                        if (state)
                        {
                            state->removeTimerEvent(arg1.objectValue(), arg2.integerValue());
                        }
                        break;
                    }
                    case 101: // mark subtile visited on worldmap - mark_world_subtile_visited(x, y, radius)
                        break;
                    case 102: // METARULE3_SET_WM_MUSIC - (map index, ACM file name)
                        break;
                    case 103: // player_kill_count(critterType)
                        break;
                    case 104: // int mark_map_entrance_state(int map_idx, int state, int elev); elev -1 means for all elevations
                        break;
                    case 105: // int wm_get_subtile_state(int xPos, int yPos)  (0 - unknown, 1 - known, 2 - visited)
                        break;
                    case 106: // ObjectPtr tile_get_next_critter(int tile_num, int elev, ObjectPtr last_critter)
                        break;
                    case 107: // int art_change_fid_num(ObjectPtr who, int fid) - change base FID num for object
                        break;
                    case 108: // void tile_set_center(int tileNum) - center camera on given tile
                    {
                        auto state = Game::Game::getInstance()->locationState();
                        if (state)
                        {
                            state->centerCameraAtHexagon(arg1.integerValue());
                        }
                        break;
                    }
                    default:
                        _error("metarule3 - unknown meta: " + std::to_string(meta));
                        break;
                }
                dataStack->push(result);
            }
Пример #3
0
const Object::ConstPointer ExecutionEvent::GetObjectParameterForExecution(
    const std::string& parameterId) const
{
  if (command.IsNull())
  {
    throw ExecutionException(
        "No command is associated with this execution event"); //$NON-NLS-1$
  }

  try
  {
//    const ParameterType parameterType = command
//    .getParameterType(parameterId);
//    if (parameterType == null)
//    {
//      throw new ExecutionException(
//          "Command does not have a parameter type for the given parameter"); //$NON-NLS-1$
//    }
//    const AbstractParameterValueConverter valueConverter = parameterType
//    .getValueConverter();
//    if (valueConverter == null)
//    {
//      throw new ExecutionException(
//          "Command does not have a value converter"); //$NON-NLS-1$
//    }
    const std::string stringValue = this->GetParameter(parameterId);
    ObjectString::Pointer objectValue(new ObjectString(stringValue));
//    const Object objectValue = valueConverter
//    .convertToObject(stringValue);
    return objectValue;
  }
  catch (NotDefinedException e)
  {
    throw ExecutionException("Command is not defined", e); //$NON-NLS-1$
  }
//  catch (ParameterValueConversionException e)
//  {
//    throw new ExecutionException(
//        "The parameter string could not be converted to an object", e); //$NON-NLS-1$
//  }
}
Пример #4
0
bool RenderTargetConstructor( JSContext *cx, unsigned argc, jsval *vp )
{
    //printf( "RenderTarget Constructor!%d\n", argc );

    JS::CallArgs args = JS::CallArgsFromVp( argc, vp );

    JSObject *object = JS_NewObjectForConstructor( cx, &RenderTargetClass, args );
    RootedObject obj(cx, object ); RootedValue v(cx, JS::UndefinedValue() );
    JS_DefineFunctions( cx, HandleObject(obj), rendertarget_functions );
    JS_DefineProperty( cx, HandleObject(obj), "w", HandleValue(&v), JSPROP_SHARED, (JSPropertyOp) GetRenderTargetProperty, (JSStrictPropertyOp) SetRenderTargetProperty );
    JS_DefineProperty( cx, HandleObject(obj), "h", HandleValue(&v), JSPROP_SHARED, (JSPropertyOp) GetRenderTargetProperty, (JSStrictPropertyOp) SetRenderTargetProperty );
    JS_DefineProperty( cx, HandleObject(obj), "autoResize", HandleValue(&v), JSPROP_SHARED, (JSPropertyOp) GetRenderTargetProperty, (JSStrictPropertyOp) SetRenderTargetProperty );
    JS_DefineProperty( cx, HandleObject(obj), "main", HandleValue(&v), JSPROP_SHARED, (JSPropertyOp) GetRenderTargetProperty, (JSStrictPropertyOp) SetRenderTargetProperty );

    GLint w=0;
    GLint h=0;
    bool main=false;

    if ( argc >= 1 ) w=args[0].toInt32();
    if ( argc >= 2 ) h=args[1].toInt32();
    if ( argc >= 3 ) main=args[2].toBoolean();

    RenderTarget *target = new RenderTarget( w, h, main );

    JS_SetPrivate( object, target );
    args.rval().set( OBJECT_TO_JSVAL( object ) );

    //VG.Renderer().addResource(this);

    RootedValue rendererRC(cx); RootedObject global( cx,JS_GetGlobalForObject( cx, object ) );
    bool ok = JS_EvaluateScript( cx, HandleObject( global ), "VG.Renderer()", strlen("VG.Renderer()"), "unknown", 1, MutableHandleValue(&rendererRC) );    
    if ( ok )
    {
        RootedValue objectValue( cx, OBJECT_TO_JSVAL(object) );
        RootedObject renderer(cx, &rendererRC.toObject() ); MutableHandleValue handleValue( &rendererRC );
        ok=Call( cx, HandleObject(renderer), "addResource", HandleValueArray( objectValue ), handleValue );
    }

    return true;
}
 void OpcodeComparison::_run()
 {
     Logger::debug("SCRIPT") << "[8033-8038] [*] " << _cmpOpcodeName() << std::endl;
     auto bValue = _script->dataStack()->pop();
     auto aValue = _script->dataStack()->pop();
     int result = 0;
     switch (aValue.type())
     {
         case StackValue::Type::INTEGER:
         {
             int arg1 = aValue.integerValue();
             switch (bValue.type())
             {
                 case StackValue::Type::INTEGER:
                 {
                     result = _compare(arg1, bValue.integerValue()); // INTEGER op INTEGER
                     break;
                 }
                 case StackValue::Type::FLOAT:
                 {
                     result = _compare(arg1, bValue.floatValue()); // INTEGER op FLOAT
                     break;
                 }
                 case StackValue::Type::STRING:
                 {
                     result = _compare(arg1, bValue.toInteger()); // INTEGER op STRING (parsed as int)
                     break;
                 }
                 default:
                 {
                     _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                 }
             }
             break;
         }
         case StackValue::Type::FLOAT:
         {
             float arg1 = aValue.floatValue();
             switch (bValue.type())
             {
                 case StackValue::Type::INTEGER:
                 {
                     result = _compare(arg1, bValue.integerValue()); // FLOAT op INTEGER
                     break;
                 }
                 case StackValue::Type::FLOAT:
                 {
                     result = _compare(arg1, bValue.floatValue()); // FLOAT op FLOAT
                     break;
                 }
                 case StackValue::Type::STRING:
                 {
                     float arg2 = 0.0;
                     try
                     {
                         arg2 = std::stof(bValue.stringValue());
                     }
                     catch (std::invalid_argument ex) { }
                     catch (std::out_of_range ex) { }
                     result = _compare(arg1, arg2); // FLOAT op STRING (parsed as float)
                     break;
                 }
                 default:
                 {
                     _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                 }
             }
             break;
         }
         case StackValue::Type::STRING:
         {
             switch (bValue.type())
             {
                 case StackValue::Type::INTEGER:
                 {
                     result = _compare(aValue.toInteger(), bValue.integerValue()); // STRING (as integer) op INTEGER
                     break;
                 }
                 case StackValue::Type::FLOAT:
                 {
                     float arg1 = 0.0;
                     try
                     {
                         arg1 = std::stof(aValue.stringValue());
                     }
                     catch (std::invalid_argument ex) { }
                     catch (std::out_of_range ex) { }
                     result = _compare(arg1, bValue.floatValue()); // STRING (as float) op FLOAT
                     break;
                 }
                 case StackValue::Type::STRING:
                 {
                     result = _compare(aValue.stringValue(), bValue.stringValue()); // STRING op STRING
                     break;
                 }
                 default:
                 {
                     _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                 }
             }
             break;
         }
         case StackValue::Type::OBJECT:
         {
             switch (bValue.type())
             {
                 case StackValue::Type::INTEGER:
                 {
                     result = _compare((int)aValue.toBoolean(), bValue.integerValue()); // OBJECT op INTEGER
                     break;
                 }
                 case StackValue::Type::FLOAT:
                 {
                     result = _compare((float)aValue.toBoolean(), bValue.floatValue()); // OBJECT op FLOAT
                     break;
                 }
                 case StackValue::Type::STRING:
                 {
                     result = _compare(aValue.toString(), bValue.stringValue()); // OBJECT op STRING - compare object name
                     break;
                 }
                 case StackValue::Type::OBJECT:
                 {
                     result = _compare(aValue.objectValue(), bValue.objectValue()); // OBJECT op OBJECT
                     break;
                 }
                 default:
                 {
                     _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                 }
             }
             break;
         }
         default:
         {
             _error(std::string() + _cmpOpcodeName() + ": invalid left argument type: " + aValue.typeName());
         }
     }
     _script->dataStack()->push(result);
 }