Совместные спрайты для разных событий

Сообщения
1,560
Реакции
1,573
Помог
2 раз(а)
Для начала смотрим видео спрайта совместного с солнцем и луной


И вот что мне нужно

Я сейчас выдаю отдельные спрайты на солнце и луну

Код:
#define SUN            "sprites/weather_system/sun.spr"
#define MOON        "sprites/weather_system/moon.spr"
А хочу поставить один спрайт и что-бы отдельные фреймы выставлялись на определённые события

Код:
#define SUN_MOON        "sprites/weather_system/sun_moon.spr"
Вот все открывки из кода

Здесь,если у меня грузится день - то выставляется солнце SUN
А если ноч - то луна MOON

Код:
Create_Sun_Moon(spawn_position_index)
{
    new iEntity = create_entity("env_sprite");
    
    if(!pev_valid(iEntity))
        return;

    static Float:vecOrigin[3];
    pev(iEntity, pev_origin, vecOrigin);

    Set_Spawn_Position(spawn_position_index, vecOrigin);

    set_pev(iEntity, pev_classname, CLASSNAME_SUN_MOON);
    set_pev(iEntity, pev_solid, SOLID_NOT);
    set_pev(iEntity, pev_scale, SIZE_SUN_MOON);

    engfunc(EngFunc_SetOrigin, iEntity, vecOrigin);
    engfunc(EngFunc_SetModel, iEntity, (g_iWeather_Sun_Moon == Weather_Moon) ? MOON : SUN);

    set_kvd(0, KV_KeyName, "framerate");
    set_kvd(0, KV_Value, "11.0");
    dllfunc(DLLFunc_KeyValue, iEntity, 0);
    dllfunc(DLLFunc_Spawn, iEntity);

    engfunc(EngFunc_SetSize, iEntity, Float:{-50000.0, -50000.0, -50000.0}, Float:{50000.0, 50000.0, 50000.0});
}
И вот нужно прям у этой функции выставить,если день - то фрейм 0 солнца из спрайта и цвет его жёлтый

А если ноч - то выставить фреймы из 1го к 12 фрейму из спрайта ,но что-бы он был оригинального уже цвета ,как мы видели на видео без покраски,но и что-бы уже анимировал по кругу эти же фреймы

Вот и всё

Сделали такой код
И 2 проблемы

1.Цепляет на режим луны 0 фрейм солнца совместно
2.Анимирует спрайт с задержкой ( на видео видно )

Код:
#define SUN_MOON        "sprites/weather_system/sun_moon.spr"

new g_iTaskFrame = 1         // для счетчика индексов луны
new Float:g_fSpeedFrame = 0.1     // скорость смены кадров
new szFrameText[8]

public plugin_init()
{
    register_think(CLASSNAME_SUN_MOON, "sun_moon_think")
}

Create_Sun_Moon(spawn_position_index)
{
    new iEntity = create_entity("env_sprite");
    
    if(!pev_valid(iEntity))
        return;

    static Float:vecOrigin[3];
    pev(iEntity, pev_origin, vecOrigin);

    Set_Spawn_Position(spawn_position_index, vecOrigin);

    set_pev(iEntity, pev_classname, CLASSNAME_SUN_MOON);
    set_pev(iEntity, pev_solid, SOLID_NOT);
    set_pev(iEntity, pev_scale, SIZE_SUN_MOON);

    set_pev(iEntity, pev_rendermode, kRenderTransAlpha)
    set_pev(iEntity, pev_renderamt, 255.0)

    engfunc(EngFunc_SetOrigin, iEntity, vecOrigin);
    engfunc(EngFunc_SetModel, iEntity, SUN_MOON);

    set_kvd(0, KV_KeyName, "framerate");
    set_kvd(0, KV_Value, "11.0");
    dllfunc(DLLFunc_KeyValue, iEntity, 0);
    dllfunc(DLLFunc_Spawn, iEntity);

    engfunc(EngFunc_SetSize, iEntity, Float:{-50000.0, -50000.0, -50000.0}, Float:{50000.0, 50000.0, 50000.0});

    set_pev(iEntity, pev_nextthink, get_gametime() + g_fSpeedFrame)
}

public sun_moon_think(iEntity)
{
    if(!pev_valid(iEntity))
        return;

    if(g_iWeather_Sun_Moon == Weather_Moon)
    {
        formatex(szFrameText, 8, "%d.0", g_iTaskFrame++)
        set_kvd(0, KV_KeyName, "framerate");
        set_kvd(0, KV_Value, szFrameText);
        dllfunc(DLLFunc_KeyValue, iEntity, 0);

        g_iTaskFrame++

        if(g_iTaskFrame == 13)
        {
            g_iTaskFrame = 1
        }
    }
    else
    {
        set_kvd(0, KV_KeyName, "framerate");
        set_kvd(0, KV_Value, "0.0");
        dllfunc(DLLFunc_KeyValue, iEntity, 0);

        set_pev(iEntity, pev_rendercolor, {250.0, 250.0, 0.0})
    }

    set_pev(iEntity, pev_nextthink, get_gametime() + g_fSpeedFrame)
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу