Re: Classes in AHK, Basic tutorial.
Posted: 24 Jul 2018, 09:40
Thanks for the tutorial!!!
Let's help each other out
https://www.autohotkey.com/boards/
Code: Select all
...
IfWinNotExist ahk_class Notepad
{ Run Notepad
WinWait ahk_class Notepad
}
...
Thank You,
Code: Select all
;############################################################
;#======================= Commands =========================#
;############################################################ ;{
if Not A_IsAdmin AND A_OSVersion <> WIN_XP
{
Run *RunAs "%A_ScriptFullPath%"
ExitApp
}
Process, Priority,, High
SetWorkingDir %A_ScriptDir%
#NoEnv
#KeyHistory 0
SendMode Input
CoordMode, ToolTip, client
CoordMode, Mouse, client
CoordMode, Pixel, client
;}
;############################################################
;#======================= Initialise =======================#
;############################################################ ;{
i := 1
me := new Player
W1 := new Weapon, W1.setID("W" i++), W1.setName("M416"), W1.setFireMode(1)
W1.setClipSize(30), W1.setClipMagazine(30), W1.setAmmo(160)
W1.setFireRate(0.90)
W2 := new Weapon, W2.setID("W" i++), W2.setName("AK47"), W2.setFireMode(1)
W2.setClipSize(30), W2.setClipMagazine(30), W2.setAmmo(120)
W2.setFireRate(1.20)
W3 := new Weapon, W3.setID("W" i++), W3.setName("GLOCK"), W3.setFireMode(0)
W3.setClipSize(15), W3.setClipMagazine(15), W3.setAmmo(90)
W3.setFireRate(2.50)
me.setActiveWeapon(W1)
me.setFireMode(me.getActiveWeapon())
;}
;############################################################
;#====================== Main Window =======================#
;############################################################ ;{
Gui, Color, Black
Gui, Font, s10 cWhite q5, Verdana
Gui, Add, Picture, x522 y480 w-1 h90 vfmOSD, AUTO.png
Gui, Add, Picture, x200 y480 w-1 h90 vwOSD, M416.png
Gui, Add, GroupBox, x200 y405 w400 h50 vW, Weapons [1] [2] [3]
Gui, Add, Radio, x222 y429 vW1 gsetActiveWeapon Checked, M416
Gui, Add, Radio, x372 y429 vW2 gsetActiveWeapon, AK47
Gui, Add, Radio, x522 y429 vW3 gsetActiveWeapon, Glock
Gui, Add, GroupBox, x310 y350 w180 h50, Fire Mode [B]
Gui, Add, Radio, x322 y370 gChangeFireMode vFM1 Checked, Auto
Gui, Add, Radio, x412 y370 gChangeFireMode vFM0, Single
Gui, Font, s32 cGreen q5, Verdana
Gui, Add, Text, x200 y350 vClipMagazine, % me.getActiveWeapon().getClipSize()
Gui, Add, Text, x522 y350 vAmmo Right, % me.getActiveWeapon().getAmmo()
Gui, Show, w830 h615, Weapon Simulator
return
;}
;############################################################
;#======================== HotKeys =========================#
;############################################################ ;{
#IfWinActive, Weapon Simulator
;#####################################
*~LButton::
if (me.getActiveWeapon().getFireMode())
{
Loop
{
me.FireWeapon(me.getActiveWeapon())
Sleep, % (me.getActiveWeapon().getFireRate() * 100)
}until !GetKeyState("LButton")
}
else
me.FireWeapon(me.getActiveWeapon())
return
;#####################################
*$r::
me.ReloadWeapon(me.getActiveWeapon())
Sleep, % (me.getActiveWeapon().getFireRate() * 8)
return
;#####################################
*$VK31::
me.setActiveWeapon(W1)
me.setFireMode(me.getActiveWeapon())
return
;#####################################
*$VK32::
me.setActiveWeapon(W2)
me.setFireMode(me.getActiveWeapon())
return
;#####################################
*$VK33::
me.setActiveWeapon(W3)
me.setFireMode(me.getActiveWeapon())
return
;#####################################
*$x::
return
;#####################################
*$b::
me.ChangeFireMode(me.getActiveWeapon())
return
;#####################################
;}
;############################################################
;#======================= Functions ========================#
;############################################################ ;{
class Weapon {
;~ static WeaponFireMode := 1, ID := W1, Name := "M416", ClipSize := 30, ClipMagazine := 30, Ammo := 160, FireRate := 0.02
;#####################################
getID() {
return this.ID
}
setID(newID) {
this.ID := newID
return
}
;#####################################
getName() {
return this.Name
}
setName(Name) {
this.Name := Name
return
}
;#####################################
getFireMode() {
return this.WeaponFireMode
}
setFireMode(newWeaponFireMode) {
this.WeaponFireMode := newWeaponFireMode
return
}
;#####################################
getClipSize() {
return this.ClipSize
}
setClipSize(value) {
this.ClipSize := value
return
}
;#####################################
getClipMagazine() {
return this.ClipMagazine
}
setClipMagazine(value) {
this.ClipMagazine := value
return
}
;#####################################
getAmmo() {
return this.Ammo
}
setAmmo(value) {
this.Ammo := value
return
}
;#####################################
getFireRate() {
return this.FireRate
}
setFireRate(value) {
this.FireRate := value
return
}
}
;#####################################
;#####################################
class Player {
;~ static ActiveWeapon := W1, ActiveFireMode := 1, obj, ID
;#####################################
getID(ActiveWeapon) {
return ActiveWeapon.getID()
}
;#####################################
setActiveWeapon(ActiveWeapon) {
this.ActiveWeapon := ActiveWeapon
GuiControl,, % ActiveWeapon.getID(), 1
GuiControl,, wOSD, % ActiveWeapon.getName() ".png"
GuiControl,, ClipMagazine, % ActiveWeapon.getClipMagazine()
GuiControl,, Ammo, % ActiveWeapon.getAmmo()
return
}
getActiveWeapon() {
return this.ActiveWeapon
}
;#####################################
getFireMode() {
return this.ActiveFireMode
}
setFireMode(ActiveWeapon) {
this.ActiveFireMode := ActiveWeapon.getFireMode()
GuiControl,, % "FM" ActiveWeapon.getFireMode(), 1
GuiControl,, fmOSD, % (ActiveWeapon.getFireMode() ? "AUTO.png" : "SINGLE.PNG")
return
}
ChangeFireMode(ActiveWeapon) {
this.ActiveFireMode := ActiveWeapon.getFireMode()
ActiveWeapon.setFireMode(!this.ActiveFireMode)
GuiControl,, % "FM" !this.ActiveFireMode, 1
GuiControl,, fmOSD, % (ActiveWeapon.getFireMode() ? "AUTO.png" : "SINGLE.PNG")
return
}
;#####################################
FireWeapon(ActiveWeapon) {
if (ActiveWeapon.getClipMagazine() > 0)
{
ActiveWeapon.setClipMagazine(ActiveWeapon.getClipMagazine() - 1)
GuiControl,, ClipMagazine, % ActiveWeapon.getClipMagazine()
}
}
ReloadWeapon(ActiveWeapon) {
Sleep, % ActiveWeapon.getFireRate() * 5
if (ActiveWeapon.getAmmo() > 0)
{
dClip := ActiveWeapon.getClipSize() - ActiveWeapon.getClipMagazine()
if (ActiveWeapon.getAmmo() - dClip > 0 )
{
ActiveWeapon.setAmmo(ActiveWeapon.getAmmo() - dClip)
goto, Step1
}
else if (ActiveWeapon.getAmmo() - dClip = 0 )
{
ActiveWeapon.setAmmo(0)
goto, Step1
}
else if (ActiveWeapon.getAmmo() - dClip < 0 )
if (ActiveWeapon.getAmmo() >= 0 )
{
ActiveWeapon.setClipMagazine(ActiveWeapon.getClipMagazine()+ActiveWeapon.getAmmo())
ActiveWeapon.setAmmo(0)
GuiControl,, Ammo, % ActiveWeapon.getAmmo()
Sleep, 320
GuiControl,, ClipMagazine, % ActiveWeapon.getClipMagazine()
return
}
return
Step1:
GuiControl,, Ammo, % ActiveWeapon.getAmmo()
Sleep, 320
ActiveWeapon.setClipMagazine(ActiveWeapon.getClipMagazine()+dClip)
GuiControl,, ClipMagazine, % ActiveWeapon.getClipMagazine()
return
}
}
;#####################################
}
;#####################################
setActiveWeapon:
me.setActiveWeapon(%A_GuiControl%)
me.setFireMode(me.getActiveWeapon())
return
;#####################################
ChangeFireMode:
me.ChangeFireMode(me.getActiveWeapon())
return
;#####################################
GuiClose:
ExitApp
;##################################### ;}
Hey,jethrow wrote: ↑20 Jan 2015, 14:01I wanted to make sure it is understood that a class is not only a plan (or blueprint) for an Instance, but the class is an object itself. See Keyword Prototype instead of Class for more discussion.Code: Select all
class MyClass { SayHello() { MsgBox Hello } } MyClass.SayHello()
Code: Select all
class note {
static executable := "C:\Windows\notepad.exe"
dire() {
MsgBox % this.executable
}
}
MsgBox % note.executable
Code: Select all
class note {
executable := "C:\Windows\notepad.exe"
dire() {
MsgBox % this.executable
}
}
MsgBox % note.executable
Code: Select all
myclass
{
var1()
{
}
}
myotherclass
{
var1()
{
}
}
Code: Select all
#SingleInstance force
;Declare Class
Class Window{
__New(){
this.task1 := "eat"
}
}
Class Notepad extends Window{
__New(){
base.__New()
}
}
;Create Instance
SomeNote:= New Notepad
MsgBox, % SomeNote.task1 ;"eat"
return
Code: Select all
;Declare Class
Class A{
food:="rice"
__New(a,b){
this.task1 := a
this.task2 := b
}
class C{
drink1:="milk"
static drink2:="coffe"
}
}
Class B extends A{
__New(c){
base.__New(c,c)
}
wannaEat() {
MsgBox, % this.food A_Space A.C.drink2
}
}
;Create Instance
note:= New B("eat")
MsgBox, % note.task2 ;"eat"
note.wannaEat() ;"rice coffe"
MsgBox, % note.C.drink2 ;"coffe"
MsgBox, % A.C.drink2 ;"coffe" // u dont need to create an instance to use static property
wantToDrink:=new A.C
MsgBox, % wantToDrink.drink1 ;"milk"
return
Code: Select all
#SingleInstance, force
Class B {
__New(a){
this.food:=a
}
wannaEat() {
MsgBox, % this.food
}
saySomething(message) {
MsgBox, % message
}
}
Class A {
wannaEat() { ; use the same name of class B
MsgBox, % "this is class A"
}
crossCall(){
B.saySomething("this is class B") ; using class B's method
}
}
B.wannaEat() ;"" // haven't call the constructor __NEW()
; create an instance
food := new B("rice")
food.wannaEat() ;"rice"
A.wannaEat() ;"this is class A"
A.crossCall() ;"this is class B"
Code: Select all
class example {
static Var1 := 1
}
class example extends example {
myCoolMethod() {
}
}
; Error: Duplicate class definition.
Code: Select all
class example{
static Var1 := 1
}
class example2 {
myCoolMethod() {
return this.Var1 * 100
}
}
example.base := example2
msgbox, % example.myCoolMethod()
; => 100
Code: Select all
class example {
static Var1 := 1
}
class example1 extends example {
myCoolMethod() {
return this.Var1 * 100
}
}
msgbox, % example1.myCoolMethod()
Thank you for your time, sadly I want to add methods without changing the class name, like a "plugin" idea.