Example #1
0
	int BodyParts::deserialise(LoadingState *state, data::IData *data)
	{
		base::Handle<data::Table> dataMap(data::Table::checkDataType(data, "body parts"));
		if (!dataMap)
		{
			return 0;
		}

		for (auto iter = dataMap->beginArray(); iter != dataMap->endArray(); ++iter)
		{
			BodyPart *part = BodyPart::fromDeserialise(state, iter->get());
			if (!part)
			{
				continue;
			}
			mPartList.push_back(part);
		}

		base::Handle<data::Number> num(dataMap->at<data::Number>("attackIndex"));
		if (num)
		{
			mAttackIndex = num->integer();
		}
		return 1;
	}
Example #2
0
	void Inventory::deserialise(LoadingState *state, data::IData *data)
	{
		Handle<data::Table> dataMap(dynamic_cast<data::Table *>(data));
		if (!dataMap)
		{
			stringstream ss;
			ss << "Unable to load inventory from a '" << data->typeName();
			ss << "', must be a Map.";
			am_log("LOADERR", ss);
			return;
		}

		removeAll();

		unsigned short width = mSpacesX;
		unsigned short height = mSpacesY;
		Handle<data::Number> num(dataMap->at<data::Number>("spacesX"));
		if (num)
		{
			width = num->value<unsigned short>();
		}

		num = dataMap->at<data::Number>("spacesY");
		if (num)
		{
			height = num->value<unsigned short>();
		}

		if (width != mSpacesX || height != mSpacesY)
		{
			if (width > 0 && height > 0)
			{
				setSpaces(width, height);
			}
			else
			{
				stringstream ss;
				ss << "An inventory with space " << width << " x " << height;
				ss << " is invalid";
				am_log("LOADERR", ss);
			}
		}

		Handle<data::Table> arr(dataMap->at<data::Table>("spots"));
		if (arr)
		{
			for (auto iter = arr->beginArray(); iter != arr->endArray(); ++iter)
			{
				InventorySpot spot;
				spot.deserialise(state, iter->get());
				if (!addItem(spot.mItem, spot.mX, spot.mY))
				{
					stringstream ss;
					ss << "Error adding item to inventory at " << spot.mX;
					ss << " x " << spot.mY;
					am_log("LOADERR", ss);
				}
			}
		}
	}
Example #3
0
	void StatModifiers::deserialise(LoadingState *state, data::IData *data)
	{
		Handle<data::Table> dataMap(data::Table::checkDataType(data, "stat modifiers"));
		if (!dataMap)
		{
			return;
		}
		
		for (auto iter = dataMap->beginMap(); iter != dataMap->endMap(); ++iter)
		{
			Stat::StatType type = Stat::getStatType(iter->first.c_str());
			if (type == Stat::MAX_STAT_LENGTH)
			{
				stringstream ss;
				ss << "Unknown stat type '" << iter->first << "', unable to load stat modifiers.";
				am_log("LOADERR", ss);
				continue;
			}

			Handle<data::Table> arr(data::Table::checkDataType(iter->second.get(), "stat modifiers"));
			if (arr)
			{
				continue;
			}

			for (auto modIter = arr->beginArray(); modIter != arr->endArray(); ++iter)
			{
				StatModifier mod;
				if (mod.deserialise(state, modIter->get()))
				{
					addStatModifier(type, mod);
				}
			}
		}
	}
Example #4
0
	void Sprite::deserialise(am::game::LoadingState *state, data::IData *data)
	{
		Handle<data::Table> dataMap(dynamic_cast<data::Table *>(data));
		if (!dataMap)
		{
			stringstream ss;
			ss << "Unable to load sprite from '" << data->typeName();
		}

		Handle<data::String> str(dataMap->at<data::String>("asset"));
		if (str)
		{
			setAsset(str->string());
		}

		Handle<data::Number> num(dataMap->at<data::Number>("width"));
		if (num)
		{
			mWidth = num->value<float>();
		}
		num = dataMap->at<data::Number>("height");
		if (num)
		{
			mHeight = num->value<float>();
		}

		num = dataMap->at<data::Number>("currentFrame");
		if (num)
		{
			mCurrentFrame = num->valuei();
		}
		num = dataMap->at<data::Number>("frameRate");
		if (num)
		{
			mFrameRate = num->value<float>();
		}
		num = dataMap->at<data::Number>("currentTime");
		if (num)
		{
			mCurrentTime = num->value<float>();
		}

		str = dataMap->at<data::String>("scaleNineState");
		if (str)
		{
			setScaleNineState(ScaleNine::getState(str->string()));
		}
	}
Example #5
0
	int BodyParts::deserialise(LoadingState *state, data::IData *data)
	{
		Handle<data::Table> dataMap(data::Table::checkDataType(data, "body parts"));
		if (!dataMap)
		{
			return 0;
		}

		for (auto iter = dataMap->beginArray(); iter != dataMap->endArray(); ++iter)
		{
			BodyPart *part = BodyPart::fromDeserialise(state, iter->get());
			if (!part)
			{
				continue;
			}
			mPartList.push_back(part);
		}
	}
