%%% -------------------------------------------------------
%%% @author huangyongxing@yeah.net
%%% @doc
%%% 场景地形配置数据
%%%
%%% 经统计，从整体上看，
%%% 可行走区域比不可行走区域的网格数少非常多，
%%% 所以配置中仅标记可行走区域及特殊地形，
%%% 不在配置中的默认为不可行走区域
%%% @end
%%% -------------------------------------------------------
-module(data_scene_landform).
-export([
		get/3
	]).

%% landform_type() :
%% 直接采用了场景编辑器中的数值，即
%%  0 可行走区域
%%  1 不可行走区域
%%  3 游泳区
%%  5 安全区
%%  6 跳跃点
%%  8 浅水区
-type landform_type() :: non_neg_integer().

%% base_scene表中mask字段数据生成配置数据时的处理方式：
%% 1. 场景编辑器中，对场景划分小网格，每行网格的数据转换为mask字符串中的一行
%% 所以此处生成服务端配置时，
%% 逢'\n'字符，Y坐标减1（Y坐标轴向上递增，左下为原点），如有'\r'字符则忽略
%% 2. 场景编辑器在行尾添加了冒号':'，由于已以换行识别Y坐标，所以可以忽略冒号
%% 3. 场景编辑器在每网格数据之间添加了逗号','，忽略
%% 4. 其他字符应进行对应地形数据的转换，详见php生成配置的处理代码
%%    已知的具体数字含义见landform_type()
%%    可能有不明确及遗漏的内容，具体应对照场景编辑器的含义

%% 查询逻辑坐标地形类型
-spec get(SceneId, LogicX, LogicY) -> LandformType when
	SceneId :: non_neg_integer(),
	LogicX :: non_neg_integer(), LogicY :: non_neg_integer(),
	LandformType :: landform_type().
get(SceneId, LogicX, LogicY) when SceneId < 2000 ->
	data_scene_landform_1:get(SceneId, LogicX, LogicY);
get(SceneId, LogicX, LogicY) when SceneId < 3000 ->
	data_scene_landform_2:get(SceneId, LogicX, LogicY);
get(SceneId, LogicX, LogicY) when SceneId < 4000 ->
	data_scene_landform_3:get(SceneId, LogicX, LogicY);
get(SceneId, LogicX, LogicY) ->
	Rem = SceneId rem 6,
	case Rem of
		1 -> data_scene_landform_other_1:get(SceneId, LogicX, LogicY);
		2 -> data_scene_landform_other_2:get(SceneId, LogicX, LogicY);
		3 -> data_scene_landform_other_3:get(SceneId, LogicX, LogicY);
		4 -> data_scene_landform_other_4:get(SceneId, LogicX, LogicY);
		5 -> data_scene_landform_other_5:get(SceneId, LogicX, LogicY);
		_ -> data_scene_landform_other_0:get(SceneId, LogicX, LogicY)
	end.
