mirror of
https://github.com/GTAmodding/modelviewjs.git
synced 2025-07-08 18:10:14 +02:00
239 lines
4.4 KiB
JavaScript
239 lines
4.4 KiB
JavaScript
var VehicleColours = [];
|
|
var ModelInfos = {};
|
|
var ModelInfosName = {};
|
|
var CurrentModel = null;
|
|
|
|
function
|
|
SetCarColors(cols)
|
|
{
|
|
carColors = [
|
|
[ 0, 0, 0, 255 ],
|
|
[ 0, 0, 0, 255 ],
|
|
[ 0, 0, 0, 255 ],
|
|
[ 0, 0, 0, 255 ]
|
|
];
|
|
if(cols !== undefined)
|
|
for(let i = 0; i < cols.length; i++){
|
|
// GTA color ID
|
|
let colorID = cols[i];
|
|
|
|
// RGB color
|
|
let col = VehicleColours[colorID];
|
|
if(!col) {
|
|
continue;
|
|
}
|
|
|
|
carColors[i][0] = col[0];
|
|
carColors[i][1] = col[1];
|
|
carColors[i][2] = col[2];
|
|
}
|
|
}
|
|
|
|
function
|
|
LoadColors(cols)
|
|
{
|
|
SetCarColors(cols);
|
|
setVehicleColors(modelinfo, carColors[0], carColors[1], carColors[2], carColors[3]);
|
|
}
|
|
|
|
function
|
|
SelectModel(model)
|
|
{
|
|
let colortable = document.getElementById('colors');
|
|
removeChildren(colortable);
|
|
|
|
CurrentModel = ModelInfosName[model];
|
|
let col1 = [ 0, 0, 0, 255 ];
|
|
let col2 = [ 0, 0, 0, 255 ];
|
|
for(let i = 0; i < CurrentModel.colors.length; i++){
|
|
let c = CurrentModel.colors[i];
|
|
let c1 = VehicleColours[c[0]];
|
|
let c2 = VehicleColours[c[1]];
|
|
if(i == 0){
|
|
col1[0] = c1[0];
|
|
col1[1] = c1[1];
|
|
col1[2] = c1[2];
|
|
col2[0] = c2[0];
|
|
col2[1] = c2[1];
|
|
col2[2] = c2[2];
|
|
}
|
|
let tr = document.createElement('tr');
|
|
for(let j = 0; j < c.length; j++){
|
|
let td = document.createElement('td');
|
|
td.width = "16px";
|
|
td.height = "16px";
|
|
|
|
// GTA color ID
|
|
let colorID = c[j];
|
|
|
|
// RGB color
|
|
let col = VehicleColours[colorID];
|
|
if(!col) {
|
|
continue;
|
|
}
|
|
|
|
td.style = "background-color: rgb("+col[0]+","+col[1]+","+col[2]+")";
|
|
tr.appendChild(td);
|
|
}
|
|
tr.onclick = function() { LoadColors(c); };
|
|
colortable.appendChild(tr);
|
|
}
|
|
|
|
camDist = 5.0;
|
|
camPitch = 0.3;
|
|
camYaw = 1.0;
|
|
SetCarColors(CurrentModel.colors[0]);
|
|
|
|
loadCar(model + ".dff");
|
|
|
|
window.location.hash = currentGame + '/' + model;
|
|
}
|
|
|
|
function
|
|
SelectModelByID(modelID) {
|
|
model = ModelInfos[modelID];
|
|
SelectModel(model.model);
|
|
}
|
|
|
|
function
|
|
StartUI()
|
|
{
|
|
let objects = document.getElementById('objects');
|
|
removeChildren(objects);
|
|
for(let model in ModelInfosName){
|
|
let option = document.createElement('option');
|
|
option.innerHTML = model;
|
|
option.onclick = function(){ SelectModel(model); };
|
|
objects.appendChild(option);
|
|
}
|
|
}
|
|
|
|
function
|
|
LoadVehicle(fields)
|
|
{
|
|
let id = Number(fields[0]);
|
|
let mi = {};
|
|
mi.id = id;
|
|
mi.type = "vehicle";
|
|
mi.model = fields[1];
|
|
mi.txd = fields[2];
|
|
mi.vehtype = fields[3];
|
|
mi.handling = fields[4];
|
|
if(mi.vehtype == "car"){
|
|
// TODO: check SA
|
|
mi.wheelId = Number(fields[11]);
|
|
mi.wheelScale = Number(fields[12]);
|
|
}
|
|
mi.colors = [];
|
|
ModelInfos[mi.id] = mi;
|
|
ModelInfosName[mi.model] = mi;
|
|
}
|
|
|
|
function
|
|
LoadColour(fields)
|
|
{
|
|
let r = Number(fields[0]);
|
|
let g = Number(fields[1]);
|
|
let b = Number(fields[2]);
|
|
VehicleColours.push([r, g, b]);
|
|
}
|
|
|
|
function
|
|
LoadVehicleColour(fields)
|
|
{
|
|
let mi = ModelInfosName[fields[0]];
|
|
for(let i = 1; i < fields.length; i += 2){
|
|
let c1 = Number(fields[i]);
|
|
let c2 = Number(fields[i+1]);
|
|
mi.colors.push([c1, c2]);
|
|
}
|
|
}
|
|
|
|
function
|
|
LoadVehicleColour4(fields)
|
|
{
|
|
let mi = ModelInfosName[fields[0]];
|
|
for(let i = 1; i < fields.length; i += 4){
|
|
let c1 = Number(fields[i]);
|
|
let c2 = Number(fields[i+1]);
|
|
let c3 = Number(fields[i+2]);
|
|
let c4 = Number(fields[i+3]);
|
|
mi.colors.push([c1, c2, c3, c4]);
|
|
}
|
|
}
|
|
|
|
function
|
|
LoadObjectTypes(text)
|
|
{
|
|
LoadSectionedFile(text, {
|
|
"cars": LoadVehicle
|
|
});
|
|
}
|
|
|
|
function
|
|
LoadVehicleColours(text)
|
|
{
|
|
LoadSectionedFile(text, {
|
|
"col": LoadColour,
|
|
"car": LoadVehicleColour,
|
|
"car4": LoadVehicleColour4
|
|
});
|
|
}
|
|
|
|
function
|
|
LoadSectionedFile(text, sections)
|
|
{
|
|
let section = "end";
|
|
let lines = text.split("\n");
|
|
for(let i = 0; i < lines.length; i++){
|
|
let line = lines[i].replace(/,/g, " ").replace(/#.*/g, "").trim().toLowerCase();
|
|
if(line.length == 0)
|
|
continue;
|
|
let fields = line.split(/[\t ]+/);
|
|
|
|
if(section == "end"){
|
|
section = fields[0];
|
|
continue;
|
|
}
|
|
if(fields[0] == "end"){
|
|
section = "end";
|
|
continue;
|
|
}
|
|
|
|
if(section in sections)
|
|
sections[section](fields);
|
|
}
|
|
}
|
|
|
|
function
|
|
loadText(filename, cb)
|
|
{
|
|
let req = new XMLHttpRequest();
|
|
req.open("GET", DataDirPath + "/" + filename, true);
|
|
req.responseType = "text";
|
|
|
|
req.onload = function(oEvent){
|
|
cb(req.response);
|
|
};
|
|
|
|
req.send(null);
|
|
}
|
|
|
|
function
|
|
loadVehicleViewer(idefile, CB)
|
|
{
|
|
VehicleColours = [];
|
|
ModelInfos = {};
|
|
ModelInfosName = {};
|
|
CurrentModel = null;
|
|
|
|
loadText(idefile, function(text){
|
|
LoadObjectTypes(text);
|
|
loadText("carcols.dat", function(text){
|
|
LoadVehicleColours(text);
|
|
StartUI();
|
|
CB();
|
|
});
|
|
});
|
|
}
|