/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at golgotha_source@usa.net (Subject should have "GOLG" in it) ***********************************************************************/ #include "g1_object.hh" #include "lisp/li_class.hh" #include "g1_object.hh" #include "li_objref.hh" #include "math/random.hh" #include "object_definer.hh" #include "player.hh" #include "controller.hh" #include "objs/stank.hh" #include "objs/path_object.hh" #include "objs/bases.hh" #include "app/app.hh" #include "device/event.hh" #include "mess_id.hh" #include "device/kernel.hh" #include "math/pi.hh" #include "border_frame.hh" static li_symbol_ref stank("stank"); class g1_stank_factory_class : public g1_factory_class { public: g1_stank_factory_class(g1_object_type id, g1_loader_class *fp) : g1_factory_class(id,fp) { flags|=THINKING; } i4_bool occupy_location() { if (occupy_location_center()) { g1_factory_list.insert(*this); return i4_T; } else return i4_F; } void continue_game() { } void think() { request_think(); if (!g1_player_man.get(player_num)->get_commander() && !g1_player_man.get(player_num)->continue_wait) { if (g1_player_man.get(player_num)->num_stank_lives()) { g1_object_class *o=g1_create_object(g1_get_object_type(stank.get())); g1_player_piece_class *stank=g1_player_piece_class::cast(o); if (stank) { g1_player_man.get(player_num)->num_stank_lives()--; g1_player_man.get(player_num)->calc_upgrade_level(); stank->player_num=player_num; stank->x=x; stank->y=y; stank->h=h; stank->theta=theta-i4_pi()/2.0; stank->turret->rotation.z = stank->base_angle = stank->theta; stank->grab_old(); stank->occupy_location(); g1_player_man.get(player_num)->add_object(stank->global_id); g1_player_man.get(player_num)->set_commander(stank); if (player_num==g1_player_man.get_local()->get_player_num() && g1_current_controller.get()) { if (g1_border.get()) { if (g1_border->strategy_on_top) li_call("strategy_toggle"); else g1_current_controller->view.suggest_camera_mode(G1_ACTION_MODE); } } stank->request_think(); } else delete o; } else { if (g1_player_man.local_player==player_num) { i4_user_message_event_class loser(G1_YOU_LOSE); i4_kernel.send_event(i4_current_app, &loser); } } } } virtual i4_bool build(int type) { if (type!=g1_supertank_type || g1_player_man.get(player_num)->num_stank_lives()>=5) return i4_F; if (g1_player_man.get(player_num)->money()>=g1_object_type_array[type]->defaults->cost) { g1_player_man.get(player_num)->money()-=g1_object_type_array[type]->defaults->cost; g1_player_man.get(player_num)->num_stank_lives()++; return i4_T; } else return i4_F; } }; static g1_object_definermainbase_def("mainbasepad", g1_object_definition_class::EDITOR_SELECTABLE);