Guest User

betterAi

a guest
Jun 28th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. betterAi = {};
  2. betterAi.objectCatch = {};
  3. betterAi.classes = {};
  4.  
  5. betterAi.altClassMap = {
  6. --For spesific odf i.e:
  7. --avtank = "aTankAi"
  8. }
  9. betterAi.objectClassMap = {
  10. turretTank = "turrAi",
  11. turret = "turrAi"
  12. }
  13.  
  14. betterAi.setCustomAi = function(odf,aiName)
  15. betterAi.altClassMap[odf] = aiName;
  16. end
  17.  
  18. betterAi.setCustomAiForType = function(classLabel,aiName)
  19. betterAi.objectClassMap[classLabel] = aiName;
  20. end
  21.  
  22. betterAi.createCustomAi = function(name)
  23. betterAi.classes[name] = betterAi.classes.extend(betterAi.classes.gameObject);
  24. return betterAi.classes[name].prototype;
  25. end
  26.  
  27. betterAi.Update = function(dTime)
  28. for i,v in pairs(betterAi.objectCatch) do
  29. v:update(dTime);
  30. end
  31.  
  32. end
  33. betterAi.DeleteObject = function(h)
  34. if(betterAi.objectCatch[h]) then
  35. betterAi.objectCatch[h]:destroy();
  36. betterAi.objectCatch[h] = nil;
  37. end
  38. end
  39. betterAi.AddObject = function(h)
  40. local odf = GetOdf(h);
  41. local objClass = GetClassLabel(h);
  42. odf = odf:sub(1,6);
  43. if(betterAi.classes[odf]) then
  44. betterAi.objectCatch[h] = betterAi.classes[odf](h);
  45. elseif(betterAi.altClassMap[odf]) then
  46. betterAi.objectCatch[h] = betterAi.classes[betterAi.altClassMap[odf]](h);
  47. elseif(betterAi.objectClassMap[objClass]) then
  48. betterAi.objectCatch[h] = betterAi.classes[betterAi.objectClassMap[objClass]](h);
  49. end
  50. end
  51.  
  52. betterAi.classes.extend = function(base)
  53. local child = {};
  54. child.prototype = {super = base};
  55.  
  56. if base then
  57. setmetatable(child.prototype,{__index = base.prototype});
  58. else
  59. child.prototype.new = function(self,...)
  60. local nInst = setmetatable({},self.mt);
  61. nInst:init(...);
  62. return nInst;
  63. end
  64. end
  65. child.mt = {__index = child.prototype};
  66. setmetatable(child,{__index = child.prototype,__call = child.prototype.new});
  67.  
  68.  
  69. return child;
  70. end
  71.  
  72. betterAi.classes.gameObject = {};
  73. betterAi.classes.gameObject.prototype = {
  74. new = function(self,...)
  75. local nInst = setmetatable({},self.mt);
  76. nInst:init(...);
  77. return nInst;
  78. end,
  79. init = function(self,handle)
  80. print(self);
  81. self.handle = handle;
  82. self.odf = GetOdf(handle);
  83. self.label = GetLabel(handle);
  84. end,
  85. update = function(self,dTime)
  86. --"virtual" function
  87. end,
  88. destroy = function(self)
  89. --"virtual" function
  90. end
  91. };
  92. betterAi.classes.gameObject.mt = {
  93. __index = betterAi.classes.gameObject.prototype;
  94. }
  95. setmetatable(betterAi.classes.gameObject,{
  96. __index = betterAi.classes.gameObject.prototype,
  97. __call = betterAi.classes.gameObject.prototype.new
  98. });
  99.  
  100. betterAi.classes.turrAi = betterAi.classes.extend(betterAi.classes.gameObject);
  101.  
  102. betterAi.classes.turrAi.prototype.init = function(self,...)
  103. self.super.init(self,...);
  104. self.target = nil;
  105. self.lastTimeShot = 0;
  106. self.hasWaited = false;
  107. self.ignoreShot = false;
  108. end
  109.  
  110. betterAi.classes.turrAi.prototype.update = function(self,dTime)
  111. self.lastTimeShot = GetTime() - GetLastEnemyShot(self.handle);
  112. if(self.lastTimeShot > 5) then
  113. self.hasWaited = true;
  114. end
  115. self.ignoreShot = self.lastTimeShot > 15;
  116. if(self.lastTimeShot < 1 and self.hasWaited and GetWhoShotMe(self.handle) ~= self.target) then
  117. self.target = GetWhoShotMe(self.handle);
  118. self.hasWaited = false;
  119. Attack(self.handle,self.target);
  120. end
  121. if(self.ignoreShot and self.target ~= GetNearestEnemy(self.handle)) then
  122. self.target = GetNearestEnemy(self.handle);
  123. Attack(self.handle,self.target);
  124. end
  125. end
Advertisement
Add Comment
Please, Sign In to add comment