Код 2019 года для вставки в игровой блокнот (обновлён 2019-12-19 20:43)
function init(){
d = display
c = color
c0 = c.rgb(000, 170, 000)
c1 = c.rgb(255, 000, 000)
c2 = c.rgb(000, 255, 000)
c3 = c.rgb(000, 000, 255)
c4 = c.rgb(255, 255, 000)
c5 = c.rgb(000, 255, 255)
c6 = c.rgb(255, 000, 255)
circles = []
colors = [
c0, c0, c0, c0, c0, c0,
c0, c0, c0, c0, c0, c0,
c1, c2, c3, c4, c5, c6]
for(var i = 0; i ‹ 16; i++){
add_circle(8 - 8 / 15 * i, i * 2, 31 - i * 2, 1 / 5000 * (i % 2 ? 1 : -1))
}
}
function add_circle(radius, height, number, speed){
circle = {
radius : radius,
speed : speed,
voxels : []
}
for(var i = 0; i ‹ number; i++){
circle.voxels.push(d.voxel(0, height, 0, c0))
}
circles.push(circle)
}
function update(time){
circles.forEach(function(circle){
solo_angle = 360 / circle.voxels.length * (Math.PI / 180)
circle.voxels.forEach(function(voxel, i){
angle = (solo_angle * i + time * circle.speed) % 360
x = Math.cos(angle) - Math.sin(angle)
z = Math.sin(angle) + Math.cos(angle)
voxel.cursorX = x * circle.radius + 7.5
voxel.cursorZ = z * circle.radius + 7.5
if(Math.random() › 0.99){
voxel.color = colors[Math.floor(Math.random() * colors.length)]
}
})
})
}
Код 2020 года для вставки в игровой блокнот (обновлён 2020-10-30 19:42)
function init(){
VOXELS_COUNT = 5000 // количество вокселей
CIRCLES_COUNT = 16 // количество кругов
DISPERSION = 0.5 // радиус разброса в круге
CHANGE_CHANCE = 0.01 // шанс смены цвета вокселя
DIRECTION = 0 // направление вращения: 0 - оба, 1 - по часовой, -1 - против часовой
HEIGHT = 31 // высота ёлки, 31 = 2 куба
CIRCLE_SPEED = 0.0001 // шаг вращения, больше - быстрее
MIN_R = 0.5 // радиус верхнего круга
MAX_R = 8 // радиус нижнего круга
MIN_CUBE = 0.1 // минимальный размер вокселя
MAX_CUBE = 0.3 // максимальный размер вокселя
POS_X = 7.5 // влево-вправо
POS_Z = 7.5 // назад-вперёд
POS_Y = 0 // вверх-вниз
LIMIT_SPEED = 0 // торможение: 0 - максимальная скорость, больше - медленнее
// параметры для старой ёлочки
//VOXELS_COUNT = 240
//CIRCLES_COUNT = 16
//DISPERSION = 0
//CIRCLE_SPEED = 0.0002
//MIN_R = 0
//MAX_R = 8
//MIN_CUBE = 1
//MAX_CUBE = 1
// цвета
c0 = color.rgb( 000 , 170 , 000 )
c1 = color.rgb( 255 , 000 , 000 )
c2 = color.rgb( 000 , 255 , 000 )
c3 = color.rgb( 000 , 000 , 255 )
c4 = color.rgb( 255 , 255 , 000 )
c5 = color.rgb( 000 , 255 , 255 )
c6 = color.rgb( 255 , 000 , 255 )
// шансы цветов
colors = [
c0 , c0 , c0 , c0 , c0 , c0 ,
c0 , c0 , c0 , c0 , c0 , c0 ,
c1 , c2 , c3 , c4 , c5 , c6 ]
// массив кругов
circles = []
// подсчёт общей длины кругов
ALL_CIRCLES_LENGTH = 0
for( i = 0 ; i ‹ CIRCLES_COUNT ; i++ ){
radius = MIN_R + ( MAX_R - MIN_R ) / CIRCLES_COUNT * i
ALL_CIRCLES_LENGTH += 2 * Math.PI * radius
}
// вокселей на единицу расстояния, на основании длины кругов и лимита вокселей
VOXELS_PER_LENGTH = VOXELS_COUNT / ALL_CIRCLES_LENGTH
// задание параметров кругов
for( i = 0 ; i ‹ CIRCLES_COUNT ; i++ ){
radius = MIN_R + ( MAX_R - MIN_R ) / CIRCLES_COUNT * i
length = 2 * Math.PI * radius
height = HEIGHT - HEIGHT / ( CIRCLES_COUNT - 1 ) * i
number = 1 + Math.floor( length * VOXELS_PER_LENGTH )
speed = CIRCLE_SPEED
speed *= DIRECTION == 0 ? ( i % 2 ? 1 : -1 ) : DIRECTION
add_circle( radius , height , number , speed )
}
// переменная для реализации торможения
last_time = 0
}
function add_circle( radius, height, number, speed ){
// структура с параметрами круга
circle = {
radius : radius ,
speed : speed ,
voxel : [] ,
voxel_angle : 0,
voxel_radius : []
}
// угол между вокселями
circle.voxel_angle = 360 / number * ( Math.PI / 180 )
// наполнение круга вокселями
for( c = 0 ; c ‹ number ; c++ ){
voxel = display.voxel( POS_X , POS_Y + rc( height - DISPERSION , height + DISPERSION ) , POS_Z , c0 )
voxel.scale = rc( MIN_CUBE , MAX_CUBE )
circle.voxel.push( voxel )
circle.voxel_radius.push( rc( radius - DISPERSION , radius + DISPERSION ) )
}
// добавление круга
circles.push( circle )
}
function rc( min , max ){
// случайное число в заданных пределах
return min + Math.random() * ( max - min )
}
function update( time_now ){
// торможение выполнения
if( time_now - last_time ‹ LIMIT_SPEED ) return
last_time = time_now
// проход по кругам
for( c = 0 ; c ‹ circles.length ; c++ ){
circle = circles[c]
// обновление позиций вокселей
for( v = 0 ; v ‹ circle.voxel.length ; v++ ){
voxel = circle.voxel[v]
// актуальный угол на основании времени
angle = ( circle.voxel_angle * v + time_now * circle.speed ) % 360
// множители угла для отступа на радиус
x = Math.cos( angle ) - Math.sin( angle )
z = Math.sin( angle ) + Math.cos( angle )
// смена позиции
voxel.cursorX = POS_X + x * circle.voxel_radius[v]
voxel.cursorZ = POS_Z + z * circle.voxel_radius[v]
// смена цвета
if( Math.random() ‹ CHANGE_CHANCE ){
voxel.color = colors[ Math.floor( Math.random() * colors.length ) ]
}
}
}
}
Снегопад можно взять в другой теме)
Решение возможных проблем (обновлено 2019-12-20 00:53)
Клиент по-умолчанию может использовать свою версию JAVA, игнорируя установленную в системе, и обе они могут быть не те, потому обновите JAVA и подключите в лаунчере именно установленную:
● Загрузите и установите новую, если не уверены, какая у вас
● В лаунчере выберите нужный аккаунт, настройка сохраняется для каждого отдельно
● "Изменить профиль" (карандашик)
● "Дополнительные настройки" (вкладки сверху)
● "Указать путь до java"
● Перейдите в место установки java, обычно C:/Program Files/Java
● Выберите там каталог с JRE (не JDK) версией постарше, если их несколько
● Далее каталог bin, и указываем java.exe
● Кнопка "ОК" в окне настройке профиля, чтобы сохранить (справа снизу)
Запустите игру с консолью. Посмотрите, что пишется в консоли, в момент вставки MCGL9 в проектор.
● "Destroy thread TextDisplay" - не ошибка, нормальное сообщение
● "Cannot convert 4290465319 to java.lang.Integer" - на компе не подходящая версия JAVA
● Если другая ошибка, скопируйте сюда
Настройки - Прочие:
● Автозапуск - Везде (ходить так по миру не рекомендуется)
● Частиц в проекторе - 5000
Пропишите персонажа в зоне, где стоит проектор, и возможно в городе, если зона в нём.
Помните, что MCGL9 работает на клиенте игрока, и другой игрок, с большой вероятностью, может не видеть того, что видите вы.