объекты поддерживают смену вида/анимацию
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
function Объекты(состояние)
|
||||
function Объекты(состояние, события)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
@@ -6,15 +6,111 @@ function Объекты(состояние)
|
||||
пр: [0, 0, 40, 20],
|
||||
};
|
||||
this.задано = {};
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.обновитьИзображение = function(имя, пр, вид)
|
||||
// Ключи и события.
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "объекты")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let имя = путь[1];
|
||||
let свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
let производноеИмя = `объекты-${имя}`;
|
||||
|
||||
if (свойство.startsWith("пр."))
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
this.обновитьПозициюРазмер(производноеИмя, пр);
|
||||
this.обновитьСлежение(производноеИмя, пр);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
let анимация = this.задано[имя]["анимация"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид, анимация);
|
||||
}
|
||||
else if (свойство == "физика")
|
||||
{
|
||||
this.обновитьФизику(производноеИмя, значение);
|
||||
}
|
||||
else if (
|
||||
свойство == "вид" ||
|
||||
свойство == "анимация"
|
||||
) {
|
||||
let пр = this.пр(имя);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
let анимация = this.задано[имя]["анимация"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид, анимация);
|
||||
}
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
let в = "виды/";
|
||||
let а = "анимации/";
|
||||
if (событие.startsWith(в))
|
||||
{
|
||||
let вид = событие.substring(в.length);
|
||||
this.обновитьОбъектыВида(вид);
|
||||
}
|
||||
else if (событие.startsWith(а))
|
||||
{
|
||||
let анимация = событие.substring(а.length);
|
||||
this.обновитьОбъектыАнимации(анимация);
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьОбъектыАнимации = function(анимация)
|
||||
{
|
||||
for (let имя in this.задано)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let зан = за["анимация"];
|
||||
if (зан && зан == анимация)
|
||||
{
|
||||
this.обновитьВидАнимацию(имя);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьОбъектыВида = function(вид)
|
||||
{
|
||||
for (let имя in this.задано)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let зви = за["вид"];
|
||||
if (зви && зви == вид)
|
||||
{
|
||||
this.обновитьВидАнимацию(имя);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьВидАнимацию = function(имя)
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
let анимация = this.задано[имя]["анимация"];
|
||||
let производноеИмя = `объекты-${имя}`;
|
||||
this.обновитьИзображение(производноеИмя, пр, вид, анимация);
|
||||
};
|
||||
|
||||
this.обновитьИзображение = function(имя, пр, вид, анимация)
|
||||
{
|
||||
состояние.разобрать({
|
||||
изображения: {
|
||||
[имя]: {
|
||||
пр: пр,
|
||||
вид: вид,
|
||||
анимация: анимация,
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -55,43 +151,6 @@ function Объекты(состояние)
|
||||
});
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "объекты")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let имя = путь[1];
|
||||
let свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
let производноеИмя = `объекты-${имя}`;
|
||||
|
||||
if (свойство.startsWith("пр."))
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
this.обновитьПозициюРазмер(производноеИмя, пр);
|
||||
this.обновитьСлежение(производноеИмя, пр);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид);
|
||||
}
|
||||
else if (свойство == "физика")
|
||||
{
|
||||
this.обновитьФизику(производноеИмя, значение);
|
||||
}
|
||||
else if (свойство == "вид")
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид);
|
||||
}
|
||||
};
|
||||
|
||||
this.пр = function(имя)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
|
||||
@@ -18,7 +18,7 @@ function Игра()
|
||||
мир.физика = new Физика(мир.события);
|
||||
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
|
||||
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
|
||||
мир.объекты = new Объекты(мир.состояние);
|
||||
мир.объекты = new Объекты(мир.состояние, мир.события);
|
||||
let адресИгры = window.location.pathname + "/../игра.html?z64=";
|
||||
мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры);
|
||||
мир.мышь = new Мышь(мир.события);
|
||||
|
||||
Reference in New Issue
Block a user