Dezember war kein guter Dev-Monat, dennoch gabs ein paar Sachen. Ich schraube immer noch an den Bossen rum, habe mir da schon ziemlich was angetan :roll:
Wirklich viel gibts wie gesagt nicht zu zeigen. Habe hier was halb-patzig angefangen, der Hintergedanke war ein Dyson-Sphere was überhaupt nicht ersichtlich ist.
Eben habe ich meine Laser mit den Schüssen kombiniert, auch eine Art von Bullet-Pattern :)
Immerhin habe ich eine Verbesserungen erstellt. Bislang wurden alle Objekte einzeln beim Aufstarten aus der DB geladen. Das wurde mit immer mehr Einheiten immer langsamer, bis es anfing zu nerven.
Die Unit-Files sind im JSON Format. Code muss ich im JSON als String gespeichert halten, für die Sonderzeichen habe ich mir Ersatz-Tokens gebaut. Ohne Editor sehr unangenehm zu lesen.
Code: Alles auswählen
[23670,1543406768,"HexCorn",{base:{ad:0.3,bdmg:0,bounce:0.1,killdelay:[2,0],aim:-2,aip:2,arad:20,ainame:undefined,ani:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],anitime:0.04,img:{url:'/group/tick',rot:-2,x:-100,y:-74,w:0,h:0,m:23,c:'r'},minicol:{r:0,g:0,b:0},omode:0.41,pxlsize:2,randHue:[900,0],code:'var _ = PARAM._;<br>var data = PARAM.data;<br><br>if(_.z){<br> if(_.z<=200) _.alpha = 1;<br> else _.alpha = 1-Math.min(1,(_.z-200)/400);<br>}<br><br>if(!data.grow){<br> data.grow = 1;<br> data.chase = 1;<br> <br> _.custom = {sub:[]};<br> //_.origin = -100;<br> //_.sub[0]._.scale = _.scale*0.3;<br> //console.log(`create centipeed`);<br> var ao = _.a.c;<br> var r = _.r;<br> var dif = _g_hex_.difficulty;<br> var lerp = 15;<br> //_.ad = 0.8-0.2*dif;<br> <br> var count = 6;<br> var pdata = {pnum:_.pnum};<br> for(var i=0;i<count;i++){<br> var a = (i+0.5)*_pi2_/count;<br> var ma = ao + a;<br> var face = Math.radPos(ma + _pi_);<br> <br> var body = _o_.create(`HexCornBody`,<br> _.x-Math.qcos(ma)*r,<br> _.y-Math.qsin(ma)*r,<br> face,<br> pdata);<br> <br> var b_ = body._;<br> b_.z = _.z;<br> b_.vz = _.vz;<br> b_.ad = _.ad;<br> <br> /*if(face != b_.a.c){<br> debugger;<br> }*/<br> <br> var scalef = (0.6+Math.qrand()*0.4);<br> b_.scale /*= b_.sub[0]._.scale */= _.scale * scalef;<br> b_.r = b_.rb *= scalef; <br> b_.origin = _.id;<br> var len = 60;<br> b_.custom={<br> target:_.id,<br> grow: len,<br> growm: len,<br> growa: a,<br> growc: 0,<br> pull: 0,<br> lerp: lerp,<br> pdata: pdata<br> }<br> _.custom.sub.push(b_);<br> }<br> <br> var angle = _pi2_/8, as = _pi2_/4;<br> var w2 = _g_.width()*0.5;<br> var r = w2*1.4;<br> for(var i=0;i<4;i++, angle+=as){<br> //HexCornered<br> var cornered = _o_.create(`HexCornered`,<br> w2-Math.qcos(angle)*r,<br> w2-Math.qsin(angle)*r,<br> 0,<br> pdata);<br> cornered._.origin = _.id;<br> }<br> console.log(`create corn`);<br> data.change = -1000;<br>}<br><br>var ma = _.a.c;<br>_e_.paintLine(_redimg_, 0, 0, -1, 100000, 0.95, _.x, _.y*yFactor, _.x+Math.qcos(ma)*100, _.y+Math.qsin(ma)*100, 5, 1);<br><br>if(_.z>0) return;<br><br>//check sub, require 3 to live<br>var salive = 0;<br>var sub = _.custom.sub;<br>for(var i=sub.length-1;i>=0;i--){<br> if(sub[i].alive==1) salive++;<br> else sub.splice(i,1);<br>}<br>if(salive<2){<br> _.mobj.kill();<br>}<br><br>var h = _.h, percent = h.c/h.p;<br>var v = 250-percent*150;<br>var target = _g_.getObject(data.targetId);<br>if(target aANDdaANDd target._.name == _g_hex_.vehicleName aANDdaANDd (percent<0.5 || salive<5)){<br> v = -v;<br> data.chase = -1;<br>}else{<br> data.chase = 1;<br>}<br><br>window._circleai_(PARAM, v);',ep:3000,ei:200,h:200,s:0,sp:0,sr:0,ss:0,ex:{ex0:{alpha:[0.3,0.2],alphaEnd:[0.1,0.2],hue:900,img:{url:'/explosion/dust1',x:-58,y:-50,w:0,h:0,m:12,c:'c'},scaleEnd:[0.7,0.7],scaleStart:[0.5,0.7],step:[0.06,0],zindex:100,name:'Explosion'}},height:100,m:100,r:20,scaleMax:1.5,scaleMin:1.5,keymode:"jeep",name:'Base',splatter:{splatter0:{adjustY:1,alpha:[0.7,0.3],hue:0,img:{url:'/environ/splatter',x:-50,y:-50,w:0,h:0,m:8,c:'r'},mode:[0.41,0],scale:[1.5,0.5],name:'Splatter',timeout:120}},vr:0.1,vim:-300,vip:300},description:undefined,name:'HexCorn'}]
Name der Einheit an Server -> DB abfragen -> Resultat mit eval in code umwandeln -> code/script im Objekt convertieren und ebenfalls mit eval aktivieren.
Neu werden alle Einheiten in einer JS Datei gespeichert ~30k Zeilen. Es muss nichts mehr mit eval aktiviert werden, da code nicht mehr als string gespeichert wird -> viel schneller als zuvor. Will ich eine Einheit dennoch aus der DB laden muss ich den Namen der Einheit mit $ prefixen und ich bekomme die frische Version geliefert.