Проложить луч ко всем блокам одного типа

164
1
4
Есть луч в виде партикла, когда его спавнишь, указываешь начальные координаты и конечные, начальные без проблем, но вот конечные как указать так, чтобы луч проходил ко всем блокам этого типа (от BlockNode до всех остальных BlockNode), я даже придумать не могу...
 
164
1
4
А, ты про EntityThrowable?
[merge_posts_bbcode]Добавлено: 26.10.2015 13:45:38[/merge_posts_bbcode]

Посмотрел, не нашёл ничего подходящего. Там слишком много всего :p
 
164
1
4
Я не знаю как получать координаты блока. Я получаю координаты тайла  (стартовая позиция луча), но как мне получить координаты остальных точно таких же тайлов (конечная позиция луча) ?
 

svk

1,185
2
vec
vec1
rayTrays (Вроде так)

Вот эти три строки, идут в такой последовательности в тровейбле.
 
164
1
4
Нашел это:
Код:
        Vec3 vec3 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
        Vec3 vec31 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
        MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec3, vec31);
Теперь вопросы: это нужно в партикл вставить? В EntityThrowable это было в методе onUpdate, значит в партикл туда же? И что нужно делать дальше, я так понимаю это ещё не всё :p
 

svk

1,185
2
nikita488 написал(а):
Нашел это:
Код:
        Vec3 vec3 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
        Vec3 vec31 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
        MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec3, vec31);
Теперь вопросы: это нужно в партикл вставить?
Какой ещё партикл? Вставляй там, где нужно тебе :)
movingobjectposition будет содержать координаты конечного блока.
 
164
1
4
svk написал(а):
nikita488 написал(а):
Нашел это:
Код:
        Vec3 vec3 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
        Vec3 vec31 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
        MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec3, vec31);
Теперь вопросы: это нужно в партикл вставить?
Какой ещё партикл? Вставляй там, где нужно тебе :)
movingobjectposition будет содержать координаты конечного блока.
У меня луч это партикл, я спавню его через предмет так:
Код:
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityBeamFX(world, начальльнаяX, начальльнаяY, начальльнаяZ, конечнаяX, конечнаяY, конечнаяZ, r, g, b, age));
Это значит что я должен делать так?
Код:
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityBeamFX(world, x, y, z, movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ, r, g, b, age));
 
1,990
18
105
Не слушай svk.
Если тебе надо проложить лучи ко всем остальным ТАЙЛАМ, то всё очень хорошо. Берёшь ближайшие N чанков, в каждом из них есть список тайлов, по которому ты пробегаешься, там чекаешь тайл на instanceof и строишь луч, если надо. Координаты из тайла получить легко :)
 
164
1
4
Oldestkon написал(а):
Не слушай svk.
Если тебе надо проложить лучи ко всем остальным ТАЙЛАМ, то всё очень хорошо. Берёшь ближайшие N чанков, в каждом из них есть список тайлов, по которому ты пробегаешься, там чекаешь тайл на instanceof и строишь луч, если надо. Координаты из тайла получить легко :)
Я вот с чанками никогда не работал :C Как и откуда можно получить ближайшие чанки? =)
 
1,990
18
105
Берёшь x/z координаты тайла, делишь их на 16 - получаешь координату чанка.
Дальше world.getChunkFromCoords (как-то так). Ещё тебе придётся перебрать несколько чанков рядом через цикл, это, думаю, сможешь?
 
164
1
4
Хз, смогу, не смогу, но попробовать можно:
Код:
            for (int nearChunkX = chunkX - 16; nearChunkX < chunkX + 16; nearChunkX++)
                for (int nearChunkZ = chunkZ - 16; nearChunkZ < chunkZ + 16; nearChunkZ++)
                    world.getChunkFromChunkCoords(nearChunkX, nearChunkZ);
Надеюсь это не бред :p
 
1,990
18
105
Куда тебе столько чанков-то? Эй, остынь. Партикли видимы в пределах пары чанков.
Возьми хотя бы радиус в 2-3.
Да и с твоим радиусом ты получаешь ~тысячу чанков на перебор, это ДОВОЛЬНО много.
 
164
1
4
Oldestkon, Работает, спасибо :)
Код:
                    Chunk chunk;
                    int chunkX = conductor.xCoord / 16;
                    int chunkZ = conductor.zCoord / 16;
                    for (int nearChunkX = chunkX - 2; nearChunkX < chunkX + 2; nearChunkX++)
                    {
                        for (int nearChunkZ = chunkZ - 2; nearChunkZ < chunkZ + 2; nearChunkZ++)
                        {
                            chunk = world.getChunkFromChunkCoords(nearChunkX, nearChunkZ);
                            for (Object tileEntity : chunk.chunkTileEntityMap.values())
                            {
                                TileEntity receiver = (TileEntity) tileEntity;
                                if (receiver instanceof TileEntityNode && ((TileEntityNode) receiver).getEnergyStorage() != null)
                                {
                                    EntityBeamFX beam = new EntityBeamFX(world, node.xCoord + 0.5, node.yCoord + 0.5, node.zCoord + 0.5, receiver.xCoord + 0.5, receiver.yCoord + 0.5, receiver.zCoord + 0.5, 1.0F, 1.0F, 1.0F, 8);
                                    Minecraft.getMinecraft().effectRenderer.addEffect(beam);
                                }
                            }
                        }
                    }
 

svk

1,185
2
Ну вот, неужели я встретил адекватного кодера с такой аватаркой :D
 
2,955
12
Какой? Я тоже могу поставить свой скин на аватарку, тогда я перестану быть адекватным кодером?
Связи не улавливаю, вообще никакой.
 
Сверху