Fixed minor bugs

Signed-off-by: Gregory PLANCHAT <g.planchat@gmail.com>
This commit is contained in:
Gregory PLANCHAT 2012-03-25 18:35:28 +02:00
commit 422f2c1295
23 changed files with 223 additions and 63 deletions

View file

@ -37,7 +37,7 @@
class Legacies_Empire_Block_Planet_ResearchLab_Queue_Item
extends Wootook_Empire_Block_Planet_Builder_Queue_ItemAbstract
{
protected $_itemIdField = 'research_id';
protected $_itemIdField = 'technology_id';
public function getLevel()
{
@ -49,11 +49,6 @@ class Legacies_Empire_Block_Planet_ResearchLab_Queue_Item
return $this->getPlanet()->getResearchLab()->getResourcesNeeded($this->getItemId(), $this->getQueuedLevel() + 1);
}
public function getItemQueuedLevel()
{
return $this->getItem()->getData('level');
}
public function getQueuedLevel()
{
return $this->getPlanet()->getResearchLab()->getResearchLevelQueued($this->getItemId());
@ -70,7 +65,7 @@ class Legacies_Empire_Block_Planet_ResearchLab_Queue_Item
->getResearchTime($this->getItemId(), $this->getItemQueuedLevel());
$item = $this->getItem();
return $item->getData('created_at') - $item->getData('updated_at') + $totalTime;
return $totalTime - ($item->getData('created_at') - $item->getData('updated_at'));
}
public function getResourcesConfigForLevel($level)

View file

@ -99,6 +99,10 @@ class Legacies_Empire_Block_Planet_Shipyard
{
$types = Wootook_Empire_Helper_Config_Types::getSingleton();
if (!$this->getPlanet() || !$this->getPlanet()->getShipyard()) {
return $this;
}
/** @var Wootook_Core_Block_Concat $parentBlock */
$parentBlock = $this->getLayout()->getBlock('item-list.items');
foreach ($types->getData($this->getType()) as $itemId) {

View file

@ -37,9 +37,9 @@
class Legacies_Empire_Block_Planet_Shipyard_Queue_Item
extends Wootook_Empire_Block_Planet_Builder_Queue_ItemAbstract
{
protected $_itemIdField = 'research_id';
protected $_itemIdField = 'ship_id';
public function getLevel()
public function getQty()
{
return $this->getPlanet()->getElement($this->getItemId());
}
@ -49,12 +49,26 @@ class Legacies_Empire_Block_Planet_Shipyard_Queue_Item
return $this->getPlanet()->getShipyard()->getResourcesNeeded($this->getItemId(), 1);
}
public function getItemQueuedQty()
{
return $this->getItem()->getData('qty');
}
public function getBuildingTime($qty)
{
return $this->getPlanet()->getShipyard()->getBuildingTime($this->getItemId(), $qty);
}
public function getResourcesConfigForLevel($qty)
public function getBuildingRemainingTime()
{
$totalTime = $this->getPlanet()->getShipyard()
->getBuildingTime($this->getItemId(), $this->getItemQueuedQty());
$item = $this->getItem();
return $totalTime - ($item->getData('created_at') - $item->getData('updated_at'));
}
public function getResourcesConfigForQty($qty)
{
$resources = $this->getResourcesNeeded($qty);

View file

@ -11,6 +11,12 @@ class Legacies_Empire_Controller_DefenseController
{
public function preDispatch()
{
parent::preDispatch();
if ($this->getResponse()->isDispatched()) {
return;
}
$planet = $this->getCurrentPlanet();
if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) {

View file

@ -11,6 +11,12 @@ class Legacies_Empire_Controller_ResearchLabController
{
public function preDispatch()
{
parent::preDispatch();
if ($this->getResponse()->isDispatched()) {
return;
}
$planet = $this->getCurrentPlanet();
if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) {

View file

@ -11,6 +11,12 @@ class Legacies_Empire_Controller_ShipyardController
{
public function preDispatch()
{
parent::preDispatch();
if ($this->getResponse()->isDispatched() || $this->getResponse()->isRedirect()) {
return;
}
$planet = $this->getCurrentPlanet();
if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) {

View file

@ -36,17 +36,16 @@
class Legacies_Empire_Model_Planet_Building_NaniteFactory
implements Wootook_Empire_Model_Planet_BuildingInterface
{
public static function buildingTimeListener($event)
public static function buildingEnhancementListener(Wootook_Core_Event $event)
{
/** @var float $enhancement */
$enhancement = $event->getData('enhancement');
/** @var Wootook_Empire_Model_Planet $planet */
$planet = $event->getData('planet');
if (!$planet->getId() || ($level = $planet->getElement(Legacies_Empire::ID_BUILDING_NANITE_FACTORY)) <= 0) {
return;
}
$level = $planet->getElement(Legacies_Empire::ID_BUILDING_NANITE_FACTORY);
$time = $event->getData('time');
$speedFactor = pow(2, $level);
$event->setData('time', $time / $speedFactor);
$event->setData('enhancement', $enhancement * pow(.5, $level));
}
}

View file

@ -45,6 +45,11 @@ class Legacies_Empire_Model_Planet_Building_ResearchLab_Builder
*/
protected $_maxLength = 0;
/**
* @var float
*/
protected $_speedEnhancement = null;
public function init()
{
$this->_unserializeQueue($this->_currentPlanet->getData(self::FIELD_SERIALIZED));
@ -91,6 +96,21 @@ class Legacies_Empire_Model_Planet_Building_ResearchLab_Builder
));
}
public function getSpeedEnhancement()
{
if ($this->_speedEnhancement === null) {
$event = Wootook::dispatchEvent('planet.research-lab.technology.speed-enhancement', array(
'player' => $this->_currentPlanet,
'planet' => $this->_currentPlanet,
'enhancement' => 1
));
$this->_speedEnhancement = $event->getData('enhancement');
}
return $this->_speedEnhancement;
}
/**
* Check if a technology type is actually buildable on the current
* planet, depending on the technology and buildings requirements.
@ -128,7 +148,8 @@ class Legacies_Empire_Model_Planet_Building_ResearchLab_Builder
if ($speedFactor == null) {
$speedFactor = 1;
}
$baseTime = $levelTime / ($speedFactor * 3600);
$baseTime = ($levelTime * 3600 / $speedFactor) / $this->getSpeedEnhancement();
Math::setPrecision();

View file

@ -36,17 +36,16 @@
class Legacies_Empire_Model_Planet_Building_RoboticFactory
implements Wootook_Empire_Model_Planet_BuildingInterface
{
public static function buildingTimeListener($event)
public static function buildingEnhancementListener(Wootook_Core_Event $event)
{
/** @var float $enhancement */
$enhancement = $event->getData('enhancement');
/** @var Wootook_Empire_Model_Planet $planet */
$planet = $event->getData('planet');
if (!$planet->getId() || ($level = $planet->getElement(Legacies_Empire::ID_BUILDING_ROBOTIC_FACTORY)) <= 0) {
return;
}
$level = $planet->getElement(Legacies_Empire::ID_BUILDING_ROBOTIC_FACTORY);
$time = $event->getData('time');
$speedFactor = 1 + $level;
$event->setData('time', $time / $speedFactor);
$event->setData('enhancement', $enhancement * (2 / (1 + $level)));
}
}

View file

@ -42,6 +42,11 @@ class Legacies_Empire_Model_Planet_Building_Shipyard_Builder
*/
protected $_maxLength = 0;
/**
* @var float
*/
protected $_speedEnhancement = null;
public function init()
{
$this->_unserializeQueue($this->_currentPlanet->getData('b_hangar_id'));
@ -79,6 +84,21 @@ class Legacies_Empire_Model_Planet_Building_Shipyard_Builder
));
}
public function getSpeedEnhancement()
{
if ($this->_speedEnhancement === null) {
$event = Wootook::dispatchEvent('planet.shipyard.speed-enhancement', array(
'player' => $this->_currentPlanet,
'planet' => $this->_currentPlanet,
'enhancement' => 1
));
$this->_speedEnhancement = $event->getData('enhancement');
}
return $this->_speedEnhancement;
}
/**
* Check if a ship or defense type is actually buildable on the current
* planet, depending on the technology and buildings requirements.
@ -187,8 +207,8 @@ class Legacies_Empire_Model_Planet_Building_Shipyard_Builder
Math::setPrecision(50);
$buildingTime = Math::mul($prices[$shipId][Legacies_Empire::BASE_BUILDING_TIME], $qty);
$speedFactor = Wootook::getGameConfig('game/speed/general');
$baseTime = Math::div($buildingTime, $speedFactor);
$speedFactor = Wootook::getGameConfig('game/speed/ships') / 1000;
$baseTime = ($buildingTime / 5000) * 3600 / $speedFactor / $this->getSpeedEnhancement();
Math::setPrecision();

View file

@ -0,0 +1,46 @@
<?php
/**
* Created by JetBrains PhpStorm.
* User: Greg
* Date: 25/03/12
* Time: 11:05
* To change this template use File | Settings | File Templates.
*/
class Legacies_Empire_Model_Player_Technology_IntergalacticResearchNetwork
implements Wootook_Empire_Model_Player_TechnologyInterface
{
public static function researchTechnologyEnhancementListener(Wootook_Core_Event $event)
{
/** @var float $enhancement */
$enhancement = $event->getData('enhancement');
/** @var Wootook_Empire_Model_Planet $planet */
$planet = $event->getData('planet');
/** @var Wootook_Player_Model_Entity $player */
$player = $event->getData('player');
$virtualLevel = 1 + $planet->getElement(Legacies_Empire::ID_BUILDING_RESEARCH_LAB);
if (($network = $player->getElement(Legacies_Empire::ID_RESEARCH_INTERGALACTIC_RESEARCH_NETWORK)) > 0) {
$planetCollection = $player->getPlanetCollection(Wootook_Empire_Model_Planet::TYPE_PLANET);
$fields = Wootook_Empire_Helper_Config_FieldsAlias::getSingleton();
$planetCollection->addFieldToFilter('id', array(array('nin' => $planet->getId())))
->addOrderBy($fields[Legacies_Empire::ID_BUILDING_RESEARCH_LAB], 'DESC')
->setPageSize($network)
;
$select = $planetCollection->getSelect();
$select->reset(Wootook_Core_Database_Sql_Select::COLUMNS);
$select->column(array('count' => new Wootook_Core_Database_Sql_Placeholder_Expression(
"COUNT({$select->quote($fields[Legacies_Empire::ID_BUILDING_RESEARCH_LAB])})")));
$statement = $select->prepare();
$virtualLevel += $statement->fetchColumn();
}
$event->setData('enhancement', $enhancement * $virtualLevel);
}
}

View file

@ -123,7 +123,7 @@ class Wootook_Core_Database_Statement_Pdo_Mysql
* @param int $col
* @return mixed
*/
public function fetchColumn($col)
public function fetchColumn($col = 0)
{
try {
return $this->_handler->fetchColumn($col);

View file

@ -74,7 +74,7 @@ abstract class Wootook_Core_Database_Statement_Statement
* @param int $col
* @return mixed
*/
abstract public function fetchColumn($col);
abstract public function fetchColumn($col = 0);
/**
*

View file

@ -201,6 +201,9 @@ class Wootook_Core_Mvc_Controller_Front
if (!$this->_response->isDispatched()) {
continue;
}
if ($this->_response->isRedirect()) {
break;
}
$controller->$actionMethod();
@ -210,7 +213,7 @@ class Wootook_Core_Mvc_Controller_Front
$controller->postDispatch();
if ($this->_response->isDispatched()) {
if ($this->_response->isDispatched() || $this->_response->isRedirect()) {
break;
}
}

View file

@ -3,6 +3,8 @@
class Wootook_Core_Mvc_Controller_Response_Http
extends Wootook_Core_Mvc_Controller_Response_Response
{
const STATUS_OK = 200;
const REDIRECT_MOVED_PERMANENTLY = 301;
const REDIRECT_FOUND = 302;
const REDIRECT_SEE_OTHER = 303;
@ -15,6 +17,8 @@ class Wootook_Core_Mvc_Controller_Response_Http
self::REDIRECT_TEMPORARY => 'Temporary Redirect'
);
protected $_returnCode = self::STATUS_OK;
public function setBody($data)
{
$this->clearBody();
@ -106,12 +110,9 @@ class Wootook_Core_Mvc_Controller_Response_Http
return $this;
}
public function setIsRedirect($value = null)
public function isRedirect()
{
if (is_bool($value)) {
$this->_data['is_redirect'] = $value;
}
return $this->_data['is_redirect'];
return $this->_returnCode >= 300 && $this->_returnCode < 400;
}
public function setCookie($name, $value, $lifetime = null, $path = null, $domain = null)
@ -139,10 +140,11 @@ class Wootook_Core_Mvc_Controller_Response_Http
$code = self::REDIRECT_FOUND;
}
$this->_returnCode = $code;
$statusText = self::$_redirectCodes[$code];
$this->setRawHeader("HTTP/1.1 {$code} {$statusText}")
->setHeader('Location', $url)
->setIsRedirect(true);
->setHeader('Location', $url);
return $this;
}

View file

@ -44,6 +44,11 @@ class Wootook_Empire_Model_Planet_Builder_Builder
*/
protected $_maxLength = 0;
/**
* @var float
*/
protected $_speedEnhancement = null;
public function init()
{
$this->_unserializeQueue($this->_currentPlanet->getData(self::FIELD_SERIALIZED));
@ -90,6 +95,21 @@ class Wootook_Empire_Model_Planet_Builder_Builder
));
}
public function getSpeedEnhancement()
{
if ($this->_speedEnhancement === null) {
$event = Wootook::dispatchEvent('planet.building.speed-enhancement', array(
'player' => $this->_currentPlanet,
'planet' => $this->_currentPlanet,
'enhancement' => 1
));
$this->_speedEnhancement = $event->getData('enhancement');
}
return $this->_speedEnhancement;
}
/**
* Check if a building is actually buildable on the current planet,
* depending on the technology and buildings requirements.
@ -128,7 +148,7 @@ class Wootook_Empire_Model_Planet_Builder_Builder
if ($speedFactor == null) {
$speedFactor = 1;
}
$baseTime = $levelTime / $speedFactor * 3600;
$baseTime = Math::div($levelTime, 3600 / ($speedFactor * $this->getSpeedEnhancement()));
Math::setPrecision();

View file

@ -0,0 +1,5 @@
<?php
interface Wootook_Empire_Model_Player_TechnologyInterface
{
}

View file

@ -394,6 +394,9 @@ class Wootook_Player_Model_Entity
if (!$planetId) {
$this->_currentPlanet = $this->getHomePlanet();
if ($this->_currentPlanet === null) {
return null;
}
$this->setData('current_planet', $this->_currentPlanet->getId())->save();
return $this->_currentPlanet;

View file

@ -47,7 +47,8 @@
),
'game' => array(
'speed' => array(
'general' => 1000
'general' => 1000,
'ships' => 1000
),
'home' => array(
'title' => 'Welcome on Wootook!',

View file

@ -1 +1,6 @@
<?php
<?php if (!$this->isEmpty()):?>
<div class="building queue">
<h1><?php echo $this->__('Work in progress')?></h1>
<?php echo $this->getPartial('item-list')->render() ?>
</div>
<?php endif?>

View file

@ -0,0 +1,8 @@
<?php /** @var Legacies_Core_Block_Template $this */?>
<div class="item queue">
<p>
<a href="<?php echo $this->getItemInfoUrl()?>" class="image"><img src="<?php echo $this->getItemImageUrl()?>" alt="" width="30" height="30" /></a>
<a href="<?php echo $this->getItemInfoUrl()?>"><?php echo $this->escape($this->getName())?></a> (<?php echo $this->renderNumber($this->getItemQueuedQty())?>)
</p>
<p class="time"><?php echo $this->__('Lasts %s', $this->renderTime($this->getBuildingRemainingTime()))?></p>
</div>

View file

@ -23,12 +23,17 @@
'planet.shipyard.update-queue.after' => array(),
'planet.shipyard.append-queue.before' => array(),
'planet.shipyard.append-queue.after' => array(),
'planet.building.building-time' => array(
array('Legacies_Empire_Model_Planet_Building_NaniteFactory', 'buildingTimeListener'),
array('Legacies_Empire_Model_Planet_Building_RoboticFactory', 'buildingTimeListener')
'planet.building.building-time' => array(),
'planet.shipyard.building-time' => array(),
'planet.building.speed-enhancement' => array(
array('Legacies_Empire_Model_Planet_Building_NaniteFactory', 'buildingEnhancementListener'),
array('Legacies_Empire_Model_Planet_Building_RoboticFactory', 'buildingEnhancementListener')
),
'planet.shipyard.building-time' => array(
array('Legacies_Empire_Model_Planet_Building_NaniteFactory', 'buildingTimeListener'),
array('Legacies_Empire_Model_Planet_Building_RoboticFactory', 'buildingTimeListener')
'planet.shipyard.speed-enhancement' => array(
array('Legacies_Empire_Model_Planet_Building_NaniteFactory', 'buildingEnhancementListener'),
array('Legacies_Empire_Model_Planet_Building_RoboticFactory', 'buildingEnhancementListener')
),
'planet.research-lab.technology.speed-enhancement' => array(
array('Legacies_Empire_Model_Player_Technology_IntergalacticResearchNetwork', 'researchTechnologyEnhancementListener')
)
);

View file

@ -82,15 +82,7 @@ function __autoload($class) {
}
Wootook::$isInstalled = false;
/*
$website = new Wootook_Core_Model_Website();
$website->setId(1)->setData('code', Wootook_Core_Model_Website::DEFAULT_CODE);
Wootook::setWebsite(1, $website);
$game = new Wootook_Core_Model_Game();
$game->setId(1)->setData('website_id', $website->getId())->setData('code', Wootook_Core_Model_Game::DEFAULT_CODE);
Wootook::setGame(1, $game);
*/
include ROOT_PATH . 'includes' . DIRECTORY_SEPARATOR . 'constants.php';
Wootook_Core_ErrorProfiler::register();