From 7f0bb9ae83b6a7eaf277dc5002c893424c525c3c Mon Sep 17 00:00:00 2001 From: MewMew <=> Date: Sat, 2 Mar 2019 22:40:58 +0100 Subject: [PATCH] new module > area_unlocked_on_rotated_entity --- control.lua | 5 +- .../area_unlocked_on_rotated_entity.lua | 87 +++++++++++++++++++ maps/nightfall.lua | 8 +- 3 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 maps/modules/area_unlocked_on_rotated_entity.lua diff --git a/control.lua b/control.lua index d734202b..c7ca913a 100644 --- a/control.lua +++ b/control.lua @@ -13,8 +13,9 @@ require "poll" require "score" ---- enable modules here ---- ---require "maps.tools.cheat_mode" +require "maps.tools.cheat_mode" --require "maps.modules.hunger" +require "maps.modules.area_unlocked_on_rotated_entity" --require "maps.modules.fish_respawner" --require "maps.modules.rocket_launch_always_yields_science" --require "maps.modules.launch_fish_to_win" @@ -37,7 +38,7 @@ require "score" --require "maps.labyrinth" --require "maps.spooky_forest" --require "maps.nightfall" -require "maps.atoll" +--require "maps.atoll" --require "maps.tank_battles" --require "maps.spiral_troopers" --require "maps.fish_defender" diff --git a/maps/modules/area_unlocked_on_rotated_entity.lua b/maps/modules/area_unlocked_on_rotated_entity.lua new file mode 100644 index 00000000..1790350d --- /dev/null +++ b/maps/modules/area_unlocked_on_rotated_entity.lua @@ -0,0 +1,87 @@ +--unlocks areas when the entity at the position is rotated +--define the entities by position like this: +-- global.level_unlocks = { +-- ["x:0.5 y:0.5"] = {left_top = {x = 0,y = 0}, right_bottom = {x = 50, y = 50}, tile = "dirt-4", unlocked = false}, +-- ["x:0.5 y:1.5"] = {left_top = {x = 0,y = 0}, right_bottom = {x = 50, y = 50}, tile = "grass-2", unlocked = false} +-- } + +local event = require 'utils.event' +local math_random = math.random + +local function shuffle(tbl) + local size = #tbl + for i = size, 1, -1 do + local rand = math_random(size) + tbl[i], tbl[rand] = tbl[rand], tbl[i] + end + return tbl +end + +local particles = {"coal-particle", "copper-ore-particle", "iron-ore-particle", "stone-particle"} + +local function create_particles(surface, position) + local particle = particles[math_random(1, #particles)] + local m = math_random(10, 30) + local m2 = m * 0.005 + for i = 1, 75, 1 do + surface.create_entity({ + name = particle, + position = position, + frame_speed = 0.1, + vertical_speed = 0.1, + height = 0.1, + movement = {m2 - (math_random(0, m) * 0.01), m2 - (math_random(0, m) * 0.01)} + }) + end +end + +local function on_player_rotated_entity(event) + if not global.level_unlocks then return end + local position_string = "x:" .. tostring(event.entity.position.x) + position_string = position_string .. " y:" + position_string = position_string .. tostring(event.entity.position.y) + + if not global.level_unlocks[position_string] then return end + if global.level_unlocks[position_string].unlocked then return end + global.level_unlocks[position_string].unlocked = true + + if not global.area_tiles_unlock_schedule then global.area_tiles_unlock_schedule = {} end + + local level_unlocked = 0 + for _, level in pairs(global.level_unlocks) do + if level.unlocked == true then level_unlocked = level_unlocked + 1 end + end + game.print(game.players[event.player_index].name .. " unlocked the path to Chapter " .. tostring(level_unlocked) .. "!") + + for x = global.level_unlocks[position_string].left_top.x, global.level_unlocks[position_string].right_bottom.x, 1 do + for y = global.level_unlocks[position_string].left_top.y, global.level_unlocks[position_string].right_bottom.y, 1 do + global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule + 1] = { + surface = event.entity.surface, + tile = { + name = global.level_unlocks[position_string].tile, + position = {x = event.entity.position.x + x, y = event.entity.position.y + y} + } + } + end + end + global.area_tiles_unlock_schedule = shuffle(global.area_tiles_unlock_schedule) + + for _, player in pairs(game.connected_players) do + player.play_sound{path="utility/new_objective", volume_modifier=0.4} + end +end + +local function on_tick(event) + if not global.area_tiles_unlock_schedule then return end + + global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].surface.set_tiles({global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].tile}, true) + create_particles(global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].surface, global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].tile.position) + + global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule] = nil + if #global.area_tiles_unlock_schedule == 0 then global.area_tiles_unlock_schedule = nil end +end + +event.add(defines.events.on_tick, on_tick) +event.add(defines.events.on_player_rotated_entity, on_player_rotated_entity) + +--global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].surface.create_entity({name = "blood-explosion-huge", position = global.area_tiles_unlock_schedule[#global.area_tiles_unlock_schedule].tile.position}) \ No newline at end of file diff --git a/maps/nightfall.lua b/maps/nightfall.lua index e621d6b6..0947feea 100644 --- a/maps/nightfall.lua +++ b/maps/nightfall.lua @@ -566,10 +566,10 @@ local function on_player_joined_game(event) ["crude-oil"] = {frequency = "very-high", size = "very-big", richness = "normal"}, ["trees"] = {frequency = "normal", size = "normal", richness = "normal"}, ["enemy-base"] = {frequency = "very-high", size = "big", richness = "very-good"}, - ["grass"] = {frequency = "normal", size = "normal", richness = "normal"}, - ["sand"] = {frequency = "normal", size = "normal", richness = "normal"}, - ["desert"] = {frequency = "normal", size = "normal", richness = "normal"}, - ["dirt"] = {frequency = "normal", size = "normal", richness = "normal"} + --["grass"] = {frequency = "normal", size = "normal", richness = "normal"}, + --["sand"] = {frequency = "normal", size = "normal", richness = "normal"}, + --["desert"] = {frequency = "normal", size = "normal", richness = "normal"}, + --["dirt"] = {frequency = "normal", size = "normal", richness = "normal"} } game.create_surface("nightfall", map_gen_settings) local surface = game.surfaces["nightfall"]