mirror of
https://github.com/id-Software/DOOM-3.git
synced 2026-03-20 00:49:31 +01:00
hello world
This commit is contained in:
199
neo/tools/materialeditor/MaterialDef.cpp
Normal file
199
neo/tools/materialeditor/MaterialDef.cpp
Normal file
@@ -0,0 +1,199 @@
|
||||
/*
|
||||
===========================================================================
|
||||
|
||||
Doom 3 GPL Source Code
|
||||
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
|
||||
|
||||
Doom 3 Source Code is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Doom 3 Source Code is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
|
||||
|
||||
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
||||
|
||||
===========================================================================
|
||||
*/
|
||||
#include "../../idlib/precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "MaterialDef.h"
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
MaterialDef::MaterialDef(void) {
|
||||
type = 0;
|
||||
quotes = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
MaterialDef::~MaterialDef(void) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns view specific data associated with the material definition.
|
||||
*/
|
||||
DWORD MaterialDef::GetViewData(const char* viewName) {
|
||||
DWORD* value = NULL;
|
||||
viewData.Get(viewName, &value);
|
||||
return *value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets view specific data for the material definition.
|
||||
*/
|
||||
void MaterialDef::SetViewData(const char* viewName, DWORD value) {
|
||||
viewData.Set(viewName, value);
|
||||
}
|
||||
|
||||
#define MATERIAL_DEF_FILE "MaterialEditorDefs.med"
|
||||
|
||||
MaterialDefList MaterialDefManager::materialDefs[MaterialDefManager::MATERIAL_DEF_NUM];
|
||||
|
||||
|
||||
/**
|
||||
* Loads the material definition file instatiates MaterialDef objects for each definition
|
||||
* and groups the definitions.
|
||||
*/
|
||||
void MaterialDefManager::InitializeMaterialDefLists() {
|
||||
|
||||
char *buffer;
|
||||
int length = fileSystem->ReadFile( MATERIAL_DEF_FILE, (void **)&buffer);
|
||||
|
||||
if ( length == -1 ) {
|
||||
common->Error( "Couldn't load material editor definition: %s", MATERIAL_DEF_FILE );
|
||||
return;
|
||||
}
|
||||
|
||||
idLexer src;
|
||||
if ( !src.LoadMemory( buffer, length, MATERIAL_DEF_FILE ) ) {
|
||||
common->Error( "Couldn't parse %s", MATERIAL_DEF_FILE );
|
||||
fileSystem->FreeFile(buffer);
|
||||
}
|
||||
|
||||
|
||||
InitializeMaterialDefList(&src, "materialprops", &materialDefs[MATERIAL_DEF_MATERIAL]);
|
||||
InitializeMaterialDefList(&src, "stageprops", &materialDefs[MATERIAL_DEF_STAGE]);
|
||||
InitializeMaterialDefList(&src, "specialmapstageprops", &materialDefs[MATERIAL_DEF_SPECIAL_STAGE]);
|
||||
|
||||
fileSystem->FreeFile(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a single type of material attributes and adds them to the supplied MaterialDefList object.
|
||||
* @param src The idLexer object that contains the file.
|
||||
* @param typeName The name of the attribute grouping to search for in the file.
|
||||
* @param list The MaterialDefList object to append the MaterialDef instances to.
|
||||
*/
|
||||
void MaterialDefManager::InitializeMaterialDefList(idLexer* src, const char* typeName, MaterialDefList* list) {
|
||||
|
||||
idToken token;
|
||||
|
||||
src->Reset();
|
||||
src->SkipUntilString(typeName);
|
||||
src->SkipUntilString("{");
|
||||
|
||||
while(1) {
|
||||
if ( !src->ExpectAnyToken( &token ) ) {
|
||||
//Todo: Add some error checking here
|
||||
return;
|
||||
}
|
||||
|
||||
if ( token == "}" ) {
|
||||
break;
|
||||
}
|
||||
|
||||
MaterialDef* newProp = new MaterialDef();
|
||||
|
||||
if(!token.Icmp("TYPE_GROUP")) {
|
||||
newProp->type = MaterialDef::MATERIAL_DEF_TYPE_GROUP;
|
||||
} else if(!token.Icmp("TYPE_BOOL")) {
|
||||
newProp->type = MaterialDef::MATERIAL_DEF_TYPE_BOOL;
|
||||
} else if(!token.Icmp("TYPE_STRING")) {
|
||||
newProp->type = MaterialDef::MATERIAL_DEF_TYPE_STRING;
|
||||
} else if(!token.Icmp("TYPE_FLOAT")) {
|
||||
newProp->type = MaterialDef::MATERIAL_DEF_TYPE_FLOAT;
|
||||
} else if(!token.Icmp("TYPE_INT")) {
|
||||
newProp->type = MaterialDef::MATERIAL_DEF_TYPE_INT;
|
||||
}
|
||||
|
||||
//Skip the ,
|
||||
src->ReadToken(&token);
|
||||
|
||||
//Read Dict Name
|
||||
src->ReadToken(&token);
|
||||
newProp->dictName = token;
|
||||
|
||||
//Skip the ,
|
||||
src->ReadToken(&token);
|
||||
|
||||
//Read Display Name
|
||||
src->ReadToken(&token);
|
||||
newProp->displayName = token;
|
||||
|
||||
//Skip the ,
|
||||
src->ReadToken(&token);
|
||||
|
||||
//Read Display Info
|
||||
src->ReadToken(&token);
|
||||
newProp->displayInfo = token;
|
||||
|
||||
//Type Specific Data
|
||||
if(newProp->type == MaterialDef::MATERIAL_DEF_TYPE_STRING) {
|
||||
|
||||
newProp->quotes = false;
|
||||
|
||||
//Skip the ,
|
||||
src->ReadToken(&token);
|
||||
|
||||
//Read validate flag
|
||||
src->ReadToken(&token);
|
||||
if(token == "1") {
|
||||
newProp->quotes = true;
|
||||
}
|
||||
}
|
||||
|
||||
src->SkipRestOfLine();
|
||||
|
||||
list->Append(newProp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys all MaterialDef instances and clears the material attribute grouping lists.
|
||||
*/
|
||||
void MaterialDefManager::DestroyMaterialDefLists() {
|
||||
|
||||
for(int i = 0; i < MATERIAL_DEF_NUM; i++) {
|
||||
for(int j = 0; j < materialDefs[i].Num(); j++) {
|
||||
delete materialDefs[i][j];
|
||||
}
|
||||
materialDefs[i].Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the MaterialDefList for the specified attribute grouping.
|
||||
* @param type The attribute grouping for which to retreive the attribute list.
|
||||
*/
|
||||
MaterialDefList* MaterialDefManager::GetMaterialDefs(int type) {
|
||||
if(type >= 0 && type < MATERIAL_DEF_NUM) {
|
||||
return &materialDefs[type];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user