You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(26) |
Sep
(41) |
Oct
(6) |
Nov
(33) |
Dec
(59) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(60) |
Feb
(181) |
Mar
(71) |
Apr
(108) |
May
(332) |
Jun
(25) |
Jul
(51) |
Aug
(10) |
Sep
(101) |
Oct
(91) |
Nov
(125) |
Dec
(293) |
2009 |
Jan
(262) |
Feb
(119) |
Mar
(130) |
Apr
(107) |
May
(125) |
Jun
(113) |
Jul
(109) |
Aug
(182) |
Sep
(93) |
Oct
(123) |
Nov
(45) |
Dec
(147) |
2010 |
Jan
(215) |
Feb
(292) |
Mar
(223) |
Apr
(222) |
May
(114) |
Jun
(137) |
Jul
(116) |
Aug
(125) |
Sep
(338) |
Oct
(203) |
Nov
(449) |
Dec
(383) |
2011 |
Jan
(364) |
Feb
(202) |
Mar
(384) |
Apr
(327) |
May
(306) |
Jun
(323) |
Jul
(282) |
Aug
(294) |
Sep
(234) |
Oct
(143) |
Nov
(223) |
Dec
(241) |
2012 |
Jan
(243) |
Feb
(135) |
Mar
(145) |
Apr
(124) |
May
(91) |
Jun
(88) |
Jul
(95) |
Aug
(78) |
Sep
(120) |
Oct
(194) |
Nov
(260) |
Dec
(211) |
2013 |
Jan
(124) |
Feb
(93) |
Mar
(55) |
Apr
(127) |
May
(114) |
Jun
(220) |
Jul
(345) |
Aug
(218) |
Sep
(561) |
Oct
(200) |
Nov
(232) |
Dec
(271) |
2014 |
Jan
(441) |
Feb
(153) |
Mar
(265) |
Apr
(315) |
May
(333) |
Jun
(277) |
Jul
(285) |
Aug
(533) |
Sep
(605) |
Oct
(319) |
Nov
(356) |
Dec
(389) |
2015 |
Jan
(325) |
Feb
(384) |
Mar
(331) |
Apr
(64) |
May
(94) |
Jun
(126) |
Jul
(60) |
Aug
(127) |
Sep
(189) |
Oct
(142) |
Nov
(57) |
Dec
(89) |
2016 |
Jan
(89) |
Feb
(62) |
Mar
(102) |
Apr
(91) |
May
(172) |
Jun
(112) |
Jul
(142) |
Aug
(49) |
Sep
(98) |
Oct
(132) |
Nov
(72) |
Dec
(225) |
2017 |
Jan
(246) |
Feb
(107) |
Mar
(155) |
Apr
(96) |
May
(45) |
Jun
(42) |
Jul
(62) |
Aug
(191) |
Sep
(150) |
Oct
(101) |
Nov
(50) |
Dec
(35) |
2018 |
Jan
(100) |
Feb
(4) |
Mar
(19) |
Apr
(25) |
May
(18) |
Jun
(8) |
Jul
(13) |
Aug
(28) |
Sep
(38) |
Oct
(90) |
Nov
(71) |
Dec
(36) |
2019 |
Jan
(24) |
Feb
(157) |
Mar
(150) |
Apr
(159) |
May
(82) |
Jun
(69) |
Jul
(43) |
Aug
(23) |
Sep
(18) |
Oct
(111) |
Nov
(68) |
Dec
(87) |
2020 |
Jan
(65) |
Feb
(64) |
Mar
(30) |
Apr
(43) |
May
(30) |
Jun
(15) |
Jul
(8) |
Aug
(41) |
Sep
(45) |
Oct
(15) |
Nov
(23) |
Dec
(36) |
2021 |
Jan
(23) |
Feb
(63) |
Mar
(43) |
Apr
(63) |
May
(39) |
Jun
(30) |
Jul
(34) |
Aug
(38) |
Sep
(81) |
Oct
(33) |
Nov
(10) |
Dec
(15) |
2022 |
Jan
(27) |
Feb
(13) |
Mar
(38) |
Apr
(56) |
May
(21) |
Jun
(16) |
Jul
(54) |
Aug
(48) |
Sep
(83) |
Oct
(31) |
Nov
(22) |
Dec
(18) |
2023 |
Jan
(16) |
Feb
(5) |
Mar
(6) |
Apr
(4) |
May
(5) |
Jun
(8) |
Jul
(5) |
Aug
(7) |
Sep
(2) |
Oct
|
Nov
(13) |
Dec
(7) |
2024 |
Jan
(7) |
Feb
(2) |
Mar
(1) |
Apr
(22) |
May
(43) |
Jun
(4) |
Jul
(14) |
Aug
(12) |
Sep
(4) |
Oct
|
Nov
|
Dec
|
From: <ste...@us...> - 2012-06-30 01:39:00
|
Revision: 11352 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11352&view=rev Author: stephenjust Date: 2012-06-30 01:38:53 +0000 (Sat, 30 Jun 2012) Log Message: ----------- [stkaddons] More tweaks to cache use, don't clear whole cache on new image uploads Modified Paths: -------------- stkaddons/trunk/image.php stkaddons/trunk/include/Addon.class.php stkaddons/trunk/include/Cache.class.php stkaddons/trunk/include/File.class.php stkaddons/trunk/include/image.php stkaddons/trunk/include/mail.php stkaddons/trunk/include.php Added Paths: ----------- stkaddons/trunk/image/kart-icon.png Added: stkaddons/trunk/image/kart-icon.png =================================================================== (Binary files differ) Property changes on: stkaddons/trunk/image/kart-icon.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: stkaddons/trunk/image.php =================================================================== --- stkaddons/trunk/image.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/image.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -15,12 +15,10 @@ You should have received a copy of the GNU General Public License along with stkaddons. If not, see <http://www.gnu.org/licenses/>. */ -?> -<?php + define('ROOT','./'); $security=''; include('include.php'); - resizeImage($_GET['pic']); -?> +?> \ No newline at end of file Modified: stkaddons/trunk/include/Addon.class.php =================================================================== --- stkaddons/trunk/include/Addon.class.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include/Addon.class.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -275,6 +275,9 @@ if($_SESSION['role']['manageaddons'] != true && User::$user_id != $this->uploaderId) throw new AddonException(htmlentities(_('You do not have the necessary permissions to perform this action.'))); + // Remove cache files for this add-on + Cache::clearAddon($this->id); + // Remove files associated with this addon $get_files_query = 'SELECT * FROM `'.DB_PREFIX."files` Modified: stkaddons/trunk/include/Cache.class.php =================================================================== --- stkaddons/trunk/include/Cache.class.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include/Cache.class.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -51,6 +51,28 @@ return true; } + public static function clearAddon($addon) { + $addon = Addon::cleanId($addon); + if (!Addon::exists($addon)) return false; + + // Get list of cache files + $select_query = 'SELECT `file` + FROM `'.DB_PREFIX.'cache` + WHERE `addon` = \''.$addon.'\''; + $select_handle = sql_query($select_query); + if (!$select_handle) return false; + $num_files = mysql_num_rows($select_handle); + for ($i = 1; $i <= $num_files; $i++) { + $result = mysql_fetch_assoc($select_handle); + unlink(CACHE_DIR.$result['file']); + + $del_query = 'DELETE FROM `'.DB_PREFIX.'cache` + WHERE `file` = \''.$result['file'].'\''; + $del_handle = sql_query($del_query); + if (!$del_handle) return false; + } + } + /** * Add a database record for a cache file * @param string $path Relative to cache root Modified: stkaddons/trunk/include/File.class.php =================================================================== --- stkaddons/trunk/include/File.class.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include/File.class.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -330,7 +330,7 @@ WHERE `file_path` = \'images/'.$file_name.'\''; $handle = sql_query($query); // Clean image cache - Cache::clear(); + Cache::clearAddon($addon_id); } } Modified: stkaddons/trunk/include/image.php =================================================================== --- stkaddons/trunk/include/image.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include/image.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -37,13 +37,17 @@ break; } $cache_name = $size.'--'.basename($file); + $local_path = UP_LOCATION.$file; // Check if image exists, and if it does, check its format $orig_file = File::exists($file); if ($orig_file === -1) { - header('HTTP/1.1 404 Not Found'); - return; + if (!file_exists(ROOT.$file)) { + header('HTTP/1.1 404 Not Found'); + return; + } else + $local_path = ROOT.$file; } // Check if a cached version is available @@ -54,7 +58,7 @@ } // Start processing the original file - $imageinfo = getimagesize(UP_LOCATION.$file); + $imageinfo = @getimagesize($local_path); switch ($imageinfo[2]) { default: @@ -62,11 +66,11 @@ $format = 'png'; break; case IMAGETYPE_PNG: - $source = imagecreatefrompng(UP_LOCATION.$file); + $source = imagecreatefrompng($local_path); $format = 'png'; break; case IMAGETYPE_JPEG: - $source = imagecreatefromjpeg(UP_LOCATION.$file); + $source = imagecreatefromjpeg($local_path); $format = 'jpg'; break; } Modified: stkaddons/trunk/include/mail.php =================================================================== --- stkaddons/trunk/include/mail.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include/mail.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -15,8 +15,6 @@ You should have received a copy of the GNU General Public License along with stkaddons. If not, see <http://www.gnu.org/licenses/>. */ -?> -<?php class Mail { public static function newAccountNotification($email, $username, $ver_code, $ver_page) { @@ -92,5 +90,4 @@ ."\n--".$boundary."--\n"; mail($mail_address,$subject,$message,$header); } -?> - +?> \ No newline at end of file Modified: stkaddons/trunk/include.php =================================================================== --- stkaddons/trunk/include.php 2012-06-30 01:04:46 UTC (rev 11351) +++ stkaddons/trunk/include.php 2012-06-30 01:38:53 UTC (rev 11352) @@ -42,5 +42,4 @@ require(ROOT.'include/mail.php'); require(ROOT.'include/statistics.php'); require(ROOT.'include/xmlWrite.php'); - -?> +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2012-06-30 01:04:53
|
Revision: 11351 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11351&view=rev Author: stephenjust Date: 2012-06-30 01:04:46 +0000 (Sat, 30 Jun 2012) Log Message: ----------- [stkaddons] Keep record of cached image files in database to reduce reads to data-server (which TuxFamily discourages doing) Modified Paths: -------------- stkaddons/trunk/image.php stkaddons/trunk/include/Cache.class.php stkaddons/trunk/include/File.class.php stkaddons/trunk/include/image.php stkaddons/trunk/table.sql Modified: stkaddons/trunk/image.php =================================================================== --- stkaddons/trunk/image.php 2012-06-30 00:38:30 UTC (rev 11350) +++ stkaddons/trunk/image.php 2012-06-30 01:04:46 UTC (rev 11351) @@ -18,8 +18,8 @@ ?> <?php define('ROOT','./'); -include('config.php'); -include('include/image.php'); +$security=''; +include('include.php'); resizeImage($_GET['pic']); Modified: stkaddons/trunk/include/Cache.class.php =================================================================== --- stkaddons/trunk/include/Cache.class.php 2012-06-30 00:38:30 UTC (rev 11350) +++ stkaddons/trunk/include/Cache.class.php 2012-06-30 01:04:46 UTC (rev 11351) @@ -31,7 +31,67 @@ $exclude_regex = '/^(cache_graph_.*\.png)$/i'; File::deleteRecursive(CACHE_DIR,$exclude_regex); @mkdir(CACHE_DIR); + + // Clear cache file DB record + // Get list of cache files + $select_query = 'SELECT `file` + FROM `'.DB_PREFIX.'cache`'; + $select_handle = sql_query($select_query); + if (!$select_handle) return false; + $num_files = mysql_num_rows($select_handle); + for ($i = 1; $i <= $num_files; $i++) { + $result = mysql_fetch_assoc($select_handle); + if (preg_match($exclude_regex,$result['file'])) continue; + + $del_query = 'DELETE FROM `'.DB_PREFIX.'cache` + WHERE `file` = \''.$result['file'].'\''; + $del_handle = sql_query($del_query); + if (!$del_handle) return false; + } + return true; } + + /** + * Add a database record for a cache file + * @param string $path Relative to cache root + * @param string $addon Associated add-on's id or NULL + * @param string $props File properties (e.g. w=1,h=3) + * @return boolean + */ + public static function createFile($path, $addon = NULL, $props = NULL) { + $path = mysql_real_escape_string($path); + $addon = Addon::cleanId($addon); + $addon = (Addon::exists($addon)) ? $addon : NULL; + $props = mysql_real_escape_string($props); + + // Create record + $query = 'INSERT INTO `'.DB_PREFIX.'cache` + (`file`,`addon`,`props`) + VALUES + (\''.$path.'\',\''.$addon.'\',\''.$props.'\')'; + $handle = sql_query($query); + if (!$handle) return false; + return true; + } + + /** + * Check if a cache file exist (based on database record of its existence) + * @param string $path Relative to upload root + * @return array Empty array on failure, array with 'path', 'addon' otherwise + */ + public static function fileExists($path) { + $path = mysql_real_escape_string($path); + $query = 'SELECT `addon`,`props` + FROM `'.DB_PREFIX.'cache` + WHERE `file` = \''.$path.'\''; + $handle = sql_query($query); + if (!$handle) + return array(); + if (mysql_num_rows($handle) === 0) + return array(); + $result = mysql_fetch_assoc($handle); + return $result; + } } ?> Modified: stkaddons/trunk/include/File.class.php =================================================================== --- stkaddons/trunk/include/File.class.php 2012-06-30 00:38:30 UTC (rev 11350) +++ stkaddons/trunk/include/File.class.php 2012-06-30 01:04:46 UTC (rev 11351) @@ -43,6 +43,25 @@ } /** + * Check if a file exists (based on record in database file table) + * @param string $path Relative to upload directory + * @return integer File id, or -1 if file record does not exist + */ + public static function exists($path) { + $path = mysql_real_escape_string($path); + $query = 'SELECT `id` + FROM `'.DB_PREFIX.'files` + WHERE `file_path` = \''.$path.'\''; + $handle = sql_query($query); + if (!$handle) + return -1; + if (mysql_num_rows($handle) == 0) + return -1; + $result = mysql_fetch_array($handle); + return $result[0]; + } + + /** * Extract an archive file * @param string $file * @param string $destination @@ -211,6 +230,24 @@ return false; } + public static function getAddon($file_id) { + // Validate input + if (!is_numeric($file_id)) + return false; + if ($file_id == 0) + return false; + + // Look up file path from database + $query = 'SELECT `addon_id` FROM `'.DB_PREFIX.'files` + WHERE `id` = '.(int)$file_id.' + LIMIT 1'; + $handle = sql_query($query); + if (mysql_num_rows($handle) == 0) + return false; + $file = mysql_fetch_assoc($handle); + return $file['addon_id']; + } + public static function getPath($file_id) { // Validate input if (!is_numeric($file_id)) Modified: stkaddons/trunk/include/image.php =================================================================== --- stkaddons/trunk/include/image.php 2012-06-30 00:38:30 UTC (rev 11350) +++ stkaddons/trunk/include/image.php 2012-06-30 01:04:46 UTC (rev 11351) @@ -39,37 +39,37 @@ $cache_name = $size.'--'.basename($file); // Check if image exists, and if it does, check its format - if (!file_exists(UP_LOCATION.$file)) + $orig_file = File::exists($file); + if ($orig_file === -1) { - $source = imagecreatefrompng(ROOT.'image/notfound.png'); - $format = 'png'; + header('HTTP/1.1 404 Not Found'); + return; } - else - { - $imageinfo = getimagesize(UP_LOCATION.$file); - switch ($imageinfo[2]) - { - default: - $source = imagecreatefrompng(ROOT.'image/notfound.png'); - $format = 'png'; - break; - case IMAGETYPE_PNG: - $source = imagecreatefrompng(UP_LOCATION.$file); - $format = 'png'; - break; - case IMAGETYPE_JPEG: - $source = imagecreatefromjpeg(UP_LOCATION.$file); - $format = 'jpg'; - break; - } - } - // Use cached file if possible - if (file_exists(CACHE_DIR.'/'.$cache_name)) { + // Check if a cached version is available + if (Cache::fileExists($cache_name) !== array()) { header('Cached-Image: true'); header('Location: '.CACHE_DL.'/'.$cache_name); return; } + + // Start processing the original file + $imageinfo = getimagesize(UP_LOCATION.$file); + switch ($imageinfo[2]) + { + default: + $source = imagecreatefrompng(ROOT.'image/notfound.png'); + $format = 'png'; + break; + case IMAGETYPE_PNG: + $source = imagecreatefrompng(UP_LOCATION.$file); + $format = 'png'; + break; + case IMAGETYPE_JPEG: + $source = imagecreatefromjpeg(UP_LOCATION.$file); + $format = 'jpg'; + break; + } // Get length and width of original image $width_source = imagesx($source); @@ -96,7 +96,7 @@ // Resize image imagecopyresampled($destination, $source, 0, 0, 0, 0, $width_destination, $height_destination, $width_source, $height_source); // Display image and cache the result - header('Cached-Image: false'); + header('Cached-Image: false'); if ($format === 'png') { header('Content-Type: image/png'); imagepng($destination,CACHE_DIR.'/'.$cache_name,9); @@ -106,6 +106,10 @@ imagejpeg($destination,CACHE_DIR.'/'.$cache_name,90); imagejpeg($destination,NULL,90); } + + // Create a record of the cached file + $orig_file_addon = File::getAddon($orig_file); + Cache::createFile($cache_name, $orig_file_addon, sprintf('w=%d,h=%d',$width_destination,$height_destination)); } function img_label($text) Modified: stkaddons/trunk/table.sql =================================================================== --- stkaddons/trunk/table.sql 2012-06-30 00:38:30 UTC (rev 11350) +++ stkaddons/trunk/table.sql 2012-06-30 01:04:46 UTC (rev 11351) @@ -30,6 +30,13 @@ KEY `revision` (`revision`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `cache` ( + `file` varchar(30) NOT NULL, + `addon` varchar(30) DEFAULT NULL, + `props` text DEFAULT NULL, + UNIQUE `file` (`file`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + CREATE TABLE `client_sessions` ( `uid` int(10) unsigned NOT NULL DEFAULT '0', `name` varchar(64) NOT NULL DEFAULT '', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-30 00:38:36
|
Revision: 11350 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11350&view=rev Author: auria Date: 2012-06-30 00:38:30 +0000 (Sat, 30 Jun 2012) Log Message: ----------- Update intro blendfile in media repo Modified Paths: -------------- media/trunk/cutscenes/intro1/introcutscene.blend Added Paths: ----------- media/trunk/cutscenes/intro1/light.png media/trunk/cutscenes/intro1/nolokship.png Removed Paths: ------------- media/trunk/cutscenes/intro1/introcutscene.blend1 Modified: media/trunk/cutscenes/intro1/introcutscene.blend =================================================================== (Binary files differ) Deleted: media/trunk/cutscenes/intro1/introcutscene.blend1 =================================================================== (Binary files differ) Added: media/trunk/cutscenes/intro1/light.png =================================================================== (Binary files differ) Property changes on: media/trunk/cutscenes/intro1/light.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: media/trunk/cutscenes/intro1/nolokship.png =================================================================== (Binary files differ) Property changes on: media/trunk/cutscenes/intro1/nolokship.png ___________________________________________________________________ Added: svn:mime-type + image/png This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-30 00:38:16
|
Revision: 11349 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11349&view=rev Author: auria Date: 2012-06-30 00:38:10 +0000 (Sat, 30 Jun 2012) Log Message: ----------- Updated version of the intro cutscene. Say hello to Noloks's ship\! Needless to say there are still quite a few known glitches Modified Paths: -------------- main/trunk/data/tracks/introcutscene/Gnu.b3d main/trunk/data/tracks/introcutscene/introcutscene_track.b3d main/trunk/data/tracks/introcutscene/materials.xml main/trunk/data/tracks/introcutscene/scene.xml main/trunk/data/tracks/introcutscene/terrain.b3d main/trunk/data/tracks/introcutscene/track.xml Added Paths: ----------- main/trunk/data/tracks/introcutscene/Ship.b3d main/trunk/data/tracks/introcutscene/ShipMouth.b3d main/trunk/data/tracks/introcutscene/light.b3d main/trunk/data/tracks/introcutscene/light.png main/trunk/data/tracks/introcutscene/nolokship.png Modified: main/trunk/data/tracks/introcutscene/Gnu.b3d =================================================================== (Binary files differ) Added: main/trunk/data/tracks/introcutscene/Ship.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/introcutscene/Ship.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/introcutscene/ShipMouth.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/introcutscene/ShipMouth.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: main/trunk/data/tracks/introcutscene/introcutscene_track.b3d =================================================================== (Binary files differ) Added: main/trunk/data/tracks/introcutscene/light.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/introcutscene/light.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/introcutscene/light.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/introcutscene/light.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: main/trunk/data/tracks/introcutscene/materials.xml =================================================================== (Binary files differ) Added: main/trunk/data/tracks/introcutscene/nolokship.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/introcutscene/nolokship.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: main/trunk/data/tracks/introcutscene/scene.xml =================================================================== (Binary files differ) Modified: main/trunk/data/tracks/introcutscene/terrain.b3d =================================================================== (Binary files differ) Modified: main/trunk/data/tracks/introcutscene/track.xml =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2012-06-29 22:28:24
|
Revision: 11348 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11348&view=rev Author: stephenjust Date: 2012-06-29 22:28:17 +0000 (Fri, 29 Jun 2012) Log Message: ----------- [stkaddons] Tweaks to make url rewriting play nice with language switching Modified Paths: -------------- stkaddons/trunk/include/locale.php stkaddons/trunk/include/menu.php stkaddons/trunk/include/top.php Property Changed: ---------------- stkaddons/trunk/ Property changes on: stkaddons/trunk ___________________________________________________________________ Modified: svn:ignore - config.php jpgraph nbproject pot + config.php jpgraph nbproject pot .htaccess Modified: stkaddons/trunk/include/locale.php =================================================================== --- stkaddons/trunk/include/locale.php 2012-06-29 14:53:28 UTC (rev 11347) +++ stkaddons/trunk/include/locale.php 2012-06-29 22:28:17 UTC (rev 11348) @@ -19,15 +19,17 @@ */ // Get the current page address (without "lang" parameter) -$page_url = $_SERVER['PHP_SELF']."?"; -foreach($_GET as $key => $value) -{ - if($key != "lang") $page_url .= $key."=".$value."&"; -} +$page_url = $_SERVER['REQUEST_URI']; +if (strstr($page_url,'?') === false) + $page_url .= '?'; +// Clean up the new url +$page_url = preg_replace('/lang=[a-z_]+/i',NULL,$page_url); +$page_url = preg_replace('/[&]+/i','&',$page_url); +$page_url = preg_replace('/\?&/i','?',$page_url); // Time for the language cookie to expire is 1 year in the future $timestamp_expire = time() + 365*24*3600; // Set language cookie if it is not set -if(!isset($_COOKIE['lang'])) +if(!isset($_COOKIE['lang']) && !isset($_GET['lang'])) { setcookie('lang', 'en_EN', $timestamp_expire); } @@ -48,4 +50,9 @@ bindtextdomain('translations', ROOT.'locale'); textdomain('translations'); bind_textdomain_codeset('translations', 'UTF-8'); + +/** + * Language string for the currently configured language + */ +define('LANG', $_COOKIE['lang']); ?> Modified: stkaddons/trunk/include/menu.php =================================================================== --- stkaddons/trunk/include/menu.php 2012-06-29 14:53:28 UTC (rev 11347) +++ stkaddons/trunk/include/menu.php 2012-06-29 22:28:17 UTC (rev 11348) @@ -89,18 +89,32 @@ <div id="lang-menu"> <a class="menu_head" href="#"><?php echo htmlspecialchars(_("Languages"));?></a> <ul class="menu_body"> - <li class="flag"><a href="<?php echo $page_url.'&lang=en_US'; ?>" style="background-position: 0px 0px;">EN</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=ca_ES'; ?>" style="background-position: -96px -99px;">CA</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=de_DE'; ?>" style="background-position: 0px -33px;">DE</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=es_ES'; ?>" style="background-position: -96px -66px;">ES</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=fr_FR'; ?>" style="background-position: 0px -66px;">FR</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=ga_IE'; ?>" style="background-position: 0px -99px;">GA</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=gl_ES'; ?>" style="background-position: -48px 0px;">GL</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=id_ID'; ?>" style="background-position: -48px -33px;">ID</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=it_IT'; ?>" style="background-position: -96px -33px;">IT</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=nl_NL'; ?>" style="background-position: -48px -66px;">NL</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=ru_RU'; ?>" style="background-position: -48px -99px;">RU</a></li> - <li class="flag"><a href="<?php echo $page_url.'&lang=zh_TW'; ?>" style="background-position: -96px 0px;">ZH (T)</a></li> + <?php + // Generate language menu entries + // Format is: language code, image x-offset, y-offset, label + $langs = array( + array('en_US',0,0,'EN'), + array('ca_ES',-96,-99,'CA'), + array('de_DE',0,-33,'DE'), + array('es_ES',-96,-66,'ES'), + array('fr_FR',0,-66,'FR'), + array('ga_IE',0,-99,'GA'), + array('gl_ES',-48,0,'GL'), + array('id_ID',-48,-33,'ID'), + array('it_IT',-96,-33,'IT'), + array('nl_NL',-48,-66,'NL'), + array('ru_RU',-48,-99,'RU'), + array('zh_TW',-96,0,'ZH (T)') + ); + for ($i = 0; $i < count($langs); $i++) { + $url = $_SERVER['REQUEST_URI']; + if (strstr($url,'?') === false) + $url .= '?lang='.$langs[$i][0]; + else + $url .= '&lang='.$langs[$i][0]; + printf("\t\t\t<li class=\"flag\"><a href=\"%s\" style=\"background-position: %dpx %dpx;\">%s</a></li>\n",$url,$langs[$i][1],$langs[$i][2],$langs[$i][3]); + } + ?> <li class="label"><a href="https://translations.launchpad.net/stk/stkaddons">Translate<br />STK-Addons</a></li> </ul> </div> Modified: stkaddons/trunk/include/top.php =================================================================== --- stkaddons/trunk/include/top.php 2012-06-29 14:53:28 UTC (rev 11347) +++ stkaddons/trunk/include/top.php 2012-06-29 22:28:17 UTC (rev 11348) @@ -35,6 +35,10 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> + <?php + if (defined('LANG')) + echo "<meta http-equiv=\"content-language\" content=\"".LANG."\" />\n"; + ?> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <title><?php echo $title;?></title> <link href="<?php echo SITE_ROOT; ?>css/skin_<?php echo $style;?>.css" rel="stylesheet" media="all" type="text/css" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-06-29 14:53:37
|
Revision: 11347 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11347&view=rev Author: wardje Date: 2012-06-29 14:53:28 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Minor styleguide updates * Fix indentation * Correct comment Modified Paths: -------------- main/trunk/src/karts/controller/ai_base_controller.hpp main/trunk/src/karts/controller/default_ai_controller.cpp Modified: main/trunk/src/karts/controller/ai_base_controller.hpp =================================================================== --- main/trunk/src/karts/controller/ai_base_controller.hpp 2012-06-29 14:17:47 UTC (rev 11346) +++ main/trunk/src/karts/controller/ai_base_controller.hpp 2012-06-29 14:53:28 UTC (rev 11347) @@ -39,15 +39,15 @@ */ float m_skidding_threshold; - /** Stores the last N times when a collision happened. This is used - * to detect when the AI is stuck, i.e. N collisions happened in - * a certain period of time. */ - std::vector<float> m_collision_times; - - /** A flag that is set during the physics processing to indicate that - * this kart is stuck and needs to be rescued. */ - bool m_stuck_trigger_rescue; + /** Stores the last N times when a collision happened. This is used + * to detect when the AI is stuck, i.e. N collisions happened in + * a certain period of time. */ + std::vector<float> m_collision_times; + /** A flag that is set during the physics processing to indicate that + * this kart is stuck and needs to be rescued. */ + bool m_stuck_trigger_rescue; + protected: /** Length of the kart, storing it here saves many function calls. */ float m_kart_length; @@ -88,27 +88,27 @@ void setSteering (float angle, float dt); void setSkiddingFraction(float f); void computePath(); - // ------------------------------------------------------------------------ - /** This can be called to detect if the kart is stuck (i.e. repeatedly - * hitting part of the track). */ - bool isStuck() const { return m_stuck_trigger_rescue; } + // ------------------------------------------------------------------------ + /** This can be called to detect if the kart is stuck (i.e. repeatedly + * hitting part of the track). */ + bool isStuck() const { return m_stuck_trigger_rescue; } public: AIBaseController(AbstractKart *kart, StateManager::ActivePlayer *player=NULL); virtual ~AIBaseController() {}; - virtual void reset(); + virtual void reset(); virtual void crashed(const AbstractKart *k) {}; virtual void crashed(const Material *m); - virtual void handleZipper(bool play_sound) {}; - virtual void finishedRace(float time) {}; + virtual void handleZipper(bool play_sound) {}; + virtual void finishedRace(float time) {}; virtual void collectedItem(const Item &item, int add_info=-1, float previous_energy=0) {}; - virtual void setPosition(int p) {}; - virtual bool isNetworkController() const { return false; } - virtual bool isPlayerController() const { return false; } - virtual void action(PlayerAction action, int value) {}; - virtual void skidBonusTriggered() {}; + virtual void setPosition(int p) {}; + virtual bool isNetworkController() const { return false; } + virtual bool isPlayerController() const { return false; } + virtual void action(PlayerAction action, int value) {}; + virtual void skidBonusTriggered() {}; }; // AIBaseController Modified: main/trunk/src/karts/controller/default_ai_controller.cpp =================================================================== --- main/trunk/src/karts/controller/default_ai_controller.cpp 2012-06-29 14:17:47 UTC (rev 11346) +++ main/trunk/src/karts/controller/default_ai_controller.cpp 2012-06-29 14:53:28 UTC (rev 11347) @@ -189,13 +189,13 @@ return; } - // If the kart needs to be rescued, do it now (and nothing else) - if(isStuck() && !m_kart->getKartAnimation()) - { - new RescueAnimation(m_kart); - AIBaseController::update(dt); - return; - } + // If the kart needs to be rescued, do it now (and nothing else) + if(isStuck() && !m_kart->getKartAnimation()) + { + new RescueAnimation(m_kart); + AIBaseController::update(dt); + return; + } if( m_world->isStartPhase() ) { @@ -994,7 +994,7 @@ } // findNonCrashingPoint //----------------------------------------------------------------------------- -/** calc_steps() divides the velocity vector by the lenght of the kart, +/** calcSteps() divides the velocity vector by the length of the kart, * and gets the number of steps to use for the sight line of the kart. * The calling sequence guarantees that m_future_sector is not UNKNOWN. */ @@ -1025,7 +1025,7 @@ } // calcSteps //----------------------------------------------------------------------------- -/**FindCurve() gathers info about the closest sectors ahead: the curve +/**findCurve() gathers info about the closest sectors ahead: the curve * angle, the direction of the next turn, and the optimal speed at which the * curve can be travelled at it's widest angle. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sam...@us...> - 2012-06-29 14:17:54
|
Revision: 11346 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11346&view=rev Author: samuncle Date: 2012-06-29 14:17:47 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Remove old file Removed Paths: ------------- main/trunk/data/tracks/xr691-new/Capture du 2012-04-11 02:26:45.png Deleted: main/trunk/data/tracks/xr691-new/Capture du 2012-04-11 02:26:45.png =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-06-29 00:07:16
|
Revision: 11345 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11345&view=rev Author: wardje Date: 2012-06-29 00:07:10 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Add Ward Muylaert to credits (programming/bug fixes). Modified Paths: -------------- main/trunk/data/CREDITS Modified: main/trunk/data/CREDITS =================================================================== --- main/trunk/data/CREDITS 2012-06-28 23:07:52 UTC (rev 11344) +++ main/trunk/data/CREDITS 2012-06-29 00:07:10 UTC (rev 11345) @@ -37,6 +37,7 @@ |
From: <wa...@us...> - 2012-06-28 23:07:58
|
Revision: 11344 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11344&view=rev Author: wardje Date: 2012-06-28 23:07:52 +0000 (Thu, 28 Jun 2012) Log Message: ----------- Removes duplicate content in header file. Content in the header file of the PresentAI was duplicated. Removed one of them. Modified Paths: -------------- main/trunk/src/karts/controller/present_ai.hpp Modified: main/trunk/src/karts/controller/present_ai.hpp =================================================================== --- main/trunk/src/karts/controller/present_ai.hpp 2012-06-28 17:03:47 UTC (rev 11343) +++ main/trunk/src/karts/controller/present_ai.hpp 2012-06-28 23:07:52 UTC (rev 11344) @@ -155,160 +155,3 @@ #endif /* EOF */ - -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker <sjb...@ai...> -// Copyright (C) 2006-2007 Eduardo Hernandez Munoz -// Copyright (C) 2010 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_PRESENT_AI_HPP -#define HEADER_PRESENT_AI_HPP - -#include "karts/controller/ai_base_controller.hpp" - -class Track; -class LinearWorld; -class QuadGraph; - -namespace irr -{ - namespace scene - { - class ISceneNode; - } -} - -/** - * \ingroup controller - */ -class PresentAI : public AIBaseController -{ -private: - /** How the AI uses nitro. */ - enum {NITRO_NONE, NITRO_SOME, NITRO_ALL} m_nitro_level; - enum ItemTactic - { - IT_TEN_SECONDS, //Fire after 10 seconds have passed, since the item - //was grabbed. - IT_CALCULATE //Aim carefully, check for enough space for boosters, - //and that other conditions are meet before firing. - }; - - class CrashTypes - { - public: - - bool m_road; //true if we are going to 'crash' with the bounds of the road - int m_kart; //-1 if no crash, pos numbers are the kart it crashes with - CrashTypes() : m_road(false), m_kart(-1) {}; - void clear() {m_road = false; m_kart = -1;} - } m_crashes; - - /*Difficulty handling variables*/ - /** Chance of a false start. */ - float m_false_start_probability; - /** The minimum delay time before a AI kart starts. */ - float m_min_start_delay; - /** The maximum delay time before an AI kart starts. */ - float m_max_start_delay; - /** The actual start delay used. */ - float m_start_delay; - - /** Minimum number of steps to check. If 0, the AI doesn't even has check - * around the kart, if 1, it checks around the kart always, and more - * than that will check the remaining number of steps in front of the - * kart, always. */ - int m_min_steps; - /** If true, the acceleration is decreased when the AI is in a better - * position than all the human players. */ - bool m_wait_for_players; - - /** The allowed maximum speed in percent of the kart's maximum speed. */ - float m_max_handicap_speed; - - /** How are items going to be used? */ - ItemTactic m_item_tactic; - - /** True if the kart should try to pass on a bomb to another kart. */ - bool m_handle_bomb; - - /** True if the AI should avtively try to make use of slipstream. */ - bool m_make_use_of_slipstream; - - /*General purpose variables*/ - - /** Pointer to the closest kart ahead of this kart. NULL if this - * kart is first. */ - AbstractKart *m_kart_ahead; - - /** Distance to the kart ahead. */ - float m_distance_ahead; - - /** Pointer to the closest kart behind this kart. NULL if this kart - * is last. */ - AbstractKart *m_kart_behind; - - /** Distance to the kard behind. */ - float m_distance_behind; - - /** Time an item has been collected and not used. */ - float m_time_since_last_shot; - - float m_curve_target_speed; - float m_curve_angle; - - float m_time_since_stuck; - - int m_start_kart_crash_direction; //-1 = left, 1 = right, 0 = no crash. - - /** For debugging purpose: a sphere indicating where the AI - * is targeting at. */ - irr::scene::ISceneNode *m_debug_sphere; - - /*Functions called directly from update(). They all represent an action - *that can be done, and end up setting their respective m_controls - *variable, except handle_race_start() that isn't associated with any - *specific action (more like, associated with inaction). - */ - void handleRaceStart(); - void handleAcceleration(const float dt); - void handleSteering(float dt); - void handleItems(const float dt); - void handleRescue(const float dt); - void handleBraking(); - void handleNitroAndZipper(); - void computeNearestKarts(); - - void checkCrashes(int steps, const Vec3& pos); - void findNonCrashingPoint(Vec3 *result); - - int calcSteps(); - void findCurve(); -protected: - virtual unsigned int getNextSector(unsigned int index); - -public: - PresentAI(AbstractKart *kart); - ~PresentAI(); - virtual void update (float delta) ; - virtual void reset (); -}; - -#endif - -/* EOF */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2012-06-28 17:03:54
|
Revision: 11343 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11343&view=rev Author: stephenjust Date: 2012-06-28 17:03:47 +0000 (Thu, 28 Jun 2012) Log Message: ----------- [stkaddons] Add url-rewriting for addons. Please notify me if anything is broken as a result. Modified Paths: -------------- stkaddons/trunk/addons.php stkaddons/trunk/include/Addon.class.php stkaddons/trunk/include/AddonViewer.class.php stkaddons/trunk/include/File.class.php stkaddons/trunk/include/PanelInterface.class.php stkaddons/trunk/include/menu.php stkaddons/trunk/include/top.php stkaddons/trunk/index.php stkaddons/trunk/js/script.js stkaddons/trunk/manage-panel.php stkaddons/trunk/manage.php Modified: stkaddons/trunk/addons.php =================================================================== --- stkaddons/trunk/addons.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/addons.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -225,13 +225,14 @@ $class = 'addon-list menu-item unavailable'; else continue; - $icon_html = '<img class="icon" src="'.$icon.'" />'; + $icon_html = '<img class="icon" src="'.SITE_ROOT.$icon.'" />'; if (($adc->getStatus() & F_FEATURED) == F_FEATURED) $icon_html = '<div class="icon"><div class="icon-featured"></div>'.$icon_html.'</div>'; $addons[] = array( 'class' => $class, 'url' => "addons.php?type={$_GET['type']}&name={$adc->getId()}", - 'label' => $icon_html.htmlspecialchars($adc->getName($adc->getId())) + 'label' => $icon_html.htmlspecialchars($adc->getName($adc->getId())), + 'disp' => File::rewrite("addons.php?type={$_GET['type']}&name={$adc->getId()}") ); } catch (AddonException $e) { Modified: stkaddons/trunk/include/Addon.class.php =================================================================== --- stkaddons/trunk/include/Addon.class.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/Addon.class.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -412,6 +412,7 @@ } public function getLink() { + // Don't rewrite here, because we might be editing the URL later return $this->permalink; } Modified: stkaddons/trunk/include/AddonViewer.class.php =================================================================== --- stkaddons/trunk/include/AddonViewer.class.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/AddonViewer.class.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -104,12 +104,12 @@ if ($image_handle && mysql_num_rows($image_handle) == 1) { $image_result = mysql_fetch_assoc($image_handle); - $string .= '<img class="preview" src="image.php?type=big&pic='.$image_result['file_path'].'" />'; + $string .= '<img class="preview" src="'.SITE_ROOT.'image.php?type=big&pic='.$image_result['file_path'].'" />'; } // Add upload button below image (or in place of image) if (User::$logged_in && $this->addon->getUploader() == $_SESSION['userid']) { - $string .= '<br /><form method="POST" action="upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; + $string .= '<br /><form method="POST" action="'.SITE_ROOT.'upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; $string .= '<input type="submit" value="'.htmlspecialchars(_('Upload Image')).'" />'; $string .= '</form>'; } @@ -123,7 +123,7 @@ // Add upload button to the right of the Images label if (User::$logged_in && $this->addon->getUploader() == $_SESSION['userid']) { - echo '<div style="float: right;"><form method="POST" action="upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; + echo '<div style="float: right;"><form method="POST" action="'.SITE_ROOT.'upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; echo '<input type="submit" value="'.htmlspecialchars(_('Upload Image')).'" />'; echo '</form></div>'; } @@ -161,26 +161,26 @@ $div_style = 'image_thumb_container unapproved'; echo '<div class="'.$div_style.'">'; echo '<a href="'.DOWN_LOCATION.$source_file['file_path'].'" target="_blank" style="target-new: tab;">'; - echo '<img src="image.php?type=medium&pic='.$source_file['file_path'].'" />'; + echo '<img src="'.SITE_ROOT.'image.php?type=medium&pic='.$source_file['file_path'].'" />'; echo '</a><br />'; if (User::$logged_in) { if ($_SESSION['role']['manageaddons']) { if ($source_file['approved'] == 1) - echo '<a href="'.$this->addon->getLink().'&save=unapprove&id='.$source_file['id'].'">'.htmlspecialchars(_('Unapprove')).'</a>'; + echo '<a href="'.File::rewrite($this->addon->getLink().'&save=unapprove&id='.$source_file['id']).'">'.htmlspecialchars(_('Unapprove')).'</a>'; else - echo '<a href="'.$this->addon->getLink().'&save=approve&id='.$source_file['id'].'">'.htmlspecialchars(_('Approve')).'</a>'; + echo '<a href="'.File::rewrite($this->addon->getLink().'&save=approve&id='.$source_file['id']).'">'.htmlspecialchars(_('Approve')).'</a>'; echo '<br />'; } if ($_SESSION['role']['manageaddons'] || $this->addon->getUploader() == $_SESSION['userid']) { if ($this->addon->getType() == 'karts') { if ($this->addon->getImage(true) != $source_file['id']) { - echo '<a href="'.$this->addon->getLink().'&save=seticon&id='.$source_file['id'].'">'.htmlspecialchars(_('Set Icon')).'</a><br />'; + echo '<a href="'.File::rewrite($this->addon->getLink().'&save=seticon&id='.$source_file['id']).'">'.htmlspecialchars(_('Set Icon')).'</a><br />'; } } if ($this->addon->getImage() != $source_file['id']) { - echo '<a href="'.$this->addon->getLink().'&save=setimage&id='.$source_file['id'].'">'.htmlspecialchars(_('Set Image')).'</a><br />'; + echo '<a href="'.File::rewrite($this->addon->getLink().'&save=setimage&id='.$source_file['id']).'">'.htmlspecialchars(_('Set Image')).'</a><br />'; } - echo '<a href="'.$this->addon->getLink().'&save=deletefile&id='.$source_file['id'].'">'.htmlspecialchars(_('Delete File')).'</a><br />'; + echo '<a href="'.File::rewrite($this->addon->getLink().'&save=deletefile&id='.$source_file['id']).'">'.htmlspecialchars(_('Delete File')).'</a><br />'; } } echo '</div>'; @@ -203,7 +203,7 @@ $addonUser->selectById($this->addon->getUploader()); $string .= '<tr><td><strong>'.htmlspecialchars(_('Designer:')).'</strong></td><td>'.htmlspecialchars($this->addon->getDesigner()).'</td></tr> <tr><td><strong>'.htmlspecialchars(_('Upload date:')).'</strong></td><td>'.$latestRev['timestamp'].'</td></tr> - <tr><td><strong>'.htmlspecialchars(_('Submitted by:')).'</strong></td><td><a href="users.php?user='.$addonUser->userCurrent['user'].'">'.htmlspecialchars($addonUser->userCurrent['name']).'</a></td></tr> + <tr><td><strong>'.htmlspecialchars(_('Submitted by:')).'</strong></td><td><a href="'.SITE_ROOT.'users.php?user='.$addonUser->userCurrent['user'].'">'.htmlspecialchars($addonUser->userCurrent['name']).'</a></td></tr> <tr><td><strong>'.htmlspecialchars(_('Revision:')).'</strong></td><td>'.$latestRev['revision'].'</td></tr> <tr><td><strong>'.htmlspecialchars(_('Compatible with:')).'</strong></td><td>'.format_compat($latestRev['format'],$this->addon->getType()).'</td></tr>'; if (User::$logged_in) { @@ -230,7 +230,7 @@ private function displayLink() { // Print a permanent reference link (permalink) to this addon return '<h3>'.htmlspecialchars(_('Permalink')).'</h3> - <a href="'.$this->addon->getLink().'">'.$this->addon->getLink().'</a><br /><br />'; + <a href="'.File::rewrite($this->addon->getLink()).'">'.File::rewrite($this->addon->getLink()).'</a><br /><br />'; } private function displayRating() { @@ -253,7 +253,7 @@ // Add upload button to the right of the Revisions label if (User::$logged_in && ($this->addon->getUploader() == User::$user_id || $_SESSION['role']['manageaddons'])) { - echo '<div style="float: right;"><form method="POST" action="upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'">'; + echo '<div style="float: right;"><form method="POST" action="'.SITE_ROOT.'upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'">'; echo '<input type="submit" value="'.htmlspecialchars(_('Upload Revision')).'" />'; echo '</form></div>'; } @@ -307,7 +307,7 @@ // Add upload button to the right of the Source Files label if (User::$logged_in && $this->addon->getUploader() == $_SESSION['userid']) { - echo '<div style="float: right;"><form method="POST" action="upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; + echo '<div style="float: right;"><form method="POST" action="'.SITE_ROOT.'upload.php?type='.$this->addon->getType().'&name='.$this->addon->getId().'&action=file">'; echo '<input type="submit" value="'.htmlspecialchars(_('Upload Source File')).'" />'; echo '</form></div>'; } @@ -355,12 +355,12 @@ if ($_SESSION['role']['manageaddons']) { if ($source_file['approved'] == 1) - echo ' | <a href="'.$this->addon->getLink().'&save=unapprove&id='.$source_file['id'].'">'.htmlspecialchars(_('Unapprove')).'</a>'; + echo ' | <a href="'.File::rewrite($this->addon->getLink().'&save=unapprove&id='.$source_file['id']).'">'.htmlspecialchars(_('Unapprove')).'</a>'; else - echo ' | <a href="'.$this->addon->getLink().'&save=approve&id='.$source_file['id'].'">'.htmlspecialchars(_('Approve')).'</a>'; + echo ' | <a href="'.File::rewrite($this->addon->getLink().'&save=approve&id='.$source_file['id']).'">'.htmlspecialchars(_('Approve')).'</a>'; } if ($this->addon->getUploader() == $_SESSION['userid'] || $_SESSION['role']['manageaddons']) - echo ' | <a href="'.$this->addon->getLink().'&save=deletefile&id='.$source_file['id'].'">'.htmlspecialchars(_('Delete File')).'</a><br />'; + echo ' | <a href="'.File::rewrite($this->addon->getLink().'&save=deletefile&id='.$source_file['id']).'">'.htmlspecialchars(_('Delete File')).'</a><br />'; } $n++; echo '</td></tr>'; @@ -398,7 +398,7 @@ throw new AddonException(htmlspecialchars(_('You do not have the necessary privileges to perform this action.'))); echo '<br /><hr /><br /><h3>'.htmlspecialchars(_('Configuration')).'</h3>'; - echo '<form name="changeProps" action="'.$this->addon->getLink().'&save=props" method="POST">'; + echo '<form name="changeProps" action="'.File::rewrite($this->addon->getLink().'&save=props').'" method="POST">'; // Edit designer $designer = ($this->addon->getDesigner() == htmlspecialchars(_('Unknown'))) ? NULL : $this->addon->getDesigner(); @@ -420,11 +420,11 @@ if ($this->addon->getUploader() == $_SESSION['userid'] || $_SESSION['role']['manageaddons']) echo '<input type="button" value="'.htmlspecialchars(_('Delete Addon')).'" - onClick="confirm_delete(\''.$this->addon->getLink().'&save=delete\')" /><br /><br />'; + onClick="confirm_delete(\''.File::rewrite($this->addon->getLink().'&save=delete').'\')" /><br /><br />'; // Set status flags echo '<strong>'.htmlspecialchars(_('Status Flags:')).'</strong><br />'; - echo '<form method="POST" action="'.$this->addon->getLink().'&save=status">'; + echo '<form method="POST" action="'.File::rewrite($this->addon->getLink().'&save=status').'">'; echo '<table id="addon_flags" class="info"><thead><tr><th></th>'; if ($_SESSION['role']['manageaddons']) echo '<th>'.img_label(htmlspecialchars(_('Approved'))).'</th> @@ -540,7 +540,7 @@ // Moderator notes echo '<strong>'.htmlspecialchars(_('Notes from Moderator to Submitter:')).'</strong><br />'; if ($_SESSION['role']['manageaddons']) - echo '<form method="POST" action="'.$this->addon->getLink().'&save=notes">'; + echo '<form method="POST" action="'.File::rewrite($this->addon->getLink().'&save=notes').'">'; $fields = array(); foreach ($this->addon->getAllRevisions() AS $rev_n => $revision) { printf(htmlspecialchars(_('Rev %u:')).'<br />',$rev_n); Modified: stkaddons/trunk/include/File.class.php =================================================================== --- stkaddons/trunk/include/File.class.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/File.class.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -446,6 +446,31 @@ // Add image record to add-on File::newImage(NULL, basename($out_file), $addon_id, $addon_type); } + + public static function rewrite($link) { + $link = str_replace(SITE_ROOT, NULL, $link); + $rules = ConfigManager::get_config('apache_rewrites'); + $rules = preg_split('/(\\r)?\\n/',$rules); + + foreach ($rules AS $rule) { + // Check for invalid lines + if (!preg_match('/^([^\ ]+) ([^\ ]+)( L)?$/i', $rule, $parts)) continue; + + // Check rewrite regular expression + $search = '@'.$parts[1].'@i'; + $new_link = $parts[2]; + if (!preg_match($search, $link, $matches)) continue; + for ($i = 1; $i < count($matches); $i++) { + $new_link = str_replace('$'.$i, $matches[$i], $new_link); + } + $link = $new_link; + + if (isset($parts[3]) && ($parts[3] == ' L')) + break; + } + + return SITE_ROOT.$link; + } } ?> Modified: stkaddons/trunk/include/PanelInterface.class.php =================================================================== --- stkaddons/trunk/include/PanelInterface.class.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/PanelInterface.class.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -52,7 +52,13 @@ $content .= "\t\t\t<ul>\n"; for ($i = 0; $i < count($this->menu_items); $i++) { $content .= "\t\t\t\t<li>\n"; - $content .= "\t\t\t\t\t<a class=\"{$this->menu_items[$i]['class']}\" href=\"{$this->menu_items[$i]['url']}\">\n"; + if (isset($this->menu_items[$i]['disp'])) { + $content .= "\t\t\t\t\t<a class=\"{$this->menu_items[$i]['class']}\" href=\"{$this->menu_items[$i]['disp']}\">\n"; + $content .= "\t\t\t\t\t\t<div id=\"i\" style=\"display: none;\">{$this->menu_items[$i]['url']}</div>\n"; + } else { + $content .= "\t\t\t\t\t<a class=\"{$this->menu_items[$i]['class']}\" href=\"{$this->menu_items[$i]['url']}\">\n"; + + } $content .= "\t\t\t\t\t\t{$this->menu_items[$i]['label']}\n"; $content .= "\t\t\t\t\t</a>\n"; $content .= "\t\t\t\t</li>\n"; Modified: stkaddons/trunk/include/menu.php =================================================================== --- stkaddons/trunk/include/menu.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/menu.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -43,7 +43,7 @@ printf(htmlspecialchars(_('Welcome, %s')),$_SESSION['real_name']); echo ' '; } - echo '<a href="index.php">'; + echo '<a href="'.SITE_ROOT.'index.php">'; echo htmlspecialchars(_("Home")); echo '</a>'; @@ -51,36 +51,36 @@ { if ($_GET['type'] == 'karts') { - echo '<a href="addons.php?type=tracks">'.htmlspecialchars(_('Tracks')).'</a>'; - echo '<a href="addons.php?type=arenas">'.htmlspecialchars(_('Arenas')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=tracks').'">'.htmlspecialchars(_('Tracks')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=arenas').'">'.htmlspecialchars(_('Arenas')).'</a>'; } elseif ($_GET['type'] == 'tracks') { - echo '<a href="addons.php?type=karts">'.htmlspecialchars(_('Karts')).'</a>'; - echo '<a href="addons.php?type=arenas">'.htmlspecialchars(_('Arenas')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=karts').'">'.htmlspecialchars(_('Karts')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=arenas').'">'.htmlspecialchars(_('Arenas')).'</a>'; } else { - echo '<a href="addons.php?type=karts">'.htmlspecialchars(_('Karts')).'</a>'; - echo '<a href="addons.php?type=tracks">'.htmlspecialchars(_('Tracks')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=karts').'">'.htmlspecialchars(_('Karts')).'</a>'; + echo '<a href="'.File::rewrite('addons.php?type=tracks').'">'.htmlspecialchars(_('Tracks')).'</a>'; } } if(User::$logged_in) { - echo'<a href="login.php?action=logout">'.htmlspecialchars(_("Log out")).'</a>'; - echo'<a href="users.php">'.htmlspecialchars(_("Users")).'</a>'; - echo'<a href="upload.php">'.htmlspecialchars(_("Upload")).'</a>'; + echo'<a href="'.SITE_ROOT.'login.php?action=logout">'.htmlspecialchars(_("Log out")).'</a>'; + echo'<a href="'.SITE_ROOT.'users.php">'.htmlspecialchars(_("Users")).'</a>'; + echo'<a href="'.SITE_ROOT.'upload.php">'.htmlspecialchars(_("Upload")).'</a>'; if ($_SESSION['role']['manageaddons']) - echo '<a href="manage.php">'.htmlspecialchars(_('Manage')).'</a>'; + echo '<a href="'.SITE_ROOT.'manage.php">'.htmlspecialchars(_('Manage')).'</a>'; } else { - echo'<a href="login.php">'; + echo'<a href="'.SITE_ROOT.'login.php">'; echo htmlspecialchars(_('Login')); echo '</a>'; } - echo'<a href="about.php">'; + echo'<a href="'.SITE_ROOT.'about.php">'; echo htmlspecialchars(_('About')); echo '</a>'; ?> Modified: stkaddons/trunk/include/top.php =================================================================== --- stkaddons/trunk/include/top.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/include/top.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -38,6 +38,7 @@ <meta http-equiv="X-UA-Compatible" content="IE=9" /> <title><?php echo $title;?></title> <link href="<?php echo SITE_ROOT; ?>css/skin_<?php echo $style;?>.css" rel="stylesheet" media="all" type="text/css" /> + <script type="text/javascript">var siteRoot='<?php echo SITE_ROOT; ?>';</script> <script type="text/javascript" src="<?php echo SITE_ROOT; ?>js/jquery.js"></script> <script type="text/javascript" src="<?php echo SITE_ROOT; ?>js/jquery.newsticker.js"></script> <script type="text/javascript" src="<?php echo SITE_ROOT; ?>js/script.js"></script> Modified: stkaddons/trunk/index.php =================================================================== --- stkaddons/trunk/index.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/index.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -51,7 +51,7 @@ <div id="index-menu"> <div> - <a href="addons.php?type=karts" style="background-position: -106px 0px;"> + <a href="<?php echo File::rewrite('addons.php?type=karts'); ?>" style="background-position: -106px 0px;"> <span> <?php // I18N: Menu link @@ -61,7 +61,7 @@ </a> </div> <div> - <a href="addons.php?type=tracks" style="background-position: 0px 0px;"> + <a href="<?php echo File::rewrite('addons.php?type=tracks'); ?>" style="background-position: 0px 0px;"> <span> <?php // I18N: Menu link @@ -71,7 +71,7 @@ </a> </div> <div> - <a href="addons.php?type=arenas" style="background-position: -212px 0px;"> + <a href="<?php echo File::rewrite('addons.php?type=arenas'); ?>" style="background-position: -212px 0px;"> <span> <?php // I18N: Menu link Modified: stkaddons/trunk/js/script.js =================================================================== --- stkaddons/trunk/js/script.js 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/js/script.js 2012-06-28 17:03:47 UTC (rev 11343) @@ -94,8 +94,12 @@ history.pushState({path: this.path}, '', this.href); var url = this.href; var addonType = getUrlVars(url)['type']; + if (addonType == undefined) { + url = siteRoot + $(this).children('#i').html().replace('&','&'); + addonType = getUrlVars(url)['type']; + } var addonId = getUrlVars(url)['name']; - loadFrame(addonId,'addons-panel.php?type=' + addonType); + loadFrame(addonId,siteRoot + 'addons-panel.php?type=' + addonType); clearPanelStatus(); return false; }); @@ -104,7 +108,7 @@ history.pushState({path: this.path}, '', this.href); var url = this.href; var view = getUrlVars(url)['view']; - loadFrame(view,'manage-panel.php'); + loadFrame(view,siteRoot + 'manage-panel.php'); clearPanelStatus(); return false; }); @@ -113,7 +117,7 @@ history.pushState({path: this.path}, '', this.href); var url = this.href; var user = getUrlVars(url)['user']; - loadFrame(user,'users-panel.php'); + loadFrame(user,siteRoot + 'users-panel.php'); clearPanelStatus(); return false; }); @@ -138,8 +142,8 @@ } } function addRating(rating,addonId,sel_storage,disp_storage) { - loadHTML('./include/addRating.php?rating='+encodeURI(rating)+'&addonId='+encodeURI(addonId),sel_storage); - loadHTML('./include/addRating.php?addonId='+encodeURI(addonId),disp_storage); + loadHTML(siteRoot + 'include/addRating.php?rating='+encodeURI(rating)+'&addonId='+encodeURI(addonId),sel_storage); + loadHTML(siteRoot + 'include/addRating.php?addonId='+encodeURI(addonId),disp_storage); } // AJAX functions Modified: stkaddons/trunk/manage-panel.php =================================================================== --- stkaddons/trunk/manage-panel.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/manage-panel.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -188,6 +188,7 @@ echo '<tr><td>'.htmlspecialchars(_('List Invisible Addons in XML')).'</td><td><select name="list_invisible">'.$invisible_opts.'</option></td></tr>'; echo '<tr><td>'.htmlspecialchars(_('Blog RSS Feed')).'</td><td><input name="blog_feed" value="'.ConfigManager::get_config('blog_feed').'" /></td></tr>'; echo '<tr><td>'.htmlspecialchars(_('Maximum Uploaded Image Dimension')).'</td><td><input name="max_image_dimension" value="'.ConfigManager::get_config('max_image_dimension').'" /></td></tr>'; + echo '<tr><td>'.htmlspecialchars(_('Apache Rewrites')).'</td><td><textarea name="apache_rewrites">'.htmlspecialchars(ConfigManager::get_config('apache_rewrites')).'</textarea></td></tr>'; echo '<tr><td></td><td><input type="submit" value="'.htmlspecialchars(_('Save Settings')).'" /></td></tr>'; echo '</table>'; } Modified: stkaddons/trunk/manage.php =================================================================== --- stkaddons/trunk/manage.php 2012-06-28 04:00:40 UTC (rev 11342) +++ stkaddons/trunk/manage.php 2012-06-28 17:03:47 UTC (rev 11343) @@ -95,14 +95,15 @@ } else { - ConfigManager::set_config('xml_frequency',(int)$_POST['xml_frequency']); - ConfigManager::set_config('allowed_addon_exts',mysql_real_escape_string($_POST['allowed_addon_exts'])); - ConfigManager::set_config('allowed_source_exts',mysql_real_escape_string($_POST['allowed_source_exts'])); - ConfigManager::set_config('admin_email',mysql_real_escape_string($_POST['admin_email'])); - ConfigManager::set_config('list_email',mysql_real_escape_string($_POST['list_email'])); - ConfigManager::set_config('list_invisible',(int)$_POST['list_invisible']); - ConfigManager::set_config('blog_feed', mysql_real_escape_string($_POST['blog_feed'])); + ConfigManager::set_config('xml_frequency', (int)$_POST['xml_frequency']); + ConfigManager::set_config('allowed_addon_exts', $_POST['allowed_addon_exts']); + ConfigManager::set_config('allowed_source_exts',$_POST['allowed_source_exts']); + ConfigManager::set_config('admin_email', $_POST['admin_email']); + ConfigManager::set_config('list_email', $_POST['list_email']); + ConfigManager::set_config('list_invisible', (int)$_POST['list_invisible']); + ConfigManager::set_config('blog_feed', $_POST['blog_feed']); ConfigManager::set_config('max_image_dimension',(int)$_POST['max_image_dimension']); + ConfigManager::set_config('apache_rewrites', $_POST['apache_rewrites']); } echo htmlspecialchars(_('Saved settings.')).'<br />'; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-06-28 04:00:47
|
Revision: 11342 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11342&view=rev Author: wardje Date: 2012-06-28 04:00:40 +0000 (Thu, 28 Jun 2012) Log Message: ----------- Fix bug #655 (crash when going into story mode) Make sure the list of AI karts gets cleared by making sure that computeRandomKartList gets executed. Modified Paths: -------------- main/trunk/src/race/race_manager.cpp Modified: main/trunk/src/race/race_manager.cpp =================================================================== --- main/trunk/src/race/race_manager.cpp 2012-06-27 22:18:44 UTC (rev 11341) +++ main/trunk/src/race/race_manager.cpp 2012-06-28 04:00:40 UTC (rev 11342) @@ -121,7 +121,7 @@ //} m_default_ai_list.push_back(name); } -} // setAIKartList +} // setDefaultAIKartList // ---------------------------------------------------------------------------- /** Sets information about a kart used by a local player (i.e. on this @@ -216,8 +216,6 @@ */ void RaceManager::computeRandomKartList() { - if (m_num_karts == 0) return; - int n = m_num_karts - m_player_karts.size(); if(UserConfigParams::logMisc()) std::cout << "AI karts count = " << n << " for m_num_karts=" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2012-06-27 22:18:50
|
Revision: 11341 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11341&view=rev Author: stephenjust Date: 2012-06-27 22:18:44 +0000 (Wed, 27 Jun 2012) Log Message: ----------- [stkaddons] Let 'moderator'-level users see relevant parts of the 'Manage' panel Modified Paths: -------------- stkaddons/trunk/include/menu.php stkaddons/trunk/manage-panel.php stkaddons/trunk/manage.php Modified: stkaddons/trunk/include/menu.php =================================================================== --- stkaddons/trunk/include/menu.php 2012-06-27 21:55:27 UTC (rev 11340) +++ stkaddons/trunk/include/menu.php 2012-06-27 22:18:44 UTC (rev 11341) @@ -71,7 +71,7 @@ echo'<a href="login.php?action=logout">'.htmlspecialchars(_("Log out")).'</a>'; echo'<a href="users.php">'.htmlspecialchars(_("Users")).'</a>'; echo'<a href="upload.php">'.htmlspecialchars(_("Upload")).'</a>'; - if ($_SESSION['role']['managesettings']) + if ($_SESSION['role']['manageaddons']) echo '<a href="manage.php">'.htmlspecialchars(_('Manage')).'</a>'; } else Modified: stkaddons/trunk/manage-panel.php =================================================================== --- stkaddons/trunk/manage-panel.php 2012-06-27 21:55:27 UTC (rev 11340) +++ stkaddons/trunk/manage-panel.php 2012-06-27 22:18:44 UTC (rev 11341) @@ -21,7 +21,7 @@ if (!defined('ROOT')) define('ROOT','./'); if (!isset($security)) - $security = 'managesettings'; + $security = 'manageaddons'; require_once('include.php'); if (!isset($_GET['action'])) $_GET['action'] = NULL; @@ -173,6 +173,7 @@ function settings_panel() { + if (!$_SESSION['role']['managesettings']) return; echo '<form method="POST" action="manage.php?view=general&action=save_config">'; echo '<table>'; echo '<tr><td>'.htmlspecialchars(_('XML Download Frequency')).'</td><td><input type="text" name="xml_frequency" value="'.ConfigManager::get_config('xml_frequency').'" size="6" maxlength="8" /></td></tr>'; @@ -193,6 +194,7 @@ function news_message_panel() { + if (!$_SESSION['role']['managesettings']) return; echo '<form method="POST" action="manage.php?view=news&action=new_news"><table><tr>'; echo '<td>'.htmlspecialchars(_('Message:')).'</td><td><input type="text" name="message" id="news_message" size="60" maxlength="140" /></td></tr><tr>'; echo '<td>'.htmlspecialchars(_('Condition:')).'</td><td><input type="text" name="condition" id="news_condition" size="60" maxlength="255" /></td></tr><tr>'; @@ -329,6 +331,7 @@ function clients_panel() { + if (!$_SESSION['role']['managesettings']) return; echo '<h3>'.htmlspecialchars(_('Clients by User-Agent')).'</h3>'; // Read recorded user-agents from database $clientsSql = 'SELECT * FROM `'.DB_PREFIX.'clients` @@ -360,6 +363,7 @@ } function cache_panel() { + if (!$_SESSION['role']['managesettings']) return; echo '<a href="manage.php?view=cache&action=cache_clear">'.htmlspecialchars(_('Empty cache')).'</a><br />'; echo 'TODO: List cache files.<br />'; } Modified: stkaddons/trunk/manage.php =================================================================== --- stkaddons/trunk/manage.php 2012-06-27 21:55:27 UTC (rev 11340) +++ stkaddons/trunk/manage.php 2012-06-27 22:18:44 UTC (rev 11341) @@ -19,7 +19,7 @@ */ define('ROOT','./'); -$security = 'managesettings'; +$security = 'manageaddons'; require('include.php'); $title = htmlspecialchars(_('STK Add-ons').' | '._('Manage')); @@ -31,44 +31,52 @@ $panels = new PanelInterface(); -$panels->setMenuItems( +$menu_items = array( array( 'url' => 'manage.php?view=overview', 'label' => htmlspecialchars(_('Overview')), 'class' => 'manage-list menu-item' - ), - array( + ) + ); +if ($_SESSION['role']['managesettings']) { + $menu_items[] = array( 'url' => 'manage.php?view=general', 'label' => htmlspecialchars(_('General Settings')), 'class' => 'manage-list menu-item' - ), + ); + $menu_items[] = array( 'url' => 'manage.php?view=news', 'label' => htmlspecialchars(_('News Messages')), 'class' => 'manage-list menu-item' - ), + ); + $menu_items[] = array( - 'url' => 'manage.php?view=files', - 'label' => htmlspecialchars(_('Uploaded Files')), - 'class' => 'manage-list menu-item' - ), - array( 'url' => 'manage.php?view=clients', 'label' => htmlspecialchars(_('Client Versions')), 'class' => 'manage-list menu-item' - ), + ); + $menu_items[] = array( 'url' => 'manage.php?view=cache', 'label' => htmlspecialchars(_('Cache Files')), 'class' => 'manage-list menu-item' - ), + ); +} +$menu_items[] = array( + 'url' => 'manage.php?view=files', + 'label' => htmlspecialchars(_('Uploaded Files')), + 'class' => 'manage-list menu-item' + ); +$menu_items[] = + array( 'url' => 'manage.php?view=logs', 'label' => htmlspecialchars(_('Event Logs')), 'class' => 'manage-list menu-item' - ) - )); + ); +$panels->setMenuItems($menu_items); ob_start(); switch ($_GET['action']) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2012-06-27 21:55:33
|
Revision: 11340 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11340&view=rev Author: stephenjust Date: 2012-06-27 21:55:27 +0000 (Wed, 27 Jun 2012) Log Message: ----------- [stkaddons] Added first version of moderator overview panel (see 'Manage' link in menu) Modified Paths: -------------- stkaddons/trunk/css/skin_default.css stkaddons/trunk/include/Addon.class.php stkaddons/trunk/include/User.class.php stkaddons/trunk/manage-panel.php stkaddons/trunk/manage.php Modified: stkaddons/trunk/css/skin_default.css =================================================================== --- stkaddons/trunk/css/skin_default.css 2012-06-27 01:58:15 UTC (rev 11339) +++ stkaddons/trunk/css/skin_default.css 2012-06-27 21:55:27 UTC (rev 11340) @@ -401,13 +401,6 @@ display:block; } -h2 -{ - clear:both; - font-size:15px; - font-family: Tahoma, Verdana,Geneva,sans-serif; - font-weight:normal; -} a img { border:none; @@ -528,6 +521,12 @@ display: block; border-bottom: 1px solid #CCCCCC; } +#right-content h2 +{ + border-bottom: 1px solid #CCCCCC; + font-size: 1.4em; + font-weight: normal; +} #right-content h3 { clear: both; Modified: stkaddons/trunk/include/Addon.class.php =================================================================== --- stkaddons/trunk/include/Addon.class.php 2012-06-27 01:58:15 UTC (rev 11339) +++ stkaddons/trunk/include/Addon.class.php 2012-06-27 21:55:27 UTC (rev 11340) @@ -484,6 +484,21 @@ return $return; } + + public function getImages() { + $query = 'SELECT * FROM `'.DB_PREFIX.'files` + WHERE `addon_id` = \''.$this->id.'\' + AND `file_type` = \'image\''; + $handle = sql_query($query); + if (!$handle) return array(); + + $num = mysql_num_rows($handle); + $result = array(); + for ($i = 1; $i <= $num; $i++) { + $result[] = mysql_fetch_assoc($handle); + } + return $result; + } public static function getName($id) { @@ -502,6 +517,21 @@ $result = mysql_fetch_assoc($handle); return $result['name']; } + + public function getSourceFiles() { + $query = 'SELECT * FROM `'.DB_PREFIX.'files` + WHERE `addon_id` = \''.$this->id.'\' + AND `file_type` = \'source\''; + $handle = sql_query($query); + if (!$handle) return array(); + + $num = mysql_num_rows($handle); + $result = array(); + for ($i = 1; $i <= $num; $i++) { + $result[] = mysql_fetch_assoc($handle); + } + return $result; + } public static function isAllowedType($type) { if (in_array($type, Addon::$allowedTypes)) { Modified: stkaddons/trunk/include/User.class.php =================================================================== --- stkaddons/trunk/include/User.class.php 2012-06-27 01:58:15 UTC (rev 11339) +++ stkaddons/trunk/include/User.class.php 2012-06-27 21:55:27 UTC (rev 11340) @@ -254,7 +254,7 @@ // Send verification email try { - Mail::newAccountNotification($email, $username, $verification_code, $_SERVER['PHP_SELF']); + Mail::newAccountNotification($email, $username, $verification_code, SITE_ROOT.'register.php'); } catch (Exception $e) { Log::newEvent("Registration email for '$username' failed."); Modified: stkaddons/trunk/manage-panel.php =================================================================== --- stkaddons/trunk/manage-panel.php 2012-06-27 01:58:15 UTC (rev 11339) +++ stkaddons/trunk/manage-panel.php 2012-06-27 21:55:27 UTC (rev 11340) @@ -63,11 +63,18 @@ default: echo '<span class="error">'.htmlspecialchars(_('Invalid page. You may have followed a broken link.')).'</span><br />'; exit; + case 'overview': + // I18N: Moderator panel + echo '<h1>'.htmlspecialchars(_('Overview')).'</h1>'; + overview_panel(); + break; case 'general': + // I18N: Moderator panel echo '<h1>'.htmlspecialchars(_('General Settings')).'</h1>'; settings_panel(); break; case 'news': + // I18N: Moderator panel echo '<h1>'.htmlspecialchars(_('News Messages')).'</h1>'; news_message_panel(); break; @@ -84,11 +91,86 @@ cache_panel(); break; case 'logs': + // I18N: Moderator panel echo '<h1>'.htmlspecialchars(_('Event Logs')).'</h1>'; logs_panel(); break; } +function overview_panel() +{ + // Get all add-ons + $addons = array_merge(Addon::getAddonList('karts'), + Addon::getAddonList('tracks'), + Addon::getAddonList('arenas')); + + // I18N: Heading in moderator overview panel + echo '<h2>'.htmlspecialchars(_('Unapproved Add-Ons')).'</h2>'; + // Loop through each add-on + $empty_section = true; + foreach ($addons as $addon) { + $a = new Addon($addon); + $revisions = $a->getAllRevisions(); + $unapproved = array(); + $revision = current($revisions); + for ($i = 0; $i < count($revisions); $i++) { + if (!($revision['status'] && F_APPROVED)) + $unapproved[] = $revision['revision']; + $revision = next($revisions); + } + if ($unapproved !== array()) { + $empty_section = false; + echo '<strong><a href="'.$a->getLink().'">'.Addon::getName($addon).'</a></strong><br />'; + echo htmlspecialchars(_('Revisions:')).' '.implode(', ',$unapproved); + echo '<br /><br />'; + } + } + if ($empty_section === true) + echo htmlspecialchars(_('No unapproved add-ons.')).'<br /><br />'; + + + echo '<h2>'.htmlspecialchars(_('Unapproved Files')).'</h1>'; + echo '<h3>'.htmlspecialchars(_('Images:')).'</h3>'; + $empty_section = true; + foreach ($addons as $addon) { + $a = new Addon($addon); + $images = $a->getImages(); + $unapproved = array(); + for ($i = 0; $i < count($images); $i++) { + if ($images[$i]['approved'] == 0) + $unapproved[] = '<img src="'.ROOT.'image.php?type=medium&pic='.$images[$i]['file_path'].'" />'; + } + if ($unapproved !== array()) { + $empty_section = false; + echo '<strong><a href="'.$a->getLink().'">'.Addon::getName($addon).'</a></strong><br />'; + echo htmlspecialchars(_('Images:')).'<br />'.implode('<br />',$unapproved); + echo '<br /><br />'; + } + } + if ($empty_section === true) + echo htmlspecialchars(_('No unapproved images.')).'<br /><br />'; + + echo '<h3>'.htmlspecialchars(_('Source Archives:')).'</h3>'; + $empty_section = true; + foreach ($addons as $addon) { + $a = new Addon($addon); + $images = $a->getSourceFiles(); + $unapproved = 0; + for ($i = 0; $i < count($images); $i++) { + if ($images[$i]['approved'] == 0) + $unapproved++; + } + if ($unapproved !== 0) { + $empty_section = false; + echo '<strong><a href="'.$a->getLink().'">'.Addon::getName($addon).'</a></strong><br />'; + printf(htmlspecialchars(ngettext('%d File','%d Files',$unapproved)),$unapproved); + echo '<br /><br />'; + } + } + if ($empty_section === true) + echo htmlspecialchars(_('No unapproved source archives.')).'<br /><br />'; +} + function settings_panel() { echo '<form method="POST" action="manage.php?view=general&action=save_config">'; Modified: stkaddons/trunk/manage.php =================================================================== --- stkaddons/trunk/manage.php 2012-06-27 01:58:15 UTC (rev 11339) +++ stkaddons/trunk/manage.php 2012-06-27 21:55:27 UTC (rev 11340) @@ -34,6 +34,11 @@ $panels->setMenuItems( array( array( + 'url' => 'manage.php?view=overview', + 'label' => htmlspecialchars(_('Overview')), + 'class' => 'manage-list menu-item' + ), + array( 'url' => 'manage.php?view=general', 'label' => htmlspecialchars(_('General Settings')), 'class' => 'manage-list menu-item' @@ -124,7 +129,7 @@ $panels->setStatusContent($status_content); if (!isset($_GET['view'])) - $_GET['view'] = 'general'; + $_GET['view'] = 'overview'; $_POST['id'] = $_GET['view']; ob_start(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-27 01:58:22
|
Revision: 11339 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11339&view=rev Author: auria Date: 2012-06-27 01:58:15 +0000 (Wed, 27 Jun 2012) Log Message: ----------- Fix over previous commit, oops Modified Paths: -------------- media/trunk/blender_25/stk_track.py Modified: media/trunk/blender_25/stk_track.py =================================================================== --- media/trunk/blender_25/stk_track.py 2012-06-27 01:53:34 UTC (rev 11338) +++ media/trunk/blender_25/stk_track.py 2012-06-27 01:58:15 UTC (rev 11339) @@ -1621,7 +1621,7 @@ f.write(" same-group=\"%s\"\n"%sSameGroup.strip()) f.write(" inner-radius=\"%f\" color=\"%s\"/>\n"% \ (inner_radius, color) ) - except Exception as ex: + except Exception as exc: log_error("Error exporting checkline " + obj.name + ", make sure it is properly formed") from traceback import format_tb This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-27 01:53:41
|
Revision: 11338 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11338&view=rev Author: auria Date: 2012-06-27 01:53:34 +0000 (Wed, 27 Jun 2012) Log Message: ----------- Be a little more error resilient in exporter (change seems huge but only because code got re-indented in a new try...catch) Modified Paths: -------------- media/trunk/blender_25/stk_track.py Modified: media/trunk/blender_25/stk_track.py =================================================================== --- media/trunk/blender_25/stk_track.py 2012-06-26 21:14:06 UTC (rev 11337) +++ media/trunk/blender_25/stk_track.py 2012-06-27 01:53:34 UTC (rev 11338) @@ -1524,103 +1524,108 @@ ind = 1 for obj in lChecks: - type = getProperty(obj, "type", "") - if type == "cannonstart": - self.writeCannon(f, obj) - continue - elif type == "cannonend": - continue - - mesh = obj.data.copy() - # Convert to world space - mesh.transform(obj.matrix_world) - # One of lap, activate, toggle, ambient - activate = getProperty(obj, "activate", "") - kind=" " - if activate: - group = activate.lower() - if group not in dGroup2Indices: - log_warning("Activate group '%s' not found!"%group) - print("Ignored - but lap counting might not work correctly.") - print("Make sure there is an object of type 'check' with") - print("the name '%s' defined."%group) + try: + type = getProperty(obj, "type", "") + if type == "cannonstart": + self.writeCannon(f, obj) continue - s = reduce(lambda x,y: str(x)+" "+str(y), dGroup2Indices[group]) - kind = " kind=\"activate\" other-ids=\"%s\" "% s - - toggle = getProperty(obj, "toggle", "") - if toggle: - group = toggle.lower() - if group not in dGroup2Indices: - log_warning("Toggle group '%s' not found!"%group) - print("Ignored - but lap counting might not work correctly.") - print("Make sure there is an object of type 'check' with") - print("the name '%s' defined."%group) + elif type == "cannonend": continue - s = reduce(lambda x,y: str(x)+" "+str(y), dGroup2Indices[group]) - kind = " kind=\"toggle\" other-ids=\"%s\" "% s - - lap = getProperty(obj, "type", obj.name).upper() - if lap[:3]=="LAP": - kind = " kind=\"lap\" " # xml needs a value for an attribute + + mesh = obj.data.copy() + # Convert to world space + mesh.transform(obj.matrix_world) + # One of lap, activate, toggle, ambient activate = getProperty(obj, "activate", "") + kind=" " if activate: group = activate.lower() if group not in dGroup2Indices: - log_warning("Activate group '%s' not found for lap line!"%group) + log_warning("Activate group '%s' not found!"%group) print("Ignored - but lap counting might not work correctly.") print("Make sure there is an object of type 'check' with") print("the name '%s' defined."%group) continue s = reduce(lambda x,y: str(x)+" "+str(y), dGroup2Indices[group]) - kind = "%sother-ids=\"%s\" "% (kind, s) - - ambient = getProperty(obj, "ambient", "").upper() - if ambient: - kind=" kind=\"ambient-light\" " + kind = " kind=\"activate\" other-ids=\"%s\" "% s - # Get the group name this object belongs to. If the objects - # is of type lap then 'lap' is the group name, otherwise - # it's taken from the name property (or the object name). - name = getProperty(obj, "type", obj.name.lower()).lower() - if name!="lap": - name = getProperty(obj, "name", obj.name.lower()).lower() - if len(name) == 0: name = obj.name.lower() + toggle = getProperty(obj, "toggle", "") + if toggle: + group = toggle.lower() + if group not in dGroup2Indices: + log_warning("Toggle group '%s' not found!"%group) + print("Ignored - but lap counting might not work correctly.") + print("Make sure there is an object of type 'check' with") + print("the name '%s' defined."%group) + continue + s = reduce(lambda x,y: str(x)+" "+str(y), dGroup2Indices[group]) + kind = " kind=\"toggle\" other-ids=\"%s\" "% s + + lap = getProperty(obj, "type", obj.name).upper() + if lap[:3]=="LAP": + kind = " kind=\"lap\" " # xml needs a value for an attribute + activate = getProperty(obj, "activate", "") + if activate: + group = activate.lower() + if group not in dGroup2Indices: + log_warning("Activate group '%s' not found for lap line!"%group) + print("Ignored - but lap counting might not work correctly.") + print("Make sure there is an object of type 'check' with") + print("the name '%s' defined."%group) + continue + s = reduce(lambda x,y: str(x)+" "+str(y), dGroup2Indices[group]) + kind = "%sother-ids=\"%s\" "% (kind, s) - # Get the list of indices of this group, excluding - # the index of the current object. So create a copy - # of the list and remove the current index - l = dGroup2Indices[name][:] - sSameGroup = reduce(lambda x,y: str(x)+" "+str(y), l, "") - ind = ind + 1 + ambient = getProperty(obj, "ambient", "").upper() + if ambient: + kind=" kind=\"ambient-light\" " - if len(mesh.vertices)==2: # Check line - min_h = mesh.vertices[0].co[2] - if mesh.vertices[1].co[2] < min_h: min_h = mesh.vertices[1].co[2] - f.write(" <check-line%sp1=\"%f %f\" p2=\"%f %f\"\n" % - (kind, mesh.vertices[0].co[0], mesh.vertices[0].co[1], - mesh.vertices[1].co[0], mesh.vertices[1].co[1] ) ) + # Get the group name this object belongs to. If the objects + # is of type lap then 'lap' is the group name, otherwise + # it's taken from the name property (or the object name). + name = getProperty(obj, "type", obj.name.lower()).lower() + if name!="lap": + name = getProperty(obj, "name", obj.name.lower()).lower() + if len(name) == 0: name = obj.name.lower() + + # Get the list of indices of this group, excluding + # the index of the current object. So create a copy + # of the list and remove the current index + l = dGroup2Indices[name][:] + sSameGroup = reduce(lambda x,y: str(x)+" "+str(y), l, "") + ind = ind + 1 - f.write(" min-height=\"%f\" same-group=\"%s\"/>\n" \ - % (min_h, sSameGroup.strip()) ) - else: - radius = 0 - for v in mesh.vertices: - r = (obj.location[0]-v[0])*(obj.location[0]-v[0]) + \ - (obj.location[1]-v[1])*(obj.location[1]-v[1]) + \ - (obj.location[2]-v[2])*(obj.loc[2]-v[2]) - if r > radius: - radius = r + if len(mesh.vertices)==2: # Check line + min_h = mesh.vertices[0].co[2] + if mesh.vertices[1].co[2] < min_h: min_h = mesh.vertices[1].co[2] + f.write(" <check-line%sp1=\"%f %f\" p2=\"%f %f\"\n" % + (kind, mesh.vertices[0].co[0], mesh.vertices[0].co[1], + mesh.vertices[1].co[0], mesh.vertices[1].co[1] ) ) + + f.write(" min-height=\"%f\" same-group=\"%s\"/>\n" \ + % (min_h, sSameGroup.strip()) ) + else: + radius = 0 + for v in mesh.vertices: + r = (obj.location[0]-v[0])*(obj.location[0]-v[0]) + \ + (obj.location[1]-v[1])*(obj.location[1]-v[1]) + \ + (obj.location[2]-v[2])*(obj.loc[2]-v[2]) + if r > radius: + radius = r + + radius = math.sqrt(radius) + inner_radius = getProperty(obj, "inner_radius", radius) + color = getProperty(obj, "color", "255 120 120 120") + f.write(" <check-sphere%sxyz=\"%f %f %f\" radius=\"%f\"\n" % \ + (kind, obj.location[0], obj.location[2], obj.location[1], radius) ) + f.write(" same-group=\"%s\"\n"%sSameGroup.strip()) + f.write(" inner-radius=\"%f\" color=\"%s\"/>\n"% \ + (inner_radius, color) ) + except Exception as ex: + log_error("Error exporting checkline " + obj.name + ", make sure it is properly formed") - radius = math.sqrt(radius) - inner_radius = getProperty(obj, "inner_radius", radius) - color = getProperty(obj, "color", "255 120 120 120") - f.write(" <check-sphere%sxyz=\"%f %f %f\" radius=\"%f\"\n" % \ - (kind, obj.location[0], obj.location[2], obj.location[1], radius) ) - f.write(" same-group=\"%s\"\n"%sSameGroup.strip()) - f.write(" inner-radius=\"%f\" color=\"%s\"/>\n"% \ - (inner_radius, color) ) - + from traceback import format_tb + print(format_tb(exc.__traceback__)[0]) f.write(" </checks>\n") # -------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2012-06-26 21:14:12
|
Revision: 11337 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11337&view=rev Author: magned Date: 2012-06-26 21:14:06 +0000 (Tue, 26 Jun 2012) Log Message: ----------- Remove obsolete license info from the COPYING file as per qubodup's forum suggestion Modified Paths: -------------- main/trunk/COPYING Modified: main/trunk/COPYING =================================================================== --- main/trunk/COPYING 2012-06-25 23:09:35 UTC (rev 11336) +++ main/trunk/COPYING 2012-06-26 21:14:06 UTC (rev 11337) @@ -5,8 +5,6 @@ Gnu GPL 2.0 and 3.0+ Creative-Commons-BY(-SA) 3.0 -Creative-Commons-Sampling+ 1.0 -SoundSnap license Public Domain ________________________________________________________________________________ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sam...@us...> - 2012-06-25 23:09:42
|
Revision: 11336 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11336&view=rev Author: samuncle Date: 2012-06-25 23:09:35 +0000 (Mon, 25 Jun 2012) Log Message: ----------- Ship improvement Modified Paths: -------------- media/trunk/cutscenes/nolokship/nolokship.blend media/trunk/cutscenes/nolokship/nolokship.png Modified: media/trunk/cutscenes/nolokship/nolokship.blend =================================================================== (Binary files differ) Modified: media/trunk/cutscenes/nolokship/nolokship.png =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mbj...@us...> - 2012-06-24 22:42:17
|
Revision: 11335 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11335&view=rev Author: mbjornstk Date: 2012-06-24 22:42:10 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Add cutscene_gui.[ch]pp to build system (and sort arenas_screen.[ch]pp). Also fix their EOLs (mixed!?) and set the property to avoid that in future. Modified Paths: -------------- main/trunk/src/Makefile.am main/trunk/src/states_screens/cutscene_gui.cpp main/trunk/src/states_screens/cutscene_gui.hpp Property Changed: ---------------- main/trunk/src/states_screens/cutscene_gui.cpp main/trunk/src/states_screens/cutscene_gui.hpp Modified: main/trunk/src/Makefile.am =================================================================== --- main/trunk/src/Makefile.am 2012-06-24 17:14:34 UTC (rev 11334) +++ main/trunk/src/Makefile.am 2012-06-24 22:42:10 UTC (rev 11335) @@ -346,8 +346,12 @@ replay/replay_play.hpp \ replay/replay_recorder.cpp \ replay/replay_recorder.hpp \ + states_screens/arenas_screen.cpp \ + states_screens/arenas_screen.hpp \ states_screens/credits.cpp \ states_screens/credits.hpp \ + states_screens/cutscene_gui.cpp \ + states_screens/cutscene_gui.hpp \ states_screens/dialogs/add_device_dialog.cpp \ states_screens/dialogs/add_device_dialog.hpp \ states_screens/dialogs/confirm_resolution_dialog.cpp \ @@ -376,8 +380,6 @@ states_screens/dialogs/track_info_dialog.hpp \ states_screens/dialogs/addons_loading.cpp \ states_screens/dialogs/addons_loading.hpp \ - states_screens/arenas_screen.cpp \ - states_screens/arenas_screen.hpp \ states_screens/feature_unlocked.cpp \ states_screens/feature_unlocked.hpp \ states_screens/grand_prix_lose.cpp \ Modified: main/trunk/src/states_screens/cutscene_gui.cpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.cpp 2012-06-24 17:14:34 UTC (rev 11334) +++ main/trunk/src/states_screens/cutscene_gui.cpp 2012-06-24 22:42:10 UTC (rev 11335) @@ -1,19 +1,19 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2012 Marianne Gagnon +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 3 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "guiengine/engine.hpp" @@ -29,14 +29,14 @@ } // ----------------------------------------------------------------------------- - + CutsceneGUI::~CutsceneGUI() { -} +} // ----------------------------------------------------------------------------- - + void CutsceneGUI::renderGlobal(float dt) { if (m_fade_level > 0.0f) @@ -54,7 +54,7 @@ GUIEngine::getFont()->draw(m_subtitle, r, video::SColor(255,255,255,255), true, true, NULL); } -} +} // ----------------------------------------------------------------------------- Property changes on: main/trunk/src/states_screens/cutscene_gui.cpp ___________________________________________________________________ Added: svn:eol-style + native Modified: main/trunk/src/states_screens/cutscene_gui.hpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.hpp 2012-06-24 17:14:34 UTC (rev 11334) +++ main/trunk/src/states_screens/cutscene_gui.hpp 2012-06-24 22:42:10 UTC (rev 11335) @@ -1,65 +1,65 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_RACE_GUI_HPP -#define HEADER_RACE_GUI_HPP - -#include <string> -#include <vector> - -#include <irrString.h> -using namespace irr; - -#include "config/player.hpp" -#include "states_screens/race_gui_base.hpp" -#include "utils/cpp2011.h" - -class AbstractKart; -class InputMap; -class Material; -class RaceSetup; - -/** - * \brief Handles the overlay for cutscenes - * \ingroup states_screens - */ -class CutsceneGUI : public RaceGUIBase -{ -private: - - float m_fade_level; - core::stringw m_subtitle; - -public: - - CutsceneGUI(); - ~CutsceneGUI(); - - void setFadeLevel(float level) { m_fade_level = level; } - void setSubtitle(const core::stringw& subtitle) { m_subtitle = subtitle; } - - virtual void renderGlobal(float dt); - virtual void renderPlayerView(const AbstractKart *kart); - - virtual const core::dimension2du getMiniMapSize() const OVERRIDE - { - return core::dimension2du(1,1); - } -}; // RaceGUI - -#endif +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2012 Marianne Gagnon +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 3 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef HEADER_RACE_GUI_HPP +#define HEADER_RACE_GUI_HPP + +#include <string> +#include <vector> + +#include <irrString.h> +using namespace irr; + +#include "config/player.hpp" +#include "states_screens/race_gui_base.hpp" +#include "utils/cpp2011.h" + +class AbstractKart; +class InputMap; +class Material; +class RaceSetup; + +/** + * \brief Handles the overlay for cutscenes + * \ingroup states_screens + */ +class CutsceneGUI : public RaceGUIBase +{ +private: + + float m_fade_level; + core::stringw m_subtitle; + +public: + + CutsceneGUI(); + ~CutsceneGUI(); + + void setFadeLevel(float level) { m_fade_level = level; } + void setSubtitle(const core::stringw& subtitle) { m_subtitle = subtitle; } + + virtual void renderGlobal(float dt); + virtual void renderPlayerView(const AbstractKart *kart); + + virtual const core::dimension2du getMiniMapSize() const OVERRIDE + { + return core::dimension2du(1,1); + } +}; // RaceGUI + +#endif Property changes on: main/trunk/src/states_screens/cutscene_gui.hpp ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-24 17:14:40
|
Revision: 11334 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11334&view=rev Author: auria Date: 2012-06-24 17:14:34 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Add the capacity to show subtitles in cutscenes Modified Paths: -------------- main/trunk/src/modes/cutscene_world.cpp main/trunk/src/modes/cutscene_world.hpp main/trunk/src/states_screens/cutscene_gui.cpp main/trunk/src/states_screens/cutscene_gui.hpp main/trunk/src/tracks/track.cpp main/trunk/src/tracks/track.hpp Modified: main/trunk/src/modes/cutscene_world.cpp =================================================================== --- main/trunk/src/modes/cutscene_world.cpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/modes/cutscene_world.cpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -103,7 +103,6 @@ { fprintf(stderr, "[CutsceneWorld] WARNING: cutscene has no duration\n"); } - } // CutsceneWorld //----------------------------------------------------------------------------- @@ -151,6 +150,26 @@ dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(0.0f); } + + float currFrame = m_time * 30.0f; // We assume 30 FPS + const std::vector<Subtitle>& subtitles = m_track->getSubtitles(); + bool foundSubtitle = false; + for (int n = 0; n < subtitles.size(); n++) + { + if (currFrame >= subtitles[n].getFrom() && currFrame < subtitles[n].getTo()) + { + dynamic_cast<CutsceneGUI*>(m_race_gui)->setSubtitle(subtitles[n].getText()); + foundSubtitle = true; + break; + } + } + + if (!foundSubtitle) + { + dynamic_cast<CutsceneGUI*>(m_race_gui)->setSubtitle(core::stringw(L"")); + } + + World::update(dt); World::updateTrack(dt); Modified: main/trunk/src/modes/cutscene_world.hpp =================================================================== --- main/trunk/src/modes/cutscene_world.hpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/modes/cutscene_world.hpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -36,7 +36,6 @@ */ class CutsceneWorld : public World { - scene::ICameraSceneNode* m_camera; std::map<float, std::vector<TrackObject*> > m_sounds_to_trigger; Modified: main/trunk/src/states_screens/cutscene_gui.cpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.cpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/states_screens/cutscene_gui.cpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -16,19 +16,27 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +#include "guiengine/engine.hpp" +#include "guiengine/scalable_font.hpp" #include "graphics/irr_driver.hpp" #include "states_screens/cutscene_gui.hpp" +// ----------------------------------------------------------------------------- + CutsceneGUI::CutsceneGUI() { m_fade_level = 0.0f; } + +// ----------------------------------------------------------------------------- CutsceneGUI::~CutsceneGUI() { } - + +// ----------------------------------------------------------------------------- + void CutsceneGUI::renderGlobal(float dt) { if (m_fade_level > 0.0f) @@ -38,10 +46,21 @@ UserConfigParams::m_width, UserConfigParams::m_height)); } + + if (m_subtitle.size() > 0) + { + core::rect<s32> r(0, UserConfigParams::m_height - GUIEngine::getFontHeight()*2, + UserConfigParams::m_width, UserConfigParams::m_height); + GUIEngine::getFont()->draw(m_subtitle, r, + video::SColor(255,255,255,255), true, true, NULL); + } } +// ----------------------------------------------------------------------------- + void CutsceneGUI::renderPlayerView(const AbstractKart *kart) { } +// ----------------------------------------------------------------------------- Modified: main/trunk/src/states_screens/cutscene_gui.hpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.hpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/states_screens/cutscene_gui.hpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -43,6 +43,7 @@ private: float m_fade_level; + core::stringw m_subtitle; public: @@ -50,6 +51,7 @@ ~CutsceneGUI(); void setFadeLevel(float level) { m_fade_level = level; } + void setSubtitle(const core::stringw& subtitle) { m_subtitle = subtitle; } virtual void renderGlobal(float dt); virtual void renderPlayerView(const AbstractKart *kart); Modified: main/trunk/src/tracks/track.cpp =================================================================== --- main/trunk/src/tracks/track.cpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/tracks/track.cpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -1413,6 +1413,23 @@ { // handled above } + else if (name == "subtitles") + { + std::vector<XMLNode*> subtitles; + node->getNodes("subtitle", subtitles); + for (int i = 0; i < subtitles.size(); i++) + { + int from = -1, to = -1; + std::string subtitle_text; + subtitles[i]->get("from", &from); + subtitles[i]->get("to", &to); + subtitles[i]->get("text", &subtitle_text); + if (from != -1 && to != -1 && subtitle_text.size() > 0) + { + m_subtitles.push_back( Subtitle(from, to, _(subtitle_text.c_str())) ); + } + } + } else { fprintf(stderr, "Warning: while loading track '%s', element '%s' was met but is unknown.\n", Modified: main/trunk/src/tracks/track.hpp =================================================================== --- main/trunk/src/tracks/track.hpp 2012-06-24 16:45:01 UTC (rev 11333) +++ main/trunk/src/tracks/track.hpp 2012-06-24 17:14:34 UTC (rev 11334) @@ -120,6 +120,22 @@ }; +struct Subtitle +{ + int m_from, m_to; + core::stringw m_text; + + Subtitle(int from, int to, core::stringw text) + { + m_from = from; + m_to = to; + m_text = text; + } + int getFrom() const { return m_from; } + int getTo() const { return m_to; } + const core::stringw& getText() const { return m_text; } +}; + /** * \ingroup tracks */ @@ -141,6 +157,8 @@ std::vector<OverworldForceField> m_force_fields; + std::vector<Subtitle> m_subtitles; + /** Start transforms of karts (either the default, or the ones taken * from the scene file). */ AlignedArray<btTransform> m_start_transforms; @@ -484,6 +502,7 @@ const std::vector<OverworldChallenge>& getChallengeList() const { return m_challenges; } + const std::vector<Subtitle>& getSubtitles() const { return m_subtitles; } }; // class Track This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-06-24 16:45:08
|
Revision: 11333 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11333&view=rev Author: wardje Date: 2012-06-24 16:45:01 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Set window manager class hints in Linux. Class and instance set to "SuperTuxKart". Modified Paths: -------------- main/trunk/src/graphics/irr_driver.cpp Modified: main/trunk/src/graphics/irr_driver.cpp =================================================================== --- main/trunk/src/graphics/irr_driver.cpp 2012-06-24 16:40:08 UTC (rev 11332) +++ main/trunk/src/graphics/irr_driver.cpp 2012-06-24 16:45:01 UTC (rev 11333) @@ -62,6 +62,7 @@ namespace X11 { #include <X11/Xlib.h> + #include <X11/Xutil.h> } #endif @@ -354,6 +355,18 @@ #endif } + +#if defined(__linux__) + using namespace X11; + const SExposedVideoData& videoData = m_device->getVideoDriver()->getExposedVideoData(); + XClassHint* classhint = XAllocClassHint(); + classhint->res_name = (char*)"SuperTuxKart"; + classhint->res_class = (char*)"SuperTuxKart"; + XSetClassHint((Display*)videoData.OpenGLLinux.X11Display, + videoData.OpenGLLinux.X11Window, + classhint); + XFree(classhint); +#endif m_scene_manager = m_device->getSceneManager(); m_gui_env = m_device->getGUIEnvironment(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-06-24 16:40:14
|
Revision: 11332 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11332&view=rev Author: wardje Date: 2012-06-24 16:40:08 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Add cutscene_gui.[ch]pp to cmake build system. Fixes compilation. Modified Paths: -------------- main/trunk/sources.cmake Modified: main/trunk/sources.cmake =================================================================== --- main/trunk/sources.cmake 2012-06-24 15:38:17 UTC (rev 11331) +++ main/trunk/sources.cmake 2012-06-24 16:40:08 UTC (rev 11332) @@ -160,6 +160,7 @@ src/states_screens/addons_screen.cpp src/states_screens/arenas_screen.cpp src/states_screens/credits.cpp +src/states_screens/cutscene_gui.cpp src/states_screens/dialogs/add_device_dialog.cpp src/states_screens/dialogs/addons_loading.cpp src/states_screens/dialogs/confirm_resolution_dialog.cpp @@ -419,6 +420,7 @@ src/states_screens/addons_screen.hpp src/states_screens/arenas_screen.hpp src/states_screens/credits.hpp +src/states_screens/cutscene_gui.hpp src/states_screens/dialogs/add_device_dialog.hpp src/states_screens/dialogs/addons_loading.hpp src/states_screens/dialogs/confirm_resolution_dialog.hpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-24 15:38:23
|
Revision: 11331 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11331&view=rev Author: auria Date: 2012-06-24 15:38:17 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Add fade-in/fade-out support to the cutscene Modified Paths: -------------- main/trunk/src/modes/cutscene_world.cpp main/trunk/src/modes/cutscene_world.hpp Added Paths: ----------- main/trunk/src/states_screens/cutscene_gui.cpp main/trunk/src/states_screens/cutscene_gui.hpp Modified: main/trunk/src/modes/cutscene_world.cpp =================================================================== --- main/trunk/src/modes/cutscene_world.cpp 2012-06-24 15:02:50 UTC (rev 11330) +++ main/trunk/src/modes/cutscene_world.cpp 2012-06-24 15:38:17 UTC (rev 11331) @@ -30,8 +30,8 @@ #include "karts/kart_properties.hpp" #include "modes/overworld.hpp" #include "physics/physics.hpp" +#include "states_screens/cutscene_gui.hpp" #include "states_screens/main_menu_screen.hpp" -#include "states_screens/race_gui_base.hpp" #include "tracks/track.hpp" #include "tracks/track_object.hpp" #include "tracks/track_object_manager.hpp" @@ -56,6 +56,8 @@ { World::init(); + dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(1.0f); + m_duration = -1.0f; //const btTransform &s = getTrack()->getStartTransform(0); @@ -136,6 +138,19 @@ { m_time += dt; + if (m_time < 2.0f) + { + dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(1.0f - m_time / 2.0f); + } + else if (m_time > m_duration - 2.0f) + { + dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel((m_time - (m_duration - 2.0f)) / 2.0f); + } + else + { + dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(0.0f); + } + World::update(dt); World::updateTrack(dt); @@ -227,3 +242,12 @@ void CutsceneWorld::moveKartAfterRescue(AbstractKart* kart) { } // moveKartAfterRescue + +//----------------------------------------------------------------------------- + +void CutsceneWorld::createRaceGUI() +{ + m_race_gui = new CutsceneGUI(); +} + + \ No newline at end of file Modified: main/trunk/src/modes/cutscene_world.hpp =================================================================== --- main/trunk/src/modes/cutscene_world.hpp 2012-06-24 15:02:50 UTC (rev 11330) +++ main/trunk/src/modes/cutscene_world.hpp 2012-06-24 15:38:17 UTC (rev 11331) @@ -45,7 +45,7 @@ void abortCutscene() { - m_duration = 0.0f; + m_duration = m_time + 2.0f; } public: @@ -71,10 +71,7 @@ virtual void kartHit(const int kart_id) OVERRIDE; virtual void update(float dt) OVERRIDE; - virtual void createRaceGUI() OVERRIDE - { - m_race_gui = NULL; - } + virtual void createRaceGUI() OVERRIDE; virtual void enterRaceOverState() OVERRIDE; Added: main/trunk/src/states_screens/cutscene_gui.cpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.cpp (rev 0) +++ main/trunk/src/states_screens/cutscene_gui.cpp 2012-06-24 15:38:17 UTC (rev 11331) @@ -0,0 +1,47 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2012 Marianne Gagnon +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 3 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "graphics/irr_driver.hpp" +#include "states_screens/cutscene_gui.hpp" + +CutsceneGUI::CutsceneGUI() +{ + m_fade_level = 0.0f; +} + +CutsceneGUI::~CutsceneGUI() +{ + +} + +void CutsceneGUI::renderGlobal(float dt) +{ + if (m_fade_level > 0.0f) + { + irr_driver->getVideoDriver()->draw2DRectangle(video::SColor(m_fade_level*255, 0,0,0), + core::rect<s32>(0, 0, + UserConfigParams::m_width, + UserConfigParams::m_height)); + } +} + +void CutsceneGUI::renderPlayerView(const AbstractKart *kart) +{ + +} + Added: main/trunk/src/states_screens/cutscene_gui.hpp =================================================================== --- main/trunk/src/states_screens/cutscene_gui.hpp (rev 0) +++ main/trunk/src/states_screens/cutscene_gui.hpp 2012-06-24 15:38:17 UTC (rev 11331) @@ -0,0 +1,63 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2012 Marianne Gagnon +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 3 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef HEADER_RACE_GUI_HPP +#define HEADER_RACE_GUI_HPP + +#include <string> +#include <vector> + +#include <irrString.h> +using namespace irr; + +#include "config/player.hpp" +#include "states_screens/race_gui_base.hpp" +#include "utils/cpp2011.h" + +class AbstractKart; +class InputMap; +class Material; +class RaceSetup; + +/** + * \brief Handles the overlay for cutscenes + * \ingroup states_screens + */ +class CutsceneGUI : public RaceGUIBase +{ +private: + + float m_fade_level; + +public: + + CutsceneGUI(); + ~CutsceneGUI(); + + void setFadeLevel(float level) { m_fade_level = level; } + + virtual void renderGlobal(float dt); + virtual void renderPlayerView(const AbstractKart *kart); + + virtual const core::dimension2du getMiniMapSize() const OVERRIDE + { + return core::dimension2du(1,1); + } +}; // RaceGUI + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-24 15:02:57
|
Revision: 11330 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11330&view=rev Author: auria Date: 2012-06-24 15:02:50 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Fix unsmooth camera movement in the cutscene Modified Paths: -------------- main/trunk/src/modes/cutscene_world.cpp Modified: main/trunk/src/modes/cutscene_world.cpp =================================================================== --- main/trunk/src/modes/cutscene_world.cpp 2012-06-24 01:39:49 UTC (rev 11329) +++ main/trunk/src/modes/cutscene_world.cpp 2012-06-24 15:02:50 UTC (rev 11330) @@ -136,18 +136,6 @@ { m_time += dt; - /* - if (m_time > m_duration) - { - printf("DONE!\n"); - - race_manager->exitRace(); - StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); - //OverWorld::enterOverWorld(); - return; - } - */ - World::update(dt); World::updateTrack(dt); @@ -158,11 +146,14 @@ if (curr->getType() == "cutscene_camera") { m_camera->setPosition(curr->getNode()->getPosition()); + m_camera->updateAbsolutePosition(); core::vector3df rot = curr->getNode()->getRotation(); Vec3 rot2(rot); rot2.setPitch(rot2.getPitch() + 90.0f); m_camera->setRotation(rot2.toIrrVector()); + + break; //printf("Camera %f %f %f\n", curr->getNode()->getPosition().X, curr->getNode()->getPosition().Y, curr->getNode()->getPosition().Z); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-24 01:39:56
|
Revision: 11329 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11329&view=rev Author: auria Date: 2012-06-24 01:39:49 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Allow skipping the cutscene Modified Paths: -------------- main/trunk/src/input/input_manager.cpp main/trunk/src/modes/cutscene_world.hpp main/trunk/src/modes/world.cpp main/trunk/src/modes/world.hpp main/trunk/src/states_screens/state_manager.cpp Modified: main/trunk/src/input/input_manager.cpp =================================================================== --- main/trunk/src/input/input_manager.cpp 2012-06-24 01:22:42 UTC (rev 11328) +++ main/trunk/src/input/input_manager.cpp 2012-06-24 01:39:49 UTC (rev 11329) @@ -93,6 +93,13 @@ static bool control_is_pressed = false; World *world = World::getWorld(); + // When no players... a cutscene + if (race_manager->getNumPlayers() == 0 && world != NULL && value > 0 && + (key == KEY_SPACE || key == KEY_RETURN)) + { + world->onFirePressed(NULL); + } + switch (key) { #ifdef DEBUG Modified: main/trunk/src/modes/cutscene_world.hpp =================================================================== --- main/trunk/src/modes/cutscene_world.hpp 2012-06-24 01:22:42 UTC (rev 11328) +++ main/trunk/src/modes/cutscene_world.hpp 2012-06-24 01:39:49 UTC (rev 11329) @@ -43,6 +43,11 @@ float m_duration; + void abortCutscene() + { + m_duration = 0.0f; + } + public: CutsceneWorld(); @@ -73,6 +78,10 @@ virtual void enterRaceOverState() OVERRIDE; + virtual void onFirePressed(Controller* who) OVERRIDE { abortCutscene(); } + + virtual void escapePressed() OVERRIDE { abortCutscene(); } + }; // CutsceneWorld Modified: main/trunk/src/modes/world.cpp =================================================================== --- main/trunk/src/modes/world.cpp 2012-06-24 01:22:42 UTC (rev 11328) +++ main/trunk/src/modes/world.cpp 2012-06-24 01:39:49 UTC (rev 11329) @@ -51,9 +51,10 @@ #include "race/race_manager.hpp" #include "replay/replay_play.hpp" #include "replay/replay_recorder.hpp" -#include "states_screens/state_manager.hpp" +#include "states_screens/dialogs/race_paused_dialog.hpp" #include "states_screens/race_gui_base.hpp" #include "states_screens/race_gui.hpp" +#include "states_screens/state_manager.hpp" #include "states_screens/minimal_race_gui.hpp" #include "states_screens/race_result_gui.hpp" #include "tracks/track.hpp" @@ -993,4 +994,11 @@ m_self_destruct = true; } +//----------------------------------------------------------------------------- + +void World::escapePressed() +{ + new RacePausedDialog(0.8f, 0.6f); +} + /* EOF */ Modified: main/trunk/src/modes/world.hpp =================================================================== --- main/trunk/src/modes/world.hpp 2012-06-24 01:22:42 UTC (rev 11328) +++ main/trunk/src/modes/world.hpp 2012-06-24 01:39:49 UTC (rev 11329) @@ -297,6 +297,8 @@ virtual bool useChecklineRequirements() const { return false; } // ------------------------------------------------------------------------ void delayedSelfDestruct(); + // ------------------------------------------------------------------------ + virtual void escapePressed(); }; // World Modified: main/trunk/src/states_screens/state_manager.cpp =================================================================== --- main/trunk/src/states_screens/state_manager.cpp 2012-06-24 01:22:42 UTC (rev 11328) +++ main/trunk/src/states_screens/state_manager.cpp 2012-06-24 01:39:49 UTC (rev 11329) @@ -30,7 +30,6 @@ #include "main_loop.hpp" #include "modes/profile_world.hpp" #include "modes/world.hpp" -#include "states_screens/dialogs/race_paused_dialog.hpp" #include "utils/translation.hpp" using namespace GUIEngine; @@ -175,7 +174,7 @@ { if(World::getWorld()->getPhase()!=WorldStatus::RESULT_DISPLAY_PHASE && !ProfileWorld::isProfileMode()) - new RacePausedDialog(0.8f, 0.6f); + World::getWorld()->escapePressed(); } // In menus else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-06-24 01:22:49
|
Revision: 11328 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11328&view=rev Author: auria Date: 2012-06-24 01:22:42 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Continue after cutscene Modified Paths: -------------- main/trunk/src/animations/animation_base.hpp main/trunk/src/modes/cutscene_world.cpp main/trunk/src/modes/cutscene_world.hpp Modified: main/trunk/src/animations/animation_base.hpp =================================================================== --- main/trunk/src/animations/animation_base.hpp 2012-06-23 20:01:12 UTC (rev 11327) +++ main/trunk/src/animations/animation_base.hpp 2012-06-24 01:22:42 UTC (rev 11328) @@ -33,6 +33,8 @@ #include "tracks/track_object.hpp" #include "utils/ptr_vector.hpp" +#include <algorithm> + class XMLNode; /** @@ -82,6 +84,21 @@ /** Disables or enables an animation. */ void setPlaying(bool playing) {m_playing = playing; } + // ------------------------------------------------------------------------ + + float getAnimationDuration() const + { + float duration = -1; + + const Ipo* currIpo; + for_in (currIpo, m_all_ipos) + { + duration = std::max(duration, currIpo->getEndTime()); + } + + return duration; + } + }; // AnimationBase #endif Modified: main/trunk/src/modes/cutscene_world.cpp =================================================================== --- main/trunk/src/modes/cutscene_world.cpp 2012-06-23 20:01:12 UTC (rev 11327) +++ main/trunk/src/modes/cutscene_world.cpp 2012-06-24 01:22:42 UTC (rev 11328) @@ -21,13 +21,16 @@ #include <IMeshSceneNode.h> #include <ISceneManager.h> +#include "animations/animation_base.hpp" #include "audio/music_manager.hpp" #include "graphics/irr_driver.hpp" #include "io/file_manager.hpp" #include "karts/abstract_kart.hpp" #include "karts/kart_model.hpp" #include "karts/kart_properties.hpp" +#include "modes/overworld.hpp" #include "physics/physics.hpp" +#include "states_screens/main_menu_screen.hpp" #include "states_screens/race_gui_base.hpp" #include "tracks/track.hpp" #include "tracks/track_object.hpp" @@ -52,6 +55,9 @@ void CutsceneWorld::init() { World::init(); + + m_duration = -1.0f; + //const btTransform &s = getTrack()->getStartTransform(0); //const Vec3 &v = s.getOrigin(); m_camera = irr_driver->getSceneManager() @@ -84,7 +90,18 @@ m_sounds_to_trigger[frame / FPS].push_back(curr); } } + + if (dynamic_cast<AnimationBase*>(curr) != NULL) + { + m_duration = std::max(m_duration, dynamic_cast<AnimationBase*>(curr)->getAnimationDuration()); + } } + + if (m_duration <= 0.0f) + { + fprintf(stderr, "[CutsceneWorld] WARNING: cutscene has no duration\n"); + } + } // CutsceneWorld //----------------------------------------------------------------------------- @@ -118,6 +135,19 @@ void CutsceneWorld::update(float dt) { m_time += dt; + + /* + if (m_time > m_duration) + { + printf("DONE!\n"); + + race_manager->exitRace(); + StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); + //OverWorld::enterOverWorld(); + return; + } + */ + World::update(dt); World::updateTrack(dt); @@ -157,11 +187,20 @@ } // update //----------------------------------------------------------------------------- + +void CutsceneWorld::enterRaceOverState() +{ + race_manager->exitRace(); + StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); + OverWorld::enterOverWorld(); +} + +//----------------------------------------------------------------------------- /** The battle is over if only one kart is left, or no player kart. */ bool CutsceneWorld::isRaceOver() { - return false; + return m_time > m_duration; } // isRaceOver //----------------------------------------------------------------------------- Modified: main/trunk/src/modes/cutscene_world.hpp =================================================================== --- main/trunk/src/modes/cutscene_world.hpp 2012-06-23 20:01:12 UTC (rev 11327) +++ main/trunk/src/modes/cutscene_world.hpp 2012-06-24 01:22:42 UTC (rev 11328) @@ -40,6 +40,8 @@ scene::ICameraSceneNode* m_camera; std::map<float, std::vector<TrackObject*> > m_sounds_to_trigger; + + float m_duration; public: @@ -68,6 +70,8 @@ { m_race_gui = NULL; } + + virtual void enterRaceOverState() OVERRIDE; }; // CutsceneWorld This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |