Kursor 4186 11

O temacie

Autor Sauron

Zaczęty 7.05.2012 roku

Wyświetleń 4186

Odpowiedzi 11

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy

Sauron

Kursor
2012-05-07, 20:00(Ostatnia zmiana: 2012-05-07, 20:01)
No to tak... Niedawno zainicjowałem LeGo wszystko było dobrze gra się włączała ślady krwi "na ekranie" są, tylko się dziwie, że nie ma kursora.

No i dodałem to do startup.d :
Cursor_Show();

oczywiście do INIT_GLOBAL
Od tego momentu kursor już jest, tylko wolałbym żeby płynniej chodził, bo jest baaaardzo wolny i żeby był tylko w menu.

Jak to zrobić???

A i jakby ktoś nie miał LeGo to dołączam plik Cursor.d

/***********************************\
               CURSOR
\***********************************/

//========================================
// Uservariablen
//========================================
var int Cursor_X;
var int Cursor_Y;
var int Cursor_RelX; // float
var int Cursor_RelY; // float
var int Cursor_Wheel;
var int Cursor_Left;
var int Cursor_Mid;
var int Cursor_Right;
var int Cursor_NoEngine;

var int Cursor_Event; // gCEvent(h)

//========================================
// [intern] Variablen
//========================================
var int Cursor_fX;
var int Cursor_fY;

//========================================
// Cursor verstecken
//========================================
var int Cursor_Hndl;
func void Cursor_Hide() {
    if(!Hlp_IsValidHandle(Cursor_Hndl)) { return; };

    View_Close(Cursor_Hndl);
};

//========================================
// Cursor anzeigen
//========================================
func void Cursor_Show() {
    if(Hlp_IsValidHandle(Cursor_Hndl)) { View_Open(Cursor_Hndl); return; };
    Print_GetScreenSize();
    Cursor_X = Print_Screen[PS_X] / 2;
    Cursor_Y = Print_Screen[PS_Y] / 2;
    Cursor_fX = mkf(Cursor_X);
    Cursor_fY = mkf(Cursor_Y);
    Cursor_Hndl = View_CreatePxl(Cursor_X, Cursor_Y, Cursor_X+64, Cursor_Y+64);
    View_SetTexture(Cursor_Hndl, Cursor_Texture);
    View_Open(Cursor_Hndl);
};

//========================================
// Maussteuerung An-/Ausschalten
//========================================
func void SetMouseEnabled(var int bEnabled) {
    CALL_IntParam(!!bEnabled /*Nur zur Sicherheit*/);
    CALL_IntParam(2);
    CALL__thiscall(MEM_ReadInt(9246288/* zCInput * zInput */), 5067008);
};

//========================================
// [intern] Klasse (von Engine genutzt)
//========================================
class _Cursor {
    var int relX;
    var int relY;
    var int wheel;
    var int keyLeft;
    var int keyMid;
    var int keyRight;
};

//========================================
// [intern] Tasten
//========================================
func void Cursor_KeyState(var int ptr, var int pressed) {
    var int keyState; keyState = MEM_ReadInt(ptr);
    // Kopiert aus der Ikarus.d
    if (keyState == KEY_UP) {
        if (pressed) {
            keyState = KEY_PRESSED;
        };
    } else if (keyState == KEY_PRESSED) {
        if (pressed) {
            keyState = KEY_HOLD;
        } else {
            keyState = KEY_RELEASED;
        };
    } else if (keyState == KEY_HOLD) {
        if (!pressed) {
            keyState = KEY_RELEASED;
        };
    } else {
        if (pressed) {
            keyState = KEY_PRESSED;
        } else {
            keyState = KEY_UP;
        };
    };
    MEM_WriteInt(ptr, keyState);
    return;
};

//========================================
// [intern] Enginehook
//========================================

func void Cursor_Update() {
    View_Top(Cursor_Hndl);
};

