Browse Source

объекты поддерживают смену вида/анимацию

tags/4.1
parent
commit
86bd88e221
2 changed files with 99 additions and 40 deletions
  1. +98
    -39
      4.1/игра/180.Объекты.js
  2. +1
    -1
      4.1/игра/700.Игра.js

+ 98
- 39
4.1/игра/180.Объекты.js View File

@@ -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.задано[имя];


+ 1
- 1
4.1/игра/700.Игра.js View File

@@ -18,7 +18,7 @@ function Игра()
мир.физика = new Физика(мир.события);
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
мир.объекты = new Объекты(мир.состояние);
мир.объекты = new Объекты(мир.состояние, мир.события);
let адресИгры = window.location.pathname + "/../игра.html?z64=";
мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры);
мир.мышь = new Мышь(мир.события);


Loading…
Cancel
Save