• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

CR - Book

JASS:
library Book initializer Init requires GUI, Buttons, Sliders, MainEngine, ArrowsRegister
    
//globals
    private trigger Esc = CreateTrigger()
    private destructable Background, BookModel
    public bool IsOpened = false
    private texttag Title
    private texttag Left_Page[15], Right_Page[15]
    private texttag PageIndex[2]
    private int CurrentPage, BookId
    private timer DelayTimer = CT
//=============================================
    define BOOK_MODEL_ID = 'B037'
    
    
    private void ShowTitle(){ SetTextTagVisibility(Title, true) }
    
    private void RemovePagesContent(){
        int index = 0
            while(index++ < 15){
                DestroyTextTag(Left_Page[index])
            }
    }
    
    private void ShowPagesContent(){
        int index = 0, sub_string_mod = 0
        real y_mod = 25.
        string s = LoadStr(hash, BookId, CurrentPage)
            while(index++ < 25){
                Left_Page[index] = CreateTextTag()
                SetTextTagText(Left_Page[index], SubString(s, sub_string_mod, (sub_string_mod) + 45), (10. * 0.023) / 10.)
                SetTextTagPos(Left_Page[index], GUI_X(1), GUI_Y(10) - (y_mod * index), 0.)
                SetTextTagColor(Left_Page[index], 65, 65, 65, 25)
                sub_string_mod += 44
            }
        
    }
    
    private void RightArrow(){
        if (IsOpened and TimerGetRemaining(DelayTimer) <= 0.) {
                if CurrentPage == 0 {
                    SetDestructableAnimation(BookModel, "morph")
                    SetTextTagVisibility(Title, false)
                    TimerStart(DelayTimer, 1.666, false, function ShowPagesContent)
                }
                else {
                    RemovePagesContent()
                    SetDestructableAnimation(BookModel, "attack")
                    TimerStart(DelayTimer, 0.666, false, function ShowPagesContent)
                }
            CurrentPage++
        }
    }
    
    private void LeftArrow(){
        if (IsOpened and TimerGetRemaining(DelayTimer) <= 0.) {
                if CurrentPage - 1 == 0 {
                    CurrentPage = 0
                    SetDestructableAnimation(BookModel, "morph alternate")
                    TimerStart(DelayTimer, 1.166, false, function ShowTitle)
                }
                else {
                    RemovePagesContent()
                    SetDestructableAnimation(BookModel, "attack alternate")
                    TimerStart(DelayTimer, 0.666, false, function ShowPagesContent)
                }
            if CurrentPage > 0 { CurrentPage-- }
        }
    }
    
    void OpenBook(int book_id){
        int index = 0
        if IsOpened { return }
        else {
            IsOpened = true
            Background = CreateDestructable('B001', BASE_X, BASE_Y, 90., 6.5, 0)
            BookModel = CreateDestructable(BOOK_MODEL_ID, BASE_X, BASE_Y, 270., 3.35, 0)
            GUI_TurnOnCamera()
            FogModifierStart(GUI_Visibility)
            Title = CreateTextTag()
            SetTextTagText(Title, BookName[book_id], (13.5 * 0.023) / 10.)
            SetTextTagPos(Title, GUI_X(14), GUI_Y(6), 5.)
            SetTextTagColor(Title, 65, 65, 65, 25)
            CurrentPage = 0
            BookId = book_id
        }
    }
    
    void ExitBook(){
        if not IsOpened { return }
        else {
            RemoveDestructable(Background)
            RemoveDestructable(BookModel)
            IsOpened = false
            FogModifierStop(GUI_Visibility)
            GUI_ResetCamera()
            DestroyTextTag(Title)
            RemovePagesContent()
        }
    }
    
    private void Init(){
        gg_trg_Book = CreateTrigger()
        TriggerRegisterPlayerEvent(Esc, Player(0), EVENT_PLAYER_END_CINEMATIC)
        TriggerAddAction(Esc, function ExitBook)
        TriggerAddAction(ArrowsRegister_Right_Up, function RightArrow)
        TriggerAddAction(ArrowsRegister_Left_Up, function LeftArrow)
        SetPlayerTechMaxAllowed(Player(0), 'HERO', 3)
        SetPlayerTechMaxAllowed(Player(0), 'H002', 1)
        SetPlayerTechMaxAllowed(Player(0), 'Hpal', 1)
        SetPlayerTechMaxAllowed(Player(0), 'Hblm', 1)
        SetPlayerTechMaxAllowed(Player(0), 'Hamg', 1)
        SetPlayerTechMaxAllowed(Player(0), 'Hmkg', 1)
    }
    
endlibrary
Top