# HG changeset patch # User koda # Date 1515594467 -3600 # Node ID 8f99199b33ea29dddf1ac2e37904f16e8ab7afc1 # Parent a089326f0e16d0d788b205efca894e2d5701a840# Parent 41d147eb26ea813a8de77d8e9c06ba1eddd54424 merge diff -r 41d147eb26ea -r 8f99199b33ea CMakeLists.txt --- a/CMakeLists.txt Wed Jan 10 01:39:10 2018 +0100 +++ b/CMakeLists.txt Wed Jan 10 15:27:47 2018 +0100 @@ -80,8 +80,8 @@ #versioning set(CPACK_PACKAGE_VERSION_MAJOR 0) set(CPACK_PACKAGE_VERSION_MINOR 9) -set(CPACK_PACKAGE_VERSION_PATCH 23) -set(HEDGEWARS_PROTO_VER 53) +set(CPACK_PACKAGE_VERSION_PATCH 24) +set(HEDGEWARS_PROTO_VER 54) set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") include(${CMAKE_MODULE_PATH}/revinfo.cmake) diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/main.rs --- a/gameServer2/src/main.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/main.rs Wed Jan 10 15:27:47 2018 +0100 @@ -11,7 +11,7 @@ //use std::io::*; //use rand::Rng; //use std::cmp::Ordering; -use mio::tcp::*; +use mio::net::*; use mio::*; mod utils; @@ -36,24 +36,24 @@ poll.poll(&mut events, None).unwrap(); for event in events.iter() { - if event.kind().is_readable() { + if event.readiness() & Ready::readable() == Ready::readable() { match event.token() { utils::SERVER => server.accept(&poll).unwrap(), - tok => server.client_readable(&poll, tok).unwrap(), + Token(tok) => server.client_readable(&poll, tok).unwrap(), } } - if event.kind().is_writable() { + if event.readiness() & Ready::writable() == Ready::writable() { match event.token() { utils::SERVER => unreachable!(), - tok => server.client_writable(&poll, tok).unwrap(), + Token(tok) => server.client_writable(&poll, tok).unwrap(), } } - if event.kind().is_hup() || event.kind().is_error() { - match event.token() { - utils::SERVER => unreachable!(), - tok => server.client_error(&poll, tok).unwrap(), - } - } +// if event.kind().is_hup() || event.kind().is_error() { +// match event.token() { +// utils::SERVER => unreachable!(), +// Token(tok) => server.client_error(&poll, tok).unwrap(), +// } +// } } } } diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/actions.rs --- a/gameServer2/src/server/actions.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/actions.rs Wed Jan 10 15:27:47 2018 +0100 @@ -22,12 +22,12 @@ use self::Action::*; -pub fn run_action(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, action: Action) { +pub fn run_action(server: &mut HWServer, token: usize, poll: &mio::Poll, action: Action) { match action { SendMe(msg) => server.send(token, &msg), SendAllButMe(msg) => { - for c in server.clients.iter_mut() { + for (_i, c) in server.clients.iter_mut() { if c.id != token { c.send_string(&msg) } @@ -57,7 +57,7 @@ let joined_msg; { let mut lobby_nicks: Vec<&str> = Vec::new(); - for c in server.clients.iter() { + for (_, c) in server.clients.iter() { if c.room_id.is_some() { lobby_nicks.push(&c.nick); } @@ -71,7 +71,7 @@ ]); }, AddRoom(name, password) => { - let room_id = server.rooms.insert(HWRoom::new()).ok().expect("Cannot add room"); + let room_id = server.rooms.insert(HWRoom::new()); { let r = &mut server.rooms[room_id]; let c = &mut server.clients[token]; diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/client.rs --- a/gameServer2/src/server/client.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/client.rs Wed Jan 10 15:27:47 2018 +0100 @@ -1,4 +1,4 @@ -use mio::tcp::*; +use mio::net::TcpStream; use mio::*; use std::io::Write; use std::io; @@ -15,8 +15,8 @@ decoder: ProtocolDecoder, buf_out: netbuf::Buf, - pub id: Token, - pub room_id: Option, + pub id: usize, + pub room_id: Option, pub nick: String, pub protocol_number: u32, pub is_master: bool, @@ -31,7 +31,7 @@ decoder: ProtocolDecoder::new(), buf_out: netbuf::Buf::new(), room_id: None, - id: Token(0), + id: 0, nick: String::new(), protocol_number: 0, @@ -42,7 +42,7 @@ } pub fn register(&mut self, poll: &Poll, token: Token) { - poll.register(&self.sock, token, Ready::all(), + poll.register(&self.sock, token, Ready::readable() | Ready::writable(), PollOpt::edge()) .ok().expect("could not register socket with event loop"); @@ -72,7 +72,7 @@ self.sock.flush(); } - pub fn readable(&mut self, poll: &Poll) -> Vec { + pub fn readable(&mut self, _poll: &Poll) -> Vec { let v = self.decoder.read_from(&mut self.sock).unwrap(); debug!("Read {} bytes", v); let mut response = Vec::new(); @@ -85,13 +85,13 @@ response } - pub fn writable(&mut self, poll: &Poll) -> io::Result<()> { + pub fn writable(&mut self, _poll: &Poll) -> io::Result<()> { self.buf_out.write_to(&mut self.sock)?; Ok(()) } - pub fn error(&mut self, poll: &Poll) -> Vec { + pub fn error(&mut self, _poll: &Poll) -> Vec { return vec![ByeClient("Connection reset".to_string())] } } diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/handlers/inroom.rs --- a/gameServer2/src/server/handlers/inroom.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/handlers/inroom.rs Wed Jan 10 15:27:47 2018 +0100 @@ -6,7 +6,7 @@ use protocol::messages::HWProtocolMessage; use protocol::messages::HWServerMessage::*; -pub fn handle(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, message: HWProtocolMessage) { +pub fn handle(server: &mut HWServer, token: usize, _poll: &mio::Poll, message: HWProtocolMessage) { match message { _ => warn!("Unimplemented!"), } diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/handlers/lobby.rs --- a/gameServer2/src/server/handlers/lobby.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/handlers/lobby.rs Wed Jan 10 15:27:47 2018 +0100 @@ -6,14 +6,14 @@ use protocol::messages::HWProtocolMessage; use protocol::messages::HWServerMessage::*; -pub fn handle(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, message: HWProtocolMessage) { +pub fn handle(server: &mut HWServer, token: usize, poll: &mio::Poll, message: HWProtocolMessage) { match message { HWProtocolMessage::Chat(msg) => { let chat_msg = ChatMsg(&server.clients[token].nick, &msg).to_raw_protocol(); server.react(token, poll, vec![SendAllButMe(chat_msg)]); }, HWProtocolMessage::CreateRoom(name, password) => { - let room_exists = server.rooms.iter().find(|&r| r.name == name).is_some(); + let room_exists = server.rooms.iter().find(|&(_, r)| r.name == name).is_some(); if room_exists { server.react(token, poll, vec![Warn("Room exists".to_string())]); } else { diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/handlers/loggingin.rs --- a/gameServer2/src/server/handlers/loggingin.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/handlers/loggingin.rs Wed Jan 10 15:27:47 2018 +0100 @@ -6,7 +6,7 @@ use protocol::messages::HWProtocolMessage; use protocol::messages::HWServerMessage::*; -pub fn handle(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, message: HWProtocolMessage) { +pub fn handle(server: &mut HWServer, token: usize, poll: &mio::Poll, message: HWProtocolMessage) { match message { HWProtocolMessage::Nick(nick) => if server.clients[token].room_id == None { diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/handlers/mod.rs --- a/gameServer2/src/server/handlers/mod.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/handlers/mod.rs Wed Jan 10 15:27:47 2018 +0100 @@ -12,7 +12,7 @@ mod lobby; mod inroom; -pub fn handle(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, message: HWProtocolMessage) { +pub fn handle(server: &mut HWServer, token: usize, poll: &mio::Poll, message: HWProtocolMessage) { match message { HWProtocolMessage::Ping => server.react(token, poll, vec![SendMe(Pong.to_raw_protocol())]), diff -r 41d147eb26ea -r 8f99199b33ea gameServer2/src/server/server.rs --- a/gameServer2/src/server/server.rs Wed Jan 10 01:39:10 2018 +0100 +++ b/gameServer2/src/server/server.rs Wed Jan 10 15:27:47 2018 +0100 @@ -1,5 +1,5 @@ use slab; -use mio::tcp::*; +use mio::net::*; use mio::*; use std::io; @@ -7,19 +7,19 @@ use super::client::HWClient; use super::actions; -type Slab = slab::Slab; +type Slab = slab::Slab; pub struct HWServer { listener: TcpListener, pub clients: Slab, pub rooms: Slab, - pub lobby_id: Token, + pub lobby_id: usize, } impl HWServer { pub fn new(listener: TcpListener, clients_limit: usize, rooms_limit: usize) -> HWServer { let mut rooms = Slab::with_capacity(rooms_limit); - let token = rooms.insert(HWRoom::new()).ok().expect("Cannot create lobby"); + let token = rooms.insert(HWRoom::new()); HWServer { listener: listener, clients: Slab::with_capacity(clients_limit), @@ -38,17 +38,16 @@ info!("Connected: {}", addr); let client = HWClient::new(sock); - let token = self.clients.insert(client) - .ok().expect("could not add connection to slab"); + let token = self.clients.insert(client); self.clients[token].id = token; - self.clients[token].register(poll, token); + self.clients[token].register(poll, Token(token)); Ok(()) } pub fn client_readable(&mut self, poll: &Poll, - token: Token) -> io::Result<()> { + token: usize) -> io::Result<()> { let actions; { actions = self.clients[token].readable(poll); @@ -60,14 +59,14 @@ } pub fn client_writable(&mut self, poll: &Poll, - token: Token) -> io::Result<()> { + token: usize) -> io::Result<()> { self.clients[token].writable(poll)?; Ok(()) } pub fn client_error(&mut self, poll: &Poll, - token: Token) -> io::Result<()> { + token: usize) -> io::Result<()> { let actions; { actions = self.clients[token].error(poll); @@ -78,11 +77,11 @@ Ok(()) } - pub fn send(&mut self, token: Token, msg: &String) { + pub fn send(&mut self, token: usize, msg: &String) { self.clients[token].send_string(msg); } - pub fn react(&mut self, token: Token, poll: &Poll, actions: Vec) { + pub fn react(&mut self, token: usize, poll: &Poll, actions: Vec) { for action in actions { actions::run_action(self, token, poll, action); } @@ -91,7 +90,7 @@ pub struct HWRoom { - pub id: Token, + pub id: usize, pub name: String, pub password: Option, pub protocol_number: u32, @@ -101,7 +100,7 @@ impl HWRoom { pub fn new() -> HWRoom { HWRoom { - id: Token(0), + id: 0, name: String::new(), password: None, protocol_number: 0, diff -r 41d147eb26ea -r 8f99199b33ea hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Wed Jan 10 01:39:10 2018 +0100 +++ b/hedgewars/uCommandHandlers.pas Wed Jan 10 15:27:47 2018 +0100 @@ -533,7 +533,7 @@ cSeed:= s; InitStepsFlags:= InitStepsFlags or cifRandomize end - end; +end; procedure chAmmoMenu(var s: shortstring); begin diff -r 41d147eb26ea -r 8f99199b33ea hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Wed Jan 10 01:39:10 2018 +0100 +++ b/hedgewars/uGearsRender.pas Wed Jan 10 15:27:47 2018 +0100 @@ -1243,17 +1243,17 @@ gtShell: DrawSpriteRotated(sprBazookaShell, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtGrave: begin - DrawTextureF(Gear^.Hedgehog^.Team^.GraveTex, 1, x, y, (GameTicks shr 7+Gear^.uid) and 15, 1, 32, 32); + DrawTextureF(Gear^.Hedgehog^.Team^.GraveTex, 1, x, y, (RealTicks shr 7+Gear^.uid) and 15, 1, 32, 32); if Gear^.Health > 0 then begin //Tint($33, $33, $FF, max($40, round($FF * abs(1 - (GameTicks mod (6000 div Gear^.Health)) / 750)))); - Tint($f5, $db, $35, max($40, round($FF * abs(1 - (GameTicks mod 1500) / (750 + Gear^.Health))))); + Tint($f5, $db, $35, max($40, round($FF * abs(1 - (RealTicks mod 1500) / (750 + Gear^.Health))))); //Tint($FF, $FF, $FF, max($40, round($FF * abs(1 - (RealTicks mod 1500) / 750)))); DrawSprite(sprVampiric, x - 24, y - 24, 0); untint end end; - gtBee: DrawSpriteRotatedF(sprBee, x, y, (GameTicks shr 5) mod 2, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); + gtBee: DrawSpriteRotatedF(sprBee, x, y, (RealTicks shr 5) mod 2, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtPickHammer: DrawSprite(sprPHammer, x - 16, y - 50 + LongInt(((GameTicks shr 5) and 1) * 2), 0); gtRope: DrawRope(Gear); @@ -1293,7 +1293,7 @@ DrawSprite(sprCase, x - 24, y - 28, 0) else begin - i:= (GameTicks shr 6) mod 64; + i:= (RealTicks shr 6) mod 64; if i > 18 then i:= 0; DrawSprite(sprCase, x - 24, y - 24, i) end @@ -1304,7 +1304,7 @@ DrawSprite(sprFAid, x - 24, y - 28, 0) else begin - i:= ((GameTicks shr 6) + 38) mod 64; + i:= ((RealTicks shr 6) + 38) mod 64; if i > 13 then i:= 0; DrawSprite(sprFAid, x - 24, y - 24, i) end @@ -1315,7 +1315,7 @@ DrawSprite(sprUtility, x - 24, y - 28, 0) else begin - i:= (GameTicks shr 6) mod 70; + i:= (RealTicks shr 6) mod 70; if i > 23 then i:= 0; i:= i mod 12; DrawSprite(sprUtility, x - 24, y - 24, i) @@ -1333,7 +1333,7 @@ DrawSprite(sprExplosivesRoll, x - 24, y - 24, 0) else if Gear^.State and gstAnimation = 0 then begin - i:= (GameTicks shr 6 + Gear^.uid*3) mod 64; + i:= (RealTicks shr 6 + Gear^.uid*3) mod 64; if i > 18 then i:= 0; DrawSprite(sprExplosives, x - 24, y - 24, i) @@ -1369,8 +1369,8 @@ gtClusterBomb: DrawSpriteRotated(sprClusterBomb, x, y, 0, Gear^.DirAngle); gtCluster: DrawSprite(sprClusterParticle, x - 8, y - 8, 0); gtFlame: if Gear^.Tag and 1 = 0 then - DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (GameTicks shr 7 + LongWord(Gear^.Tag)) mod 8, 1, 16, 16) - else DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (GameTicks shr 7 + LongWord(Gear^.Tag)) mod 8, -1, 16, 16); + DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (RealTicks shr 7 + LongWord(Gear^.Tag)) mod 8, 1, 16, 16) + else DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (RealTicks shr 7 + LongWord(Gear^.Tag)) mod 8, -1, 16, 16); gtParachute: begin DrawSprite(sprParachute, x - 24, y - 48, 0); DrawAltWeapon(Gear, x + 1, y - 3) @@ -1391,7 +1391,7 @@ DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0) end end; - gtSwitcher: DrawSprite(sprSwitch, x - 16, y - 56, (GameTicks shr 6) mod 12); + gtSwitcher: DrawSprite(sprSwitch, x - 16, y - 56, (RealTicks shr 6) mod 12); gtTarget: begin Tint($FF, $FF, $FF, round($FF * Gear^.Timer / 1000)); DrawSprite(sprTarget, x - 16, y - 16, 0); @@ -1548,7 +1548,9 @@ end end end; - gtDuck: DrawSpriteRotatedF(sprDuck, x, y, 1, Gear^.Tag, Gear^.DirAngle); + gtDuck: DrawSpriteRotatedF(sprDuck, x, y, 1, Gear^.Tag, + // replace with something based on dx/dy? + Gear^.DirAngle + 10-round(20 * abs(1 - (RealTicks mod round(0.1/max(0.00005,cWindSpeedf))) / round(0.05/max(0.00005,cWindSpeedf))) )); gtGenericFaller: DrawCircle(x, y, 3, 3, $FF, $00, $00, $FF); // debug end; if Gear^.State and gstFrozen <> 0 then untint diff -r 41d147eb26ea -r 8f99199b33ea hedgewars/uRender.pas --- a/hedgewars/uRender.pas Wed Jan 10 01:39:10 2018 +0100 +++ b/hedgewars/uRender.pas Wed Jan 10 15:27:47 2018 +0100 @@ -68,7 +68,7 @@ procedure Tint (r, g, b, a: Byte); inline; procedure Tint (c: Longword); inline; procedure untint(); inline; -procedure setTintAdd (f: boolean); inline; +procedure setTintAdd (enable: boolean); inline; // call this to finish the rendering of current frame procedure FinishRender(); @@ -106,7 +106,7 @@ implementation uses {$IFNDEF PAS2C} StrUtils, {$ENDIF}uVariables, uUtils - {$IFDEF GL2}, uMatrix, uConsole{$ENDIF}, uConsts; + {$IFDEF GL2}, uMatrix, uConsole, uPhysFSLayer, uDebug{$ENDIF}, uConsts; {$IFDEF USE_TOUCH_INTERFACE} const @@ -123,9 +123,8 @@ var VertexBuffer : array [0 ..59] of TVertex2f; TextureBuffer: array [0 .. 7] of TVertex2f; LastTint: LongWord = 0; +{$IFNDEF GL2} LastColorPointer , LastTexCoordPointer , LastVertexPointer : Pointer; -{$IFDEF GL2} - LastColorPointerN, LastTexCoordPointerN, LastVertexPointerN: Integer; {$ENDIF} {$IFDEF USE_S3D_RENDERING} @@ -740,8 +739,8 @@ {$ELSE} glDisableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_COLOR_ARRAY); + LastTexCoordPointer:= nil; {$ENDIF} - LastTexCoordPointer:= nil; end else begin @@ -751,8 +750,8 @@ {$ELSE} glDisableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); + LastColorPointer:= nil; {$ENDIF} - LastColorPointer:= nil; end; EnableTexture(not b); end; @@ -775,58 +774,49 @@ procedure SetTexCoordPointer(p: Pointer; n: Integer); inline; begin {$IFDEF GL2} - if (p = LastTexCoordPointer) and (n = LastTexCoordPointerN) then - exit; glBindBuffer(GL_ARRAY_BUFFER, tBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * n * 2, p, GL_STATIC_DRAW); glEnableVertexAttribArray(aTexCoord); glVertexAttribPointer(aTexCoord, 2, GL_FLOAT, GL_FALSE, 0, pointer(0)); - LastTexCoordPointerN:= n; {$ELSE} if p = LastTexCoordPointer then exit; n:= n; glTexCoordPointer(2, GL_FLOAT, 0, p); + LastTexCoordPointer:= p; {$ENDIF} - LastTexCoordPointer:= p; end; procedure SetVertexPointer(p: Pointer; n: Integer); inline; begin {$IFDEF GL2} - if (p = LastVertexPointer) and (n = LastVertexPointerN) then - exit; glBindBuffer(GL_ARRAY_BUFFER, vBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * n * 2, p, GL_STATIC_DRAW); glEnableVertexAttribArray(aVertex); glVertexAttribPointer(aVertex, 2, GL_FLOAT, GL_FALSE, 0, pointer(0)); - LastVertexPointerN:= n; {$ELSE} if p = LastVertexPointer then exit; n:= n; glVertexPointer(2, GL_FLOAT, 0, p); + LastVertexPointer:= p; {$ENDIF} - LastVertexPointer:= p; end; procedure SetColorPointer(p: Pointer; n: Integer); inline; begin {$IFDEF GL2} - if (p = LastColorPointer) and (n = LastColorPointerN) then - exit; glBindBuffer(GL_ARRAY_BUFFER, cBuffer); glBufferData(GL_ARRAY_BUFFER, n * 4, p, GL_STATIC_DRAW); glEnableVertexAttribArray(aColor); glVertexAttribPointer(aColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, pointer(0)); - LastColorPointerN:= n; {$ELSE} if p = LastColorPointer then exit; n:= n; glColorPointer(4, GL_UNSIGNED_BYTE, 0, p); + LastColorPointer:= p; {$ENDIF} - LastColorPointer:= p; end; procedure EnableTexture(enable:Boolean); @@ -883,7 +873,10 @@ end else begin - openglPushMatrix; // save default scaling in matrix + if cScaleFactor = cDefaultZoomLevel then + begin + openglPushMatrix; // save default scaling in matrix; + end; openglLoadIdentity(); openglScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); openglTranslatef(0, -cScreenHeight div 2, 0); @@ -944,7 +937,6 @@ _t:= r^.y / SourceTexture^.h * SourceTexture^.ry; _b:= (r^.y + r^.h) / SourceTexture^.h * SourceTexture^.ry; -glBindTexture(GL_TEXTURE_2D, SourceTexture^.id); xw:= X + W; yh:= Y + H; @@ -967,9 +959,13 @@ TextureBuffer[3].X:= _l; TextureBuffer[3].Y:= _b; + +glBindTexture(GL_TEXTURE_2D, SourceTexture^.id); SetVertexPointer(@VertexBuffer[0], 4); SetTexCoordPointer(@TextureBuffer[0], 4); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + end; procedure DrawTexture(X, Y: LongInt; Texture: PTexture); inline; @@ -979,7 +975,6 @@ procedure DrawTexture(X, Y: LongInt; Texture: PTexture; Scale: GLfloat); begin - openglPushMatrix; openglTranslatef(X, Y, 0); @@ -996,6 +991,7 @@ glDrawArrays(GL_TRIANGLE_FAN, 0, Length(Texture^.vb)); openglPopMatrix; +UpdateModelviewProjection; end; { this contains tweaks in order to avoid land tile borders in blurry land mode } @@ -1025,6 +1021,8 @@ glDrawArrays(GL_TRIANGLE_FAN, 0, 4); openglPopMatrix; + +UpdateModelviewProjection; end; procedure DrawTextureF(Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, w, h: LongInt); @@ -1132,6 +1130,8 @@ openglPopMatrix; +UpdateModelviewProjection; + end; procedure DrawSpriteRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real); @@ -1171,10 +1171,14 @@ if Angle <> 0 then openglRotatef(Angle, 0, 0, 1); +UpdateModelviewProjection; + DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame); openglPopMatrix; +UpdateModelviewProjection; + end; procedure DrawSpritePivotedF(Sprite: TSprite; X, Y, Frame, Dir, PivotX, PivotY: LongInt; Angle: real); @@ -1212,6 +1216,8 @@ DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame); openglPopMatrix; + +UpdateModelviewProjection; end; procedure DrawTextureRotated(Texture: PTexture; hw, hh, X, Y, Dir: LongInt; Angle: real); @@ -1259,6 +1265,7 @@ openglPopMatrix; +UpdateModelviewProjection; end; procedure DrawSprite(Sprite: TSprite; X, Y, Frame: LongInt); @@ -1342,6 +1349,8 @@ DrawLineOnScreen(X0, Y0, X1, Y1, Width, r, g, b, a); openglPopMatrix(); + + UpdateModelviewProjection; end; procedure DrawLineOnScreen(X0, Y0, X1, Y1, Width: Single; r, g, b, a: Byte); @@ -1376,7 +1385,6 @@ exit; EnableTexture(False); - Tint(r, g, b, a); with rect do @@ -1510,6 +1518,8 @@ glDrawArrays(GL_TRIANGLE_FAN, 0, 4); openglPopMatrix; + + UpdateModelviewProjection; end; procedure DrawScreenWidget(widget: POnScreenWidget); @@ -1904,8 +1914,6 @@ SetVertexPointer(@VertexBuffer[0], 8); SetTexCoordPointer(@TextureBuffer[0], 8); -UpdateModelviewProjection; - glDrawArrays(GL_TRIANGLE_STRIP, first, count); untint; @@ -1961,12 +1969,19 @@ LastTint:= cWhiteColor; end; -procedure setTintAdd(f: boolean); inline; +procedure setTintAdd(enable: boolean); inline; begin - if f then + {$IFDEF GL2} + if enable then + glUniform1i(glGetUniformLocation(shaderMain, pchar('tintAdd')), 1) + else + glUniform1i(glGetUniformLocation(shaderMain, pchar('tintAdd')), 0); + {$ELSE} + if enable then glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD) else glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + {$ENDIF} end; procedure ChangeDepth(rm: TRenderMode; d: GLfloat); @@ -2008,13 +2023,10 @@ procedure initModule; begin LastTint:= cWhiteColor + 1; +{$IFNDEF GL2} LastColorPointer := nil; LastTexCoordPointer := nil; LastVertexPointer := nil; -{$IFDEF GL2} - LastColorPointerN := 0; - LastTexCoordPointerN:= 0; - LastVertexPointerN := 0; {$ENDIF} end; diff -r 41d147eb26ea -r 8f99199b33ea hedgewars/uScript.pas --- a/hedgewars/uScript.pas Wed Jan 10 01:39:10 2018 +0100 +++ b/hedgewars/uScript.pas Wed Jan 10 15:27:47 2018 +0100 @@ -3059,6 +3059,7 @@ var mybuf: PChar; i: LongInt; begin + SetRandomSeed(cSeed,true); mybuf := physfsReader(L, f, sz); if (mybuf <> nil) and ((sz^) > 0) then begin diff -r 41d147eb26ea -r 8f99199b33ea hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Wed Jan 10 01:39:10 2018 +0100 +++ b/hedgewars/uVariables.pas Wed Jan 10 15:27:47 2018 +0100 @@ -2731,7 +2731,12 @@ cMaxZoomLevel:= 1.0; cMinZoomLevel:= 3.0; cZoomDelta:= 0.25; -{$ENDIF} + {$ENDIF} + + aVertex:= 0; + aTexCoord:= 1; + aColor:= 2; + cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel; diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/CMakeLists.txt Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 2.8.12) + +project(qmlfrontend LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +find_package(Qt5 COMPONENTS Core Quick REQUIRED) + +add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc") + +target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick) diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/Page1.qml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/Page1.qml Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,7 @@ +import QtQuick 2.7 + +Page1Form { + button1.onClicked: { + console.log("Button Pressed. Entered text: " + textField1.text); + } +} diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/Page1Form.ui.qml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/Page1Form.ui.qml Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,24 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +Item { + property alias textField1: textField1 + property alias button1: button1 + + RowLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 20 + anchors.top: parent.top + + TextField { + id: textField1 + placeholderText: qsTr("Text Field") + } + + Button { + id: button1 + text: qsTr("Press Me") + } + } +} diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/main.cpp Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,15 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication app(argc, argv); + + QQmlApplicationEngine engine; + engine.load(QUrl(QLatin1String("qrc:/main.qml"))); + if (engine.rootObjects().isEmpty()) + return -1; + + return app.exec(); +} diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/main.qml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/main.qml Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,37 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +ApplicationWindow { + visible: true + width: 640 + height: 480 + title: qsTr("Hello World") + + SwipeView { + id: swipeView + anchors.fill: parent + currentIndex: tabBar.currentIndex + + Page1 { + } + + Page { + Label { + text: qsTr("Second page") + anchors.centerIn: parent + } + } + } + + footer: TabBar { + id: tabBar + currentIndex: swipeView.currentIndex + TabButton { + text: qsTr("First") + } + TabButton { + text: qsTr("Second") + } + } +} diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/qml.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/qml.qrc Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,9 @@ + + + + main.qml + Page1.qml + Page1Form.ui.qml + qtquickcontrols2.conf + + diff -r 41d147eb26ea -r 8f99199b33ea qmlfrontend/qtquickcontrols2.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/qtquickcontrols2.conf Wed Jan 10 15:27:47 2018 +0100 @@ -0,0 +1,15 @@ +; This file can be edited to change the style of the application +; See Styling Qt Quick Controls 2 in the documentation for details: +; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html + +[Controls] +Style=Default + +[Universal] +Theme=Light +;Accent=Steel + +[Material] +Theme=Light +;Accent=BlueGrey +;Primary=BlueGray diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw_base.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw_base.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/BigDigitsGray.png Binary file share/hedgewars/Data/Graphics/BigDigitsGray.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/armenia.png Binary file share/hedgewars/Data/Graphics/Flags/armenia.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/cm_soviet.png Binary file share/hedgewars/Data/Graphics/Flags/cm_soviet.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/ireland.png Binary file share/hedgewars/Data/Graphics/Flags/ireland.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/nepal.png Binary file share/hedgewars/Data/Graphics/Flags/nepal.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/suisse.png Binary file share/hedgewars/Data/Graphics/Flags/suisse.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/sweden.png Binary file share/hedgewars/Data/Graphics/Flags/sweden.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Flags/turkey.png Binary file share/hedgewars/Data/Graphics/Flags/turkey.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Graves/Simple_reversed.png Binary file share/hedgewars/Data/Graphics/Graves/Simple_reversed.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/Progress.png Binary file share/hedgewars/Data/Graphics/Progress.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Graphics/missions.png Binary file share/hedgewars/Data/Graphics/missions.png has changed diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Shaders/default.fs --- a/share/hedgewars/Data/Shaders/default.fs Wed Jan 10 01:39:10 2018 +0100 +++ b/share/hedgewars/Data/Shaders/default.fs Wed Jan 10 15:27:47 2018 +0100 @@ -1,7 +1,10 @@ +#ifdef GL_ES precision mediump float; +#endif uniform sampler2D tex0; uniform vec4 tint; +uniform bool tintAdd; uniform bool enableTexture; varying vec2 tex; @@ -10,7 +13,12 @@ void main() { if(enableTexture){ - gl_FragColor = texture2D(tex0, tex) * tint; + if (tintAdd){ + tint.a = 0.0; + gl_FragColor = clamp(texture2D(tex0, tex) + tint, 0.0, 1.1); + }else{ + gl_FragColor = texture2D(tex0, tex) * tint; + } }else{ gl_FragColor = tint; } diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Shaders/default.vs --- a/share/hedgewars/Data/Shaders/default.vs Wed Jan 10 01:39:10 2018 +0100 +++ b/share/hedgewars/Data/Shaders/default.vs Wed Jan 10 15:27:47 2018 +0100 @@ -1,4 +1,6 @@ +#ifdef GL_ES precision mediump float; +#endif attribute vec2 vertex; attribute vec2 texcoord; diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Shaders/water.fs --- a/share/hedgewars/Data/Shaders/water.fs Wed Jan 10 01:39:10 2018 +0100 +++ b/share/hedgewars/Data/Shaders/water.fs Wed Jan 10 15:27:47 2018 +0100 @@ -1,4 +1,6 @@ +#ifdef GL_ES precision mediump float; +#endif varying vec4 vcolor; diff -r 41d147eb26ea -r 8f99199b33ea share/hedgewars/Data/Shaders/water.vs --- a/share/hedgewars/Data/Shaders/water.vs Wed Jan 10 01:39:10 2018 +0100 +++ b/share/hedgewars/Data/Shaders/water.vs Wed Jan 10 15:27:47 2018 +0100 @@ -1,4 +1,6 @@ +#ifdef GL_ES precision mediump float; +#endif attribute vec2 vertex; attribute vec4 color;