示例#1
0
    AnimationPtr ModelInstance::playOneShot(const std::string anim, float speed, float fadeInTime, float fadeOutTime, TimeFunction* control)
    {
        CoreAnimationPtrC coreAnim = this->findAnimToUse(anim);

        if(nearZero(coreAnim->duration())) {
            return m_mixer->oneshot(AnimationPtr(new Animation(coreAnim, speed)));
        }

        // Note: same as in playCycle.
        TimeFunction* pWeightFun = new FadeOutTF(fadeOutTime/coreAnim->duration(), new FadeInTF(fadeInTime/coreAnim->duration(), new ConstantTF(1.0f)));
        return m_mixer->oneshot(AnimationPtr(new Animation(m_coremdl->animation(anim), speed, control, pWeightFun)));
    }
示例#2
0
    AnimationPtr ModelInstance::playCycle(const std::string anim, float speed, float fadeInTime, float weight, TimeFunction* control)
    {
        CoreAnimationPtrC coreAnim = this->findAnimToUse(anim);

        if(nearZero(coreAnim->duration())) {
            return m_mixer->play(AnimationPtr(new Animation(coreAnim, speed)));
        }

        // Note: as the FadeInTF uses normalized-time, we need to divide our
        //       absolue time by the animation's duration in order to normalize it.
        TimeFunction* pWeightFun = new FadeInTF(fadeInTime/coreAnim->duration(), new ConstantTF(weight));
        return m_mixer->play(AnimationPtr(new Animation(coreAnim, speed, control, pWeightFun)));
    }
示例#3
0
AnimationPtr Location::findAnimation(const char *name) {

	for (AnimationList::iterator it = _animations.begin(); it != _animations.end(); ++it)
		if (!scumm_stricmp((*it)->_name, name)) return *it;

	return AnimationPtr();
}
示例#4
0
void ProgramParser_br::parseRValue(ScriptVar &v, const char *str) {

	if (isdigit(static_cast<unsigned char>(str[0])) || str[0] == '-') {
		v.setImmediate(atoi(str));
		return;
	}

	int index = _program->findLocal(str);
	if (index != -1) {
		v.setLocal(&ctxt.locals[index]);
		return;
	}

	AnimationPtr a;
	if (str[1] == '.') {
		a = _vm->_location.findAnimation(&str[2]);
		if (!a) {
			error("unknown animation '%s' in script", &str[2]);
		}
	} else
		a = AnimationPtr(ctxt.a);

	if (str[0] == 'X') {
		v.setField(a.get(), &Animation::getX);
	} else
	if (str[0] == 'Y') {
		v.setField(a.get(), &Animation::getY);
	} else
	if (str[0] == 'Z') {
		v.setField(a.get(), &Animation::getZ);
	} else
	if (str[0] == 'F') {
		v.setField(a.get(), &Animation::getF);
	}	else
	if (str[0] == 'N') {
		v.setImmediate(a->getFrameNum());
	} else
	if (str[0] == 'R') {
		v.setRandom(atoi(&str[1]));
	} else
	if (str[0] == 'L') {
#if 0	// disabled because no references to lip sync has been found in the scripts
		v.setField(&_vm->_lipSyncVal);
#endif
		warning("Lip sync instruction encountered! Please notify the team");
	}

}
示例#5
0
void LocationParser_ns::parseAnimation(AnimationList &list, char *name) {
	debugC(5, kDebugParser, "parseAnimation(name: %s)", name);

	if (_vm->_location.findAnimation(name)) {
		_zoneProg++;
		_script->skip("endanimation");
		return;
	}

	AnimationPtr a(new Animation);
	_zoneProg++;

	strncpy(a->_name, name, ZONENAME_LENGTH);
	a->_flags |= kFlagsIsAnimation;

	list.push_front(AnimationPtr(a));

	ctxt.a = a;
	_parser->pushTables(&_locationAnimParsers, _locationAnimStmt);
}
示例#6
0
文件: Node.cpp 项目: jbalestr42/42
void Node::setAnimation(AnimationPtr const & animation)
{
	setAnimation(AnimationPtr(new Animation(*animation)));
}
示例#7
0
文件: AssetLoader.cpp 项目: dgi09/D3D
AnimationPtr AssetLoader::LoadAnimation(std::string fileName)
{
    FILE * f = nullptr;
    fopen_s(&f,fileName.c_str(),"rb");
    unsigned int number;
    fread_s(&number,4,4,1,f);
    if(number != 2)
        return AnimationPtr(true);

    float dur;
    float fps;
    unsigned int numOfBones;

    fread_s(&dur,4,4,1,f);
    fread_s(&fps,4,4,1,f);
    fread_s(&numOfBones,4,4,1,f);

    if(numOfBones > MAX_BONES)
        return AnimationPtr(true);

    AnimationPtr ptr(Heap::GetPtr()->Animations.New());
    Animation * anim = ptr.Get();
    anim->Init();
    anim->duration = dur;
    anim->fps = fps;
    anim->numberOfBoneChannels = numOfBones;


    fread_s(anim->channelHaveData,sizeof(bool) * anim->numberOfBoneChannels,sizeof(bool),anim->numberOfBoneChannels,f);
    DirectX::XMFLOAT3 tempVec;
    DirectX::XMFLOAT4 tempQuat;

    for (unsigned int i = 0; i< anim->numberOfBoneChannels; i++)
    {
        BoneAnimationData & data = anim->channels[i];
        fread_s(&data.numberOfTranslationKeys,4,4,1,f);
        data.translationKeys = new TranslationKey[data.numberOfTranslationKeys];

        for (unsigned int t = 0; t < data.numberOfTranslationKeys; t++)
        {
            fread_s(&data.translationKeys[t].time,4,4,1,f);
            fread_s(&data.translationKeys[t].val,12,12,1,f);
        }


        fread_s(&data.numberOfRotationKeys,4,4,1,f);
        data.rotationKeys = new RotationKey[data.numberOfRotationKeys];

        for (unsigned int r = 0; r < data.numberOfRotationKeys; r++)
        {
            fread_s(&data.rotationKeys[r].time,4,4,1,f);
            fread_s(&data.rotationKeys[r].val,16,16,1,f);
        }

        fread_s(&data.numberOfScalingKeys,4,4,1,f);
        data.scalingKeys = new ScalingKey[data.numberOfScalingKeys];

        for (unsigned int s = 0; s < data.numberOfScalingKeys; s++)
        {
            fread_s(&data.scalingKeys[s].time,4,4,1,f);
            fread_s(&data.scalingKeys[s].val,12,12,1,f);
        }

    }
    fclose(f);

    return ptr;
}