Example #6
0
	void Stats::deserialise(LoadingState *state, data::IData *data)
	{
		base::Handle<data::Table> dataMap(data::Table::checkDataType(data, "stats"));
		if (!dataMap)
		{
			return;
		}

		base::Handle<data::Table> baseStats(dataMap->at<data::Table>("baseStats"));
		if (baseStats)
		{
			for (auto iter = baseStats->beginMap(); iter != baseStats->endMap(); ++iter)
			{
				Stat::StatType type = Stat::getStatType(iter->first.c_str());
				if (type == Stat::MAX_STAT_LENGTH)
				{
					std::stringstream ss;
					ss << "Unknown stat '" << iter->first << '\'';
					am_log("LOADERR", ss);
					continue;
				}
				base::Handle<data::Number> num(dynamic_cast<data::Number *>(iter->second.get()));
				if (num)
				{
					setBaseStat(type, num->value<float>());
				}
				else
				{
					std::stringstream ss;
					ss << "Cannot load base stat '" << iter->first << "' from a '";
					ss << iter->second->typeName() << "'";
					am_log("LOADERR", ss);
					continue;
				}
			}
		}

		base::Handle<data::IData> tempData(dataMap->at("modifiers"));
		if (tempData)
		{
			mModifiers->deserialise(state, tempData);
		}
	}
Example #7
0
  void ComputeMSURFDescriptor(
    const ImageT & Lx ,
    const ImageT & Ly ,
    const int id_octave ,
    const SIOPointFeature & ipt ,
    Descriptor< Real , 64 > & desc )
  {

    Real dx = 0, dy = 0, mdx = 0, mdy = 0, gauss_s1 = 0, gauss_s2 = 0;
    Real rx = 0, ry = 0, rrx = 0, rry = 0, xf = 0, yf = 0, ys = 0, xs = 0;
    Real sample_x = 0, sample_y = 0, co = 0, si = 0, angle = 0;
    Real ratio = 0;
    int x1 = 0, y1 = 0, x2 = 0, y2 = 0, sample_step = 0, pattern_size = 0;
    int kx = 0, ky = 0, i = 0, j = 0, dcount = 0;
    int scale = 0, dsize = 0, level = 0;

    // Subregion centers for the 4x4 gaussian weighting
    Real cx = - static_cast<Real>( 0.5 ) , cy = static_cast<Real>( 0.5 ) ;

    // Set the descriptor size and the sample and pattern sizes
    dsize = 64;
    sample_step = 5;
    pattern_size = 12;

    // Get the information from the keypoint
    ratio = static_cast<Real>( 1 << id_octave );
    scale = MathTrait<float>::round( ipt.scale() / ratio );
    angle = ipt.orientation() ;
    yf = ipt.y() / ratio;
    xf = ipt.x() / ratio;
    co = MathTrait<Real>::cos( angle );
    si = MathTrait<Real>::sin( angle );

    i = -8;

    // Calculate descriptor for this interest point
    // Area of size 24 s x 24 s
    while ( i < pattern_size )
    {
      j = -8;
      i = i - 4;

      cx += 1.0;
      cy = -0.5;

      while ( j < pattern_size )
      {
        dx = dy = mdx = mdy = 0.0;
        cy += 1.0;
        j = j - 4;

        ky = i + sample_step;
        kx = j + sample_step;

        xs = xf + ( -kx * scale * si + ky * scale * co );
        ys = yf + ( kx * scale * co + ky * scale * si );

        for ( int k = i; k < i + 9; ++k )
        {
          for ( int l = j; l < j + 9; ++l )
          {
            // Get coords of sample point on the rotated axis
            sample_y = yf + ( l * scale * co + k * scale * si );
            sample_x = xf + ( -l * scale * si + k * scale * co );

            // Get the gaussian weighted x and y responses
            gauss_s1 = gaussian( xs - sample_x, ys - sample_y, static_cast<Real>( 2.5 ) * static_cast<Real>( scale ) );

            rx = SampleLinear( Lx, sample_y, sample_x );
            ry = SampleLinear( Ly, sample_y, sample_x );

            // Get the x and y derivatives on the rotated axis
            rry = gauss_s1 * ( rx * co + ry * si );
            rrx = gauss_s1 * ( -rx * si + ry * co );

            // Sum the derivatives to the cumulative descriptor
            dx += rrx;
            dy += rry;
            mdx += MathTrait<Real>::abs( rrx );
            mdy += MathTrait<Real>::abs( rry );
          }
        }

        // Add the values to the descriptor vector
        gauss_s2 = gaussian( cx - static_cast<Real>( 2.0 ) , cy - static_cast<Real>( 2.0 ) , static_cast<Real>( 1.5 ) ) ;
        desc[dcount++] = dx * gauss_s2;
        desc[dcount++] = dy * gauss_s2;
        desc[dcount++] = mdx * gauss_s2;
        desc[dcount++] = mdy * gauss_s2;

        j += 9;
      }

      i += 9;
    }

    // convert to unit vector (L2 norm)
    typedef Eigen::Matrix<Real, Eigen::Dynamic, 1> VecReal;
    Eigen::Map< VecReal > dataMap( &desc[0], 64);
    dataMap.normalize();
    //std::cout << dataMap.transpose() << std::endl << std::endl;
  }