Hey leute ich möchte euch gerne ein kleines Projekt vorstellen.
Ich möchte hier eine ganze dx-gui-klasse nach und nach posten wer nicht weiß was ich damit meine ich meine damit, das ich alle gui sachen in dx form machen will.
Das bedeutet das man z.B edit = Editbox:Create( x, y, w, h ) machen kann und sie mit dxSetVisible( edit, false ) ausblenden kann ein beispiel.
Heute möchte ich zurerst die dxEdit raus hauen.
Die dxEdit wird auch noch geupdatet es werden viele sachen wie dxSetColor noch hinzugefügt!
Externer Inhalt
abload.de
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
"DX:Editbox"
Lua
--Klasse--
Editbox = {}
Editbox.__index = Editbox
local fontsize = 1.0
local fonttype = "default-bold"
local x,y = guiGetScreenSize()
function isCursorOnElement(x,y,w,h)
if isCursorShowing() then
local mx,my = getCursorPosition()
local fullx,fully = guiGetScreenSize()
cursorx,cursory = mx*fullx,my*fully
if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then
return true
else
return false
end
end
end
function Editbox:New( x, y, w, h )
local data = {};
data.x = x;
data.y = y;
data.w = w;
data.h = h;
data.activ = true
data.alpha = 0
data.text = ""
self.textactiv = true
data.clickFunc = function(_, state ) data:onClick( _, state) end
data.renderFunc = function() data:onRender() end;
data.characterFunc = function( character, press ) data:onCharacter( character, press ) end
addEventHandler("onClientKey", root, data.characterFunc)
addEventHandler("onClientClick", root, data.clickFunc)
addEventHandler("onClientRender", root, data.renderFunc)
setmetatable( data, self )
return data;
end
function Editbox:onClick( _, state )
if not( self.activ ) then
return;
end
if ( state == "down" ) then
if isCursorOnElement( self.x, self.y, self.w, self.h ) then
self.textactiv = true
else
self.textactiv = false
end
end
end
-- Diese Buchstaben sind zurzeit aktiviert du kannst selber noch welche hinzufuegen --
enableKeys = {
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'l',
'k',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'v',
'w',
'x',
'y',
'z',
'backspace',
'space'
}
function isEnableKey( character )
local value = false;
for index, key in ipairs( enableKeys ) do
if ( character == key ) then
value = true;
end
end
return value;
end
function Editbox:onCharacter( character, press )
if not ( self.textactiv ) then
return;
end
if ( press ) then
if isEnableKey( character ) and not isChatBoxInputActive() and not isConsoleActive() and not isMainMenuActive() then
if ( character == "space" ) and ( dxGetTextWidth( self.text, fontsize, fonttype ) <= (self.w-7) ) then
self.text = self.text.." "
return;
end
if not( character == "backspace" ) and ( dxGetTextWidth( self.text, fontsize, fonttype ) <= (self.w-7) ) then
self.text = self.text..character
else
if ( #self.text > 0 ) and not isChatBoxInputActive() and not isConsoleActive() and not isMainMenuActive() then
sub = string.sub(self.text, 1, #self.text - 1)
self.text = sub
end
end
end
end
end
-- Hier werden alle sachen dann eingebaut die gerendet werden sollen! --
local value = 0
function Editbox:onRender()
if not ( self.activ ) then
return;
end
dxDrawRectangle(self.x, self.y, self.w, self.h, tocolor(1, 1, 1, 168), false)
local X = self.x+1
local Y = self.y
value = value + 10
if dxGetTextWidth( self.text, 1 ) <= self.w then
dxDrawRectangle(X+dxGetTextWidth( self.text, fontsize, fonttype ), Y+1, 1, self.h-2, tocolor(255, 255, 255, self.alpha+value), true)
end
if (#self.text) > 0 then
dxDrawText( self.text, X, self.y+(self.h/2)-5, self.w, self.y+(self.h/2)-5, tocolor ( 255, 255, 255, 255 ), 1, "default-bold")
end
end
-------------------- dxElement Funktionen ---------------------------
function dxSetVisible( element, state )
if ( element ) then
dxElement.activ = state;
else
return outputDebugString("Failed setVisible dxElement!");
end
end
function dxGetVisible( element )
if ( element ) then
return(element.activ);
else
return outputDebugString("Failed getVisible dxElement!");
end
end
function dxGetText( element )
if ( element ) then
return element.text;
else
return outputDebugString("Failed dxGetText");
end
end
---------------------------------------------------------------------
-- Hier ein kleiner Test, mit /testo lässt man eine edit erstellen udn anzeigen mit /visible kann man sie ausblenden --
local screenX, screenY = guiGetScreenSize()
function visible_test()
dxSetVisible( Edit, false )
outputChatBox(" Edit wurde ausgeblendet! ")
end
addCommandHandler("visible", visible_test)
function edit_test()
showCursor( true )
Edit = Editbox:New( 499*screenX/1680, 232*screenY/1050, 194, 30 ) -- 194
end
addCommandHandler("testo", edit_test)
Alles anzeigen
Erwähnung ich lerne damit direkt OOP besser mit da ich es selber erst seit kurzen benutze das ist einer meiner ersten klassen.
Danke fürs zuhören viel spaß damit.