func void _Cursor_GetVal() {
    var _Cursor c; c = _^(Cursor_Ptr);

    Cursor_RelX = c.relX;
    Cursor_RelY = c.relY;
    Cursor_fX = addf(mulf(mkf(Cursor_RelX), mulf(MEM_ReadInt(Cursor_sX), mkf(2))), Cursor_fX);
    Cursor_fY = addf(mulf(mkf(Cursor_RelY), mulf(MEM_ReadInt(Cursor_sY), mkf(2))), Cursor_fY);

    Cursor_X = roundf(Cursor_fX);
    Cursor_Y = roundf(Cursor_fY);
    Cursor_Wheel = c.wheel;

    Cursor_KeyState(_@(Cursor_Left),  c.keyLeft);
    Cursor_KeyState(_@(Cursor_Right), c.keyRight);
    Cursor_KeyState(_@(Cursor_Mid),   c.keyMid);

if(Cursor_Left == KEY_PRESSED) {
Event_Execute(Cursor_Event, CUR_LeftClick);
};
if(Cursor_Right == KEY_PRESSED) {
Event_Execute(Cursor_Event, CUR_RightClick);
};
if(Cursor_Mid == KEY_PRESSED) {
Event_Execute(Cursor_Event, CUR_MidClick);
};
if(Cursor_Wheel != 0) {
if(Cursor_Wheel > 0) {
Event_Execute(Cursor_Event, CUR_WheelUp);
}
else {
Event_Execute(Cursor_Event, CUR_WheelDown);
};
};

    Print_GetScreenSize();
    if(Cursor_X > Print_Screen[PS_X]) {
        Cursor_X = Print_Screen[PS_X];
        Cursor_fX = mkf(Cursor_X);
    }
    else if(Cursor_X < 0) {
        Cursor_X = 0;
        Cursor_fX = mkf(Cursor_X);
    };
    if(Cursor_Y > Print_Screen[PS_Y]) {
        Cursor_Y = Print_Screen[PS_Y];
        Cursor_fY = mkf(Cursor_Y);
    }
    else if(Cursor_Y < 0) {
        Cursor_Y = 0;
        Cursor_fY = mkf(Cursor_Y);
    };

    if(Cursor_NoEngine) {
        c.relX = 0;
        c.relY = 0;
        c.keyLeft = 0;
        c.keyMid = 0;
        c.keyRight = 0;
        c.wheel = 0;
    };

    if(!Hlp_IsValidHandle(Cursor_Hndl)) { return; };

    View_MoveToPxl(Cursor_Hndl, Cursor_X, Cursor_Y);
    Cursor_Update();
};
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Aby wyłączyć, musiałbyś gdzieś wywołać tą funkcję:
SetMouseEnabled(0);
Nie wiem, czy jest gdzieś przechowywana wartość określająca, czy jest się w grze czy w menu. Jeśli jest coś takiego, to wystarczyło by pewnie
SetMouseEnabled(czy_w_menu);

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy

Sauron

Kursor
#2 2012-05-08, 15:37(Ostatnia zmiana: 2012-05-08, 15:40)
Co do menu to poszukam, ale co z prędkością/płynnością poruszania się kursora?

EDIT: Sprawdze jeszcze co to jest:

c.relX = 0;
c.relY = 0;
c.keyLeft = 0;
c.keyMid = 0;
c.keyRight = 0;
c.wheel = 0;
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
To zależy, co ile jest wywoływany skrypt kursora. Poszukaj w dokumentacji, jeśli istnieje taka, co jaki czas jest wywoływany.

Cytuj
EDIT: Sprawdze jeszcze co to jest:
c.relX = 0;
c.relY = 0;
c.keyLeft = 0;
c.keyMid = 0;
c.keyRight = 0;
c.wheel = 0;

Prawdopodobnie
c.relX = 0; //pozycja x myszki
c.relY = 0; //pozycja y myszki
c.keyLeft = 0; //LPM
c.keyMid = 0; //ŚPM
c.keyRight = 0; //PPM
c.wheel = 0; //kółko myszki?

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
Ja już z tego nic nie wiem. To sprawdzałem i wychodzi na to, że to odpowiada za wielkość:

   Cursor_X = Print_Screen[PS_X] / 2;
    Cursor_Y = Print_Screen[PS_Y] / 2;
    Cursor_fX = mkf(Cursor_X);
    Cursor_fY = mkf(Cursor_Y);
    Cursor_Hndl = View_CreatePxl(Cursor_X, Cursor_Y, Cursor_X+64, Cursor_Y+64);
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Jakie masz LeGo? Nie wiem jak w najnowszej wersji ale w pewnej kursor chodził BARDZO wolno może ściągnij najnowszą wersje LeGo bądź jakąś starszą.
 

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy

Sauron

Kursor
#6 2012-05-08, 20:55(Ostatnia zmiana: 2012-05-08, 20:59)
Mam najnowszą - 2.2.1
EDIT: Tak tragicznie no to nie ma... Bardziej mi zależy, żeby kurson był w menu, a w grze nie (wiem menu też należy do gry)
A i żeby nie zakładać nowego tematu to eee... jak przesunąć, albo konkretnie jak edytować paski życia, many, i powietrza np. żeby była jakaś umiejętność dzieki której zwiększy się "beziowa pojemność płuc"???
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
Nikt niewie jak to zrobić?
No to chociaż z paskami (wiem nie na temat)
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Pojemność płuc jest w standardowych skryptach

_Work\Data\Scripts\Content\ANIMS\Species.d

w czasie gry można spróbować zrobić to tak

Gil_Values.SWIM_TIME [GIL_HUMAN] = TIME_INFINITE * 2;
Ale nie mam pojęcia czy zadziała.

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
A jak przesunąć pasek np. many
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

Kursor
#10 2012-05-14, 21:02(Ostatnia zmiana: 2012-05-14, 21:03)
A jak przesunąć pasek np. many
instance mana_pasek (oCViewStatusBar) { };
MEM_InitGlobalInst();
MEM_AssignContentInst (mana_pasek, MEM_Game.manaBar);
mana_pasek.zCView_vposy = pozycja y;
mana_pasek.zCView_vposx = pozycja x;

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
Dobra, a teraz następne pytanie też nie na temat (mam nadzieję że warna nie dostane bo już troche mam i sorry, że tak napastuje pytaniami): zrobiłem pasek XP. Gra nie wczyta się do końca, a pasek już się pojawia (tak samo jest z kursorem) no i jeszcze inne paski są ukryte podczas dialogu, a mój pasek nie. Jak zrobić żeby pasek pojawiał się tak jak inne??
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry