mourne_rcpp_fw/Mourne-CI/application/controllers/building.php

693 lines
18 KiB
PHP
Executable File

<?php
class Building extends MO_Controller
{
public function __construct()
{
parent::__construct();
}
public function index($id)
{
$this->load->helper('url');
redirect('building/stats/' .$id);
}
public function stats($slotid = 0)
{
if (!$slotid) {
$this->load->helper($url);
redirect('village/selected');
}
$this->headers('do', $slotid);
if ($this->building['id'] == 1) {
$this->load->helper('url');
redirect('building/build');
}
if ($this->building['id'] == 2) {
//build_in_progress
$this->headers('build_in_progress');
$event = $this->_filter_events('type', 'slotid', $slotid, 0, true);
$data['event'] = $event;
$data['building'] = $this->building_model->get_building($event['data1']);
$this->load->view('building/header', $data);
$this->load->view('building/spacer');
$this->load->view('building/next_event', $data);
$this->load->view('building/stats', $data);
$this->footer();
return;
}
$this->headers('building', $slotid);
$data['slotid'] = $slotid;
$this->load->view('building/stats', $data);
$this->footer();
}
public function upgrade($slotid = 0)
{
if (!$slotid) {
$this->load->helper('url');
redirect('village/selected');
}
$this->headers('building', $slotid);
$event = $this->_filter_events('type', 'slot', $slotid, 1);
$up['slotid'] = $slotid;
if ($this->building['next_rank']) {
$up['slotid'] = $slotid;
$up['nextrank'] = $this->building_model->get_building(
$this->building['next_rank']
);
$up['upgrade'] = $this->building_model->can_be_upgraded(
$event,
$this->resources,
$up['nextrank'],
$this->villageid
);
}
$this->load->view('building/upgrade', $up);
$this->footer();
}
public function create($slotid = 0)
{
if (!$slotid) {
$this->load->helper($url);
redirect('village/selected');
}
$this->headers('building', $slotid);
//can create something
if ($this->building['creates']) {
$events = $this->_filter_events('type', 'all', $slotid, 2);
$this->load->model('unit_model');
$data['unit'] = $this->unit_model->get_unit($this->building['creates']);
if ($data['unit']['cost_unit']) {
$data['costu'] = $this->unit_model->get_unit(
$data['unit']['cost_unit']
);
} else {
$data['costu'] = false;
}
$this->load->model('resource_model');
//This should be one function
$data['maxunit'] = $this->resource_model->calc_max_unit(
$data['unit'],
$this->building['num_creates'],
$this->resources
);
$data['maxunit'] = $this->unit_model->calc_max_unit_ev(
$this->building['num_creates'],
$data['maxunit'],
$events
);
if ($events) {
$d['event'] = $events;
$this->load->view('building/events', $d);
}
}
$data['building'] = $this->building;
$this->load->view('building/building_create', $data);
$this->footer();
}
public function assign($slotid)
{
if (!$slotid) {
$this->load->helper($url);
redirect('village/selected');
}
$this->headers('building', $slotid);
//have assignments
$this->load->model('assignment_model');
$assign = $this->assignment_model->get_assignments(
$slotid,
$this->villageid,
$this->userid
);
$assign['slotid'] = $slotid;
$this->load->view('building/assignments', $assign);
$this->footer();
}
public function spells($slotid)
{
if (!$slotid) {
$this->load->helper($url);
redirect('village/selected');
}
$this->headers('building', $slotid);
$this->load->model('spell_model');
$spell['spells'] = $this->spell_model->get_spells(
$slotid,
$this->villageid
);
$spell['slotid'] = $slotid;
$this->load->view('building/spells', $spell);
$this->footer();
}
public function events($slotid = 0)
{
if (!$slotid) {
$this->load->helper($url);
redirect('village/selected');
}
$this->headers('building', $slotid);
//$this->load->model('event_model');
//$data['event'] = $this->event_model->get_events($slotid,
// $this->villageid);
$data['event'] = $this->_filter_events('all', 'slot', $slotid);
$this->load->view('building/events', $data);
$this->footer();
}
public function research($slotid = 0)
{
if (!$slotid) {
$this->load->helper('url');
redirect('village/selected');
}
$this->headers('building', $slotid);
$events = $this->_filter_events('type', 'slot', $slotid, 4);
if (!$events) {
$this->load->model('technology_model');
$data = $this->technology_model->get_researchable(
$slotid,
$this->villageid
);
$data['slotid'] = $slotid;
$this->load->view('building/research', $data);
} else {
$this->load->model('technology_model');
$data['technology'] = $this->technology_model->get_technology($events[0]['data1']);
$this->load->view('building/al_research', $data);
}
$this->footer();
}
public function build($slotid = 0)
{
if (!$slotid) {
$this->load->helper('url');
redirect('village/selected');
}
$this->load->model('building_model');
$this->_get_slot_building($slotid);
$this->headers('build');
if ($this->building['id'] == 1) {
//empty space
$data['buildings'] = $this->building_model->building_list(
$this->villageid
);
$data['slotid'] = $slotid;
$this->load->view('building/list', $data);
} else {
//slot has some building
$this->load->helper('url');
redirect('building/stats/' . $slotid);
}
$this->footer();
}
public function dobuild()
{
$this->load->helper('url');
$slotid = $this->input->post('slotid');
$buildingid = $this->input->post('id');
if (!$slotid || !$buildingid) {
redirect('village/selected');
}
$this->headers('do');
$this->load->model('building_model');
//$this->load->model('event_model');
$this->load->model('resource_model');
//check if building exists
if (!$this->building_model->is_valid_slot($slotid, $this->villageid)) {
//display error page
echo "is_valid_slot returned FALSE";
return;
}
$building = $this->building_model->get_building($buildingid);
if (!$this->building_model->check_resources($this->resources, $building)) {
//display error page
echo "You don't have enough resources";
return;
}
/*
//do this matters? maybe it should be removed.
if ($this->event_model->has_event($slotid, $this->villageid))
{
//display error page
echo "has_event returned TRUE";
return;
}
*/
/* this probably aren't needed
if (!$this->building_model->can_build($this->villageid, $buildingid))
{
//display an error page
echo "can_build returned FALSE";
return;
}
*/
//can be built
if (!$this->building_model->has_req_tech($building['req_tech'], $this->villageid)) {
echo "Technology requirements not met.";
return;
}
//add_event
$this->load->helper('event');
$ev['type'] = ev_type('build');
$ev['villageid'] = $this->villageid;
$ev['slotid'] = $slotid;
$ev['time'] = $building['time_to_build'];
$ev['data1'] = $buildingid;
$this->event_model->add_event($ev);
//resource substract
$this->resource_model->set_resources($this->resources);
$this->resource_model->substract_resources(
$building,
$this->villageid
);
$this->resource_model->write_resources();
//change tile to build in progress
$this->building_model->set_build_in_progress($slotid, $this->villageid);
$url = 'building/stats/' . $slotid;
redirect($url);
}
public function docreate($slotid)
{
$this->load->library('form_validation');
$this->form_validation->set_rules(
'create_num',
'Number to create',
'is_natural_no_zero'
);
$this->load->helper('url');
$url = 'building/create/' . $slotid;
$this->headers('do', $slotid);
if ($this->form_validation->run()) {
$num_create = $this->input->post('create_num');
if (!$num_create) {
redirect($url);
}
$this->load->model('building_model');
$building = $this->building;
$this->headers('do');
if ($building['id'] == 1 || $building['id'] == 2) {
//TODO show proper error
echo "There isn't any building in that slot";
return;
}
if (!$building['creates']) {
//TODO show proper error
echo "that building can't create units";
return;
}
$event = $this->_filter_events('type', 'slot', $slotid, 2);
$this->load->model('resource_model');
$res = $this->resources;
$this->load->model('unit_model');
$unit = $this->unit_model->get_unit($building['creates']);
$max = $this->resource_model->calc_max_unit(
$unit,
$building['num_creates'],
$res
);
$max = $this->unit_model->calc_max_unit_ev(
$building['num_creates'],
$max,
$event
);
if (!$max) {
//TODO proper error
echo "You can't make any";
return;
}
if ($num_create > $max) {
//TODO proper error
echo "You can't make that many";
return;
}
//add event
$this->load->helper('event');
$ev['type'] = ev_type('create');
$ev['villageid'] = $this->villageid;
$ev['slotid'] = $slotid;
$ev['time'] = ($unit['time_to_create'] * $num_create);
$ev['data1'] = $unit['id'];
$ev['data2'] = $num_create;
$this->event_model->add_event($ev);
$this->resource_model->set_resources($this->resources);
$this->resource_model->substract_resources(
$unit,
$this->villageid,
$num_create
);
$this->resource_model->write_resources();
redirect($url);
} else {
redirect($url);
}
}
public function doupgrade()
{
$this->headers('do');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('slotid', 'Slotid', 'is_natural');
if ($this->form_validation->run()) {
$this->load->model('event_model');
$this->load->model('resource_model');
$this->load->model('building_model');
$slotid = $this->input->post('slotid');
$this->headers('do', $slotid);
$building = $this->building;
if (!$building['next_rank']) {
echo "Building doesn't have next rank.";
return;
}
$next_rank = $this->building_model->get_building($building['next_rank']);
$res = $this->resources;
$event = $this->_filter_events('type', 'slot', $slotid, 1);
$can = $this->building_model->can_be_upgraded(
$event,
$res,
$next_rank,
$this->villageid
);
if ($can == 3) {
//can be upgraded
$this->load->helper('event');
$ev['type'] = ev_type('upgrade');
$ev['villageid'] = $this->villageid;
$ev['slotid'] = $slotid;
$ev['time'] = $next_rank['time_to_build'];
$ev['data1'] = $next_rank['id'];
$ev['data2'] = $building['id'];
$this->event_model->add_event($ev);
$this->resource_model->set_resources($this->resources);
$this->resource_model->substract_resources(
$next_rank,
$this->villageid
);
$this->resource_model->write_resources();
$url = 'building/upgrade/' . $slotid;
redirect($url);
} elseif ($can == 1) {
echo "Village doesn't have the required technology.";
return;
} elseif ($can == 2) {
//not enough resources
echo "Not enough resources";
return;
} else {
//upgrading in progress
echo "Upgrade already in progress.";
return;
}
} else {
redirect('village/selected');
}
}
public function doassign()
{
$this->headers('do');
$this->load->library('form_validation');
$this->form_validation->set_rules('num_assign', 'Assigned number', 'is_natural');
$this->form_validation->set_rules('slotid', 'slotid', 'required|is_natural');
$this->form_validation->set_rules(
'assignmentid',
'Assignmentid',
'required|is_natural'
);
if ($this->form_validation->run()) {
$assid = $this->input->post('assignmentid');
$slotid = $this->input->post('slotid');
$num_assign = $this->input->post('num_assign');
$this->load->model('assignment_model');
$a = $this->assignment_model->assign_unit(
$assid,
$num_assign,
$slotid,
$this->resources,
$this->villageid,
$this->userid
);
//error handling with return value
if ($a == 1) {
//no building in that slot
echo "No building in that slot";
return;
}
if ($a == 2) {
//no such assignmentid
echo "No such assignmentid";
return;
}
if ($a == 3) {
//building soesn't have that assignment
echo "Building doesn't have that assignment";
return;
}
if ($a == 4) {
echo "You don't have any units that can be assigned in that slot";
return;
}
$this->load->helper('url');
redirect('building/assign/' . $slotid);
} else {
$this->load->helper('url');
redirect('village/selected');
}
}
public function dospell()
{
$this->headers('do');
$this->load->library('form_validation');
$this->form_validation->set_rules('spellid', 'spellid', 'required|is_natural');
$this->form_validation->set_rules('slotid', 'slotid', 'required|is_natural');
if ($this->form_validation->run()) {
$spellid = $this->input->post('spellid');
$slotid = $this->input->post('slotid');
$this->load->model('spell_model');
$a = $this->spell_model->use_spell(
$spellid,
$slotid,
$this->resources,
$this->villageid
);
//error handling with return value
if ($a == 1) {
echo "Building doesn't have that spell";
return;
}
if ($a == 2) {
echo "spell is on cooldown";
return;
}
if ($a == 3) {
echo "Not enough resources";
return;
}
$this->load->helper('url');
redirect('building/spells/' . $slotid);
} else {
$this->load->helper('url');
redirect('village/selected');
}
}
public function doresearch()
{
$this->load->helper('url');
$slotid = $this->input->post('slotid');
$techid = $this->input->post('id');
if (!($slotid || $techid)) {
redirect('village/selected');
}
$this->headers('do');
$event = $this->_filter_events('type', 'slot', $slotid, 4);
if ($event) {
echo "Already researching.";
}
$this->load->model('technology_model');
$a = $this->technology_model->do_research(
$techid,
$this->resources,
$slotid,
$this->villageid
);
if ($a == 1) {
echo "Technology ID doesn't exist";
return;
}
if ($a == 2) {
echo "Not enough resources";
return;
}
if ($a == 3) {
echo "Building doesn't have that technology, or you already have it";
return;
}
redirect('building/research/' . $slotid);
}
}
//nowhitesp