- MtEvent *e = new SimpleTriggerEvent("PlayerDamage");
- gamedef->event()->put(e);
- }
- else if(event.type == CE_PLAYER_FORCE_MOVE)
- {
- camera_yaw = event.player_force_move.yaw;
- camera_pitch = event.player_force_move.pitch;
- }
- else if(event.type == CE_DEATHSCREEN)
- {
- if(respawn_menu_active)
- continue;
-
- /*bool set_camera_point_target =
- event.deathscreen.set_camera_point_target;
- v3f camera_point_target;
- camera_point_target.X = event.deathscreen.camera_point_target_x;
- camera_point_target.Y = event.deathscreen.camera_point_target_y;
- camera_point_target.Z = event.deathscreen.camera_point_target_z;*/
- MainRespawnInitiator *respawner =
- new MainRespawnInitiator(
- &respawn_menu_active, &client);
- GUIDeathScreen *menu =
- new GUIDeathScreen(guienv, guiroot, -1,
- &g_menumgr, respawner);
- menu->drop();
-
- chat_backend.addMessage(L"", L"You died.");
-
- /* Handle visualization */
-
- damage_flash = 0;
-
- LocalPlayer* player = client.getEnv().getLocalPlayer();
- player->hurt_tilt_timer = 0;
- player->hurt_tilt_strength = 0;
-
- /*LocalPlayer* player = client.getLocalPlayer();
- player->setPosition(player->getPosition() + v3f(0,-BS,0));
- camera.update(player, busytime, screensize);*/
- }
- else if (event.type == CE_SHOW_FORMSPEC)
- {
- if (current_formspec == 0)
- {
- /* Create menu */
- /* Note: FormspecFormSource and TextDestPlayerInventory
- * are deleted by guiFormSpecMenu */
- current_formspec = new FormspecFormSource(*(event.show_formspec.formspec),¤t_formspec);
- current_textdest = new TextDestPlayerInventory(&client,*(event.show_formspec.formname));
- GUIFormSpecMenu *menu =
- new GUIFormSpecMenu(device, guiroot, -1,
- &g_menumgr,
- &client, gamedef, tsrc);
- menu->setFormSource(current_formspec);
- menu->setTextDest(current_textdest);
- menu->drop();
- }
- else
- {
- assert(current_textdest != 0);
- /* update menu */
- current_textdest->setFormName(*(event.show_formspec.formname));
- current_formspec->setForm(*(event.show_formspec.formspec));
- }
- delete(event.show_formspec.formspec);
- delete(event.show_formspec.formname);
- }
- else if(event.type == CE_SPAWN_PARTICLE)
- {
- LocalPlayer* player = client.getEnv().getLocalPlayer();
- video::ITexture *texture =
- gamedef->tsrc()->getTexture(*(event.spawn_particle.texture));
-
- new Particle(gamedef, smgr, player, client.getEnv(),
- *event.spawn_particle.pos,
- *event.spawn_particle.vel,
- *event.spawn_particle.acc,
- event.spawn_particle.expirationtime,
- event.spawn_particle.size,
- event.spawn_particle.collisiondetection,
- event.spawn_particle.vertical,
- texture,
- v2f(0.0, 0.0),
- v2f(1.0, 1.0));
- }
- else if(event.type == CE_ADD_PARTICLESPAWNER)
- {
- LocalPlayer* player = client.getEnv().getLocalPlayer();
- video::ITexture *texture =
- gamedef->tsrc()->getTexture(*(event.add_particlespawner.texture));
-
- new ParticleSpawner(gamedef, smgr, player,
- event.add_particlespawner.amount,
- event.add_particlespawner.spawntime,
- *event.add_particlespawner.minpos,
- *event.add_particlespawner.maxpos,
- *event.add_particlespawner.minvel,
- *event.add_particlespawner.maxvel,
- *event.add_particlespawner.minacc,
- *event.add_particlespawner.maxacc,
- event.add_particlespawner.minexptime,
- event.add_particlespawner.maxexptime,
- event.add_particlespawner.minsize,
- event.add_particlespawner.maxsize,
- event.add_particlespawner.collisiondetection,
- event.add_particlespawner.vertical,
- texture,
- event.add_particlespawner.id);
- }
- else if(event.type == CE_DELETE_PARTICLESPAWNER)
- {
- delete_particlespawner (event.delete_particlespawner.id);
- }
- else if (event.type == CE_HUDADD)
- {
- u32 id = event.hudadd.id;
- size_t nhudelem = player->hud.size();
- if (id > nhudelem || (id < nhudelem && player->hud[id])) {
- delete event.hudadd.pos;
- delete event.hudadd.name;
- delete event.hudadd.scale;
- delete event.hudadd.text;
- delete event.hudadd.align;
- delete event.hudadd.offset;
- delete event.hudadd.world_pos;
- continue;
- }
-
- HudElement *e = new HudElement;
- e->type = (HudElementType)event.hudadd.type;
- e->pos = *event.hudadd.pos;
- e->name = *event.hudadd.name;
- e->scale = *event.hudadd.scale;
- e->text = *event.hudadd.text;
- e->number = event.hudadd.number;
- e->item = event.hudadd.item;
- e->dir = event.hudadd.dir;
- e->align = *event.hudadd.align;
- e->offset = *event.hudadd.offset;
- e->world_pos = *event.hudadd.world_pos;
-
- if (id == nhudelem)
- player->hud.push_back(e);
- else
- player->hud[id] = e;
-
- delete event.hudadd.pos;
- delete event.hudadd.name;
- delete event.hudadd.scale;
- delete event.hudadd.text;
- delete event.hudadd.align;
- delete event.hudadd.offset;
- delete event.hudadd.world_pos;
- }
- else if (event.type == CE_HUDRM)
- {
- u32 id = event.hudrm.id;
- if (id < player->hud.size() && player->hud[id]) {
- delete player->hud[id];
- player->hud[id] = NULL;
- }
- }
- else if (event.type == CE_HUDCHANGE)
- {
- u32 id = event.hudchange.id;
- if (id >= player->hud.size() || !player->hud[id]) {
- delete event.hudchange.v3fdata;
- delete event.hudchange.v2fdata;
- delete event.hudchange.sdata;
- continue;
- }
-
- HudElement* e = player->hud[id];
- switch (event.hudchange.stat) {
- case HUD_STAT_POS:
- e->pos = *event.hudchange.v2fdata;
- break;
- case HUD_STAT_NAME:
- e->name = *event.hudchange.sdata;
- break;
- case HUD_STAT_SCALE:
- e->scale = *event.hudchange.v2fdata;
- break;
- case HUD_STAT_TEXT:
- e->text = *event.hudchange.sdata;
- break;
- case HUD_STAT_NUMBER:
- e->number = event.hudchange.data;
- break;
- case HUD_STAT_ITEM:
- e->item = event.hudchange.data;
- break;
- case HUD_STAT_DIR:
- e->dir = event.hudchange.data;
- break;
- case HUD_STAT_ALIGN:
- e->align = *event.hudchange.v2fdata;
- break;
- case HUD_STAT_OFFSET:
- e->offset = *event.hudchange.v2fdata;
- break;
- case HUD_STAT_WORLD_POS:
- e->world_pos = *event.hudchange.v3fdata;
- break;
- }
-
- delete event.hudchange.v3fdata;
- delete event.hudchange.v2fdata;
- delete event.hudchange.sdata;
- }
- else if (event.type == CE_SET_SKY)
- {
- sky->setVisible(false);
- if(skybox){
- skybox->drop();
- skybox = NULL;
- }
- // Handle according to type
- if(*event.set_sky.type == "regular"){
- sky->setVisible(true);
- }
- else if(*event.set_sky.type == "skybox" &&
- event.set_sky.params->size() == 6){
- sky->setFallbackBgColor(*event.set_sky.bgcolor);
- skybox = smgr->addSkyBoxSceneNode(
- tsrc->getTexture((*event.set_sky.params)[0]),
- tsrc->getTexture((*event.set_sky.params)[1]),
- tsrc->getTexture((*event.set_sky.params)[2]),
- tsrc->getTexture((*event.set_sky.params)[3]),
- tsrc->getTexture((*event.set_sky.params)[4]),
- tsrc->getTexture((*event.set_sky.params)[5]));
- }
- // Handle everything else as plain color
- else {
- if(*event.set_sky.type != "plain")
- infostream<<"Unknown sky type: "
- <<(*event.set_sky.type)<<std::endl;
- sky->setFallbackBgColor(*event.set_sky.bgcolor);
- }