Beispiel #1
0
// Animates the mesh.
//
void prMesh_MD2::Animate()
{
    if (mLoaded)
    {
        if (mpAnimation)
        {
            //mpAnimation->
            mpAnimation->Update(16.0f/1000.0f);

            m_frame = static_cast<prAnimation_MD2*>(mpAnimation)->GetFrame();
            prTrace(prLogLevel::LogError, "Frame %i\n", m_frame);
        }
    }
}
Beispiel #2
0
/// ---------------------------------------------------------------------------
/// Plays a song.
/// ---------------------------------------------------------------------------
void prJNI_SongPlay(const char *filename)
{
    JavaVM *pJavaVM = prJNI_GetVM();
    PRASSERT(pJavaVM);
    if (pJavaVM)
    {
        bool    isAttached  = false;
        JNIEnv *env         = NULL;

        // Get environment.
        if (!prJNI_GetEnv(&env, isAttached))
            return;

        // Find class
        jclass cls = prJNI_GetAudioClass(env, "Music", isAttached);
        if (!cls)
            return;
        
        // Find the callBack method ID
        jmethodID method = env->GetStaticMethodID(cls, "songPlay", "(Ljava/lang/String;)V");
        if (!method)
        {
            prTrace(LogError, "Failed to get method ID %s", "songPlay");
            if (isAttached)
            {
                pJavaVM->DetachCurrentThread();
            }
            return;
        }

        // Construct a Java string.
        jstring js = env->NewStringUTF(filename);
        env->CallStaticVoidMethod(cls, method, js);

        // And done
        if (isAttached)
        {
            pJavaVM->DetachCurrentThread();
        }
    }
}
Beispiel #3
0
/// ---------------------------------------------------------------------------
/// Resumes playing the current song.
/// ---------------------------------------------------------------------------
void prJNI_SongResume()
{
    JavaVM *pJavaVM = prJNI_GetVM();
    PRASSERT(pJavaVM);
    if (pJavaVM)
    {
        bool    isAttached  = false;
        JNIEnv *env         = NULL;

        // Get environment.
        if (!prJNI_GetEnv(&env, isAttached))
            return;

        // Find class
        jclass cls = prJNI_GetAudioClass(env, "Music", isAttached);
        if (!cls)
            return;
        
        // Find the callBack method ID
        jmethodID method = env->GetStaticMethodID(cls, "songResume", "()V");
        if (!method)
        {
            prTrace(LogError, "Failed to get method ID %s", "songResume");
            if (isAttached)
            {
                pJavaVM->DetachCurrentThread();
            }
            return;
        }

        // Call.
        env->CallStaticVoidMethod(cls, method);

        // And done
        if (isAttached)
        {
            pJavaVM->DetachCurrentThread();
        }
    }
}
Beispiel #4
0
/// ---------------------------------------------------------------------------
/// Plays a sound effect.
/// ---------------------------------------------------------------------------
s32 prSoundManager::SFXPlay(const char *name, f32 volume, bool loop)
{
    s32 handle = -1;

#ifdef SOUND_ALLOW
    PRASSERT(initialised && name && *name);
    PRASSERT(pLoadedWaves);

    if (numEffects > 0)
    {
        u32 hash  = prStringHash(name);
        
        for (s32 index = 0 ; index < numEffects; index++)
        {
            if (hash == pLoadedWaves[index].hash)
            {
                handle = SFXPlay(index, volume, loop);
                break;
            }
        }
    }

    if (handle == -1)
    {
        prTrace(prLogLevel::LogWarning, "Failed to play effect '%s'\n", name);
    }

#else
    PRUNUSED(loop);
    PRUNUSED(volume);
    PRUNUSED(name);

#endif

    return handle;
}
Beispiel #5
0
// Loads the mesh.
//
bool prMesh_MD2::Load(const char *filename)
{
    // Loaded?
    if (!mLoaded)
    {
        // Open the file
        std::ifstream ifs(filename, std::ios::binary);

        if (ifs.fail())
        {
            PRWARN("Failed to open model file %s", filename);
            return false;
        }


        // Is the file too small?
        ifs.seekg(0, std::ios::end);
        int size = (int)ifs.tellg();
        ifs.seekg(0, std::ios::beg);

        if (size <= sizeof(prMD2Header))
        {
            PRWARN("File '%s' is not an MD2 file. It is too small", filename);
            ifs.close();
            return false;
        }


        // Load the header.
        prMD2Header header;

        if (ifs.read(reinterpret_cast<char*>(&header), sizeof(header)))
        {
            if (header.ident != MD2_MAGIC || header.version != MD2_VERSION)
            {
                PRWARN("File '%s' is not an MD2 file.", filename);
                ifs.close();
                return false;
            }


            // Display file details
            #ifdef MD2_DEBUG
            prTrace(prLogLevel::LogError, "-----------------------------------------\n");
            prTrace(prLogLevel::LogError, "File       :     %s\n", filename            );
            prTrace(prLogLevel::LogError, "-----------------------------------------\n");
            prTrace(prLogLevel::LogError, "Ident      :     %x\n", header.ident        );
            prTrace(prLogLevel::LogError, "Version    :     %i\n", header.version      );
            prTrace(prLogLevel::LogError, "Frames     :     %i\n", header.num_frames   );
            prTrace(prLogLevel::LogError, "commands   :     %i\n", header.num_glcmds   );
            prTrace(prLogLevel::LogError, "Triangles  :     %i\n", header.num_tris     );
            prTrace(prLogLevel::LogError, "Tex coords :     %i\n", header.num_st       );
            prTrace(prLogLevel::LogError, "Vertices   :     %i\n", header.num_vertices );
            prTrace(prLogLevel::LogError, "Textures   :     %i\n", header.num_skins    );
            prTrace(prLogLevel::LogError, "Tex width  :     %i\n", header.skinWidth    );
            prTrace(prLogLevel::LogError, "Tex height :     %i\n", header.skinHeight   );
            prTrace(prLogLevel::LogError, "Frame size :     %i\n", header.frameSize    );
            prTrace(prLogLevel::LogError, "-----------------------------------------\n");
            #endif


            // Memory allocation for model data
            m_texCoords = new prMD2TexCoord [header.num_st];
            m_triangles = new prMD2Triangle [header.num_tris];
            m_frames    = new prMD2Frame    [header.num_frames];
            m_glcmds    = new int           [header.num_glcmds];


            // Read skin names
            if (header.num_skins > 0)
            {
                m_skins = new prMD2Skin [header.num_skins];

                ifs.seekg(header.offset_skins, std::ios::beg);
                ifs.read(reinterpret_cast<char*>(m_skins), sizeof (prMD2Skin) * header.num_skins);

                #ifdef MD2_DEBUG
                for (int i=0; i<header.num_skins; i++)
                {
                    prTrace(prLogLevel::LogError, "Skin: %s\n", m_skins[i].name);

                    char buffer[FILE_MAX_FILENAME_SIZE];

                    prStringCopySafe(buffer, m_skins[i].name, sizeof(buffer));
                    prTrace(prLogLevel::LogError, "Skin 1: %s\n", buffer);

                    prStringToLower(buffer);
                    prTrace(prLogLevel::LogError, "Skin 2: %s\n", buffer);

                    prStringReplaceChar(buffer, '\\', '/');
                    prTrace(prLogLevel::LogError, "Skin 3: %s\n", buffer);

                    s32 index = prStringFindLastIndex(buffer, '/');
                    if (index > 0)
                    {
                        prStringCopySafe(buffer, &buffer[index + 1], sizeof(buffer));
                    }

                    //prStringReplaceChar(buffer, '\\', '/');
                    prTrace(prLogLevel::LogError, "Skin 4: %s\n", buffer);

                    index = prStringFindLastIndex(buffer, '.');
                    if (index > 0)
                    {
                        buffer[index] = 0;
                    //    prStringCopySafe(buffer, m_skins[i].name, sizeof(buffer));
                    }
                    prTrace(prLogLevel::LogError, "Skin 5: %s\n", buffer);
                    //else
                    //{
                    //}

                    prStringAddString(".pvr", buffer);
                    prTrace(prLogLevel::LogError, "Skin 6: %s\n", buffer);

                    char fullpath[FILE_MAX_FILENAME_SIZE];
                    sprintf(fullpath, "data/textures/%s", buffer);

                    prTrace(prLogLevel::LogError, "Texture: '%s'\n", fullpath);
                    
                    // Load the texture
                    prResourceManager *pRM = static_cast<prResourceManager *>(prCoreGetComponent(PRSYSTEM_RESOURCEMANAGER));
                    if (pRM)
                    {
                        mpTexture = pRM->Load<prTexture>(fullpath);

                        //pRM->Load(fullpath);//  >Unload((*it).texture);
                    }            

                }
                #endif
            }
            else
            {
                prTrace(prLogLevel::LogError, "Model %s has no associated textures\n", filename);
            }


            // Read texture coords.
            ifs.seekg(header.offset_st, std::ios::beg);
            ifs.read(reinterpret_cast<char*>(m_texCoords), sizeof(prMD2TexCoord) * header.num_st);

            // Read triangle data
            ifs.seekg(header.offset_tris, std::ios::beg);
            ifs.read(reinterpret_cast<char*>(m_triangles), sizeof(prMD2Triangle) * header.num_tris);

            // Read frames
            ifs.seekg(header.offset_frames, std::ios::beg);
            
            for (int i=0; i<header.num_frames; i++)
            {
                // Memory allocation for the vertices of this frame
                m_frames[i].verts = new prMD2Vertex[header.num_vertices];

                // Read frame data
                ifs.read(reinterpret_cast<char*>(&m_frames[i].scale),    sizeof(prMD2Vec3));
                ifs.read(reinterpret_cast<char*>(&m_frames[i].translate),sizeof(prMD2Vec3));
                ifs.read(reinterpret_cast<char*>(&m_frames[i].name),     sizeof(char) * 16);
                ifs.read(reinterpret_cast<char*>( m_frames[i].verts),    sizeof(prMD2Vertex) * header.num_vertices);

                #ifdef MD2_DEBUG
                prTrace(prLogLevel::LogError, "Name: %s\n", &m_frames[i].name);
                #endif
            }

            // Read OpenGL commands
            ifs.seekg(header.offset_glcmds, std::ios::beg);
            ifs.read(reinterpret_cast<char*>(m_glcmds), sizeof(int) * header.num_glcmds);


            // Store some of the header data.
            m_numTriangles  = header.num_tris;
            m_skinWidth     = header.skinWidth;
            m_skinHeight    = header.skinHeight;
            m_numFrames     = header.num_frames;


            // Done.
            mLoaded = true;
            ifs.close();


            // Create the animation data
            if (m_numFrames > 0)
            {
                mpAnimation = new prAnimation_MD2(m_frames, m_numFrames);
            }
        }
        else
        {
            PRWARN("Failed to load mesh '%s'.", filename);
        }
    }

    return true;
}
Beispiel #6
0
/// ---------------------------------------------------------------------------
/// Constructor
/// ---------------------------------------------------------------------------
prEmitterDefinition::prEmitterDefinition(const char *name) : mHash  (prStringHash(name))
                                                           , mName  (name)
{
    prTrace(LogError, "New 'prEmitterDefinition' %s - %08x\n", mName.c_str(), mHash);
}