Example #1
0
bool CCharShape::Load (string dir, string filename, bool with_actions) {
	CSPList list (500);
	int i, ii, act;
	string line, order, name, mat_name, fullname;
	TVector3 scale, trans, rot;
	double visible;
	bool shadow;
	int node_name, parent_name;

	useActions = with_actions;
	CreateRootNode ();
	newActions = true;

	file_name = filename;
 	if (!list.Load (dir, filename)) {
		Message ("could not load character", filename.c_str());
		return false;
	}

	for (i=0; i<list.Count(); i++) {
		line = list.Line (i);
		node_name = SPIntN (line, "node", -1); 
		parent_name = SPIntN (line, "par", -1);		
		mat_name = SPStrN (line, "mat", "");
		name = SPStrN (line, "joint", "");	
		fullname = SPStrN (line, "name", "");

		if (SPIntN (line, "material", 0) > 0) {
			CreateMaterial (line.c_str());
			if (useActions) {
				Matlines[numMatlines] = line;
				numMatlines++;
			}
		} else {
			visible = SPFloatN (line, "vis", -1.0);	
			shadow = SPBoolN (line, "shad", false);
			order = SPStrN (line, "order", "");
 			CreateCharNode (parent_name, node_name, name, fullname, order, shadow);					
			rot = SPVector3N (line, "rot", NullVec);
			MaterialNode (node_name, mat_name);
			for (ii=0; ii<(int)order.size(); ii++) {
				act = order.at(ii)-48;	
				switch (act) {
					case 0:
						trans = SPVector3N (line, "trans", MakeVector (0,0,0));
						TranslateNode (node_name, trans);
						break;
					case 1: RotateNode (node_name, 1, rot.x); break;
					case 2: RotateNode (node_name, 2, rot.y); break;
					case 3: RotateNode (node_name, 3, rot.z); break;
					case 4:
						scale = SPVector3N (line, "scale", MakeVector (1,1,1));
						ScaleNode (node_name, scale);
						break;
					case 5: VisibleNode (node_name, visible); break;
					case 9: RotateNode (node_name, 2, rot.z); break;
					default: break;
				}
			}
		}
	}
	newActions = false;
	return true;
}
Example #2
0
bool CCharShape::ResetNode (string node_trivialname) {
	int node_name = SPIntN (NodeIndex, node_trivialname, -1);
	if (node_name < 0) return false;
	return ResetNode (node_name);
}
Example #3
0
bool CCharShape::Load (const string& dir, const string& filename, bool with_actions) {
    CSPList list (500);

    useActions = with_actions;
    CreateRootNode ();
    newActions = true;

    if (!list.Load (dir, filename)) {
        Message ("could not load character", filename);
        return false;
    }

    for (size_t i=0; i<list.Count(); i++) {
        const string& line = list.Line(i);
        int node_name = SPIntN (line, "node", -1);
        int parent_name = SPIntN (line, "par", -1);
        string mat_name = SPStrN (line, "mat", "");
        string name = SPStrN (line, "joint", "");
        string fullname = SPStrN (line, "name", "");

        if (SPIntN (line, "material", 0) > 0) {
            CreateMaterial (line);
        } else {
            double visible = SPFloatN (line, "vis", -1.0);
            bool shadow = SPBoolN (line, "shad", false);
            string order = SPStrN (line, "order", "");
            CreateCharNode (parent_name, node_name, name, fullname, order, shadow);
            TVector3 rot = SPVector3N (line, "rot", NullVec);
            MaterialNode (node_name, mat_name);
            for (size_t ii = 0; ii < order.size(); ii++) {
                int act = order[ii]-48;
                switch (act) {
                case 0: {
                    TVector3 trans = SPVector3N (line, "trans", TVector3 (0,0,0));
                    TranslateNode (node_name, trans);
                    break;
                }
                case 1:
                    RotateNode (node_name, 1, rot.x);
                    break;
                case 2:
                    RotateNode (node_name, 2, rot.y);
                    break;
                case 3:
                    RotateNode (node_name, 3, rot.z);
                    break;
                case 4: {
                    TVector3 scale = SPVector3N (line, "scale", TVector3 (1,1,1));
                    ScaleNode (node_name, scale);
                    break;
                }
                case 5:
                    VisibleNode (node_name, visible);
                    break;
                case 9:
                    RotateNode (node_name, 2, rot.z);
                    break;
                default:
                    break;
                }
            }
        }
    }
    newActions = false;
    return true;
}
Example #4
0
bool CCharShape::RotateNode (string node_trivialname, int axis, double angle) {
	int node_name = SPIntN (NodeIndex, node_trivialname, -1);
	if (node_name < 0) return false;
	return RotateNode (node_name, axis, angle);
}
Example #5
0
int SPEnumN (string &s, const string &tag, int def) {
	string item = SPItemN (s, tag);	
	STrimN (item);
	if (item.size() < 1) return def;
	return SPIntN (EnumStr, item, def);;
}