%%% -------------------------------------------------------
%%% @author huangyongxing@yeah.net
%%% @doc
%%% 场景地形数据
%%% 即障碍区、可行走区域、安全区、浅水区、游泳区等等
%%%
%%% 暂时未添加旧场景功能动态地形的功能
%%% @end
%%% -------------------------------------------------------
-module(scene_landform).
-export([
        is_block/3
        ,is_block_logic/3
        ,is_safe_pos/3
        ,check_landform/4
        ,is_battle_pos/3
    ]).

%% 0 可行走区域
%% 1 不可行走区域
%% 3 游泳区
%% 5 安全区
%% 6 跳跃点
%% 8 浅水区
%% 其他数字作用不明，要问前端大佬，服务端统一当作可行走区域
-define(LANDFORM_WALKABLE, 0).
-define(LANDFORM_BLOCK,    1).
-define(LANDFORM_SWIM,     3).
-define(LANDFORM_SAFE,     5).
-define(LANDFORM_JUMP,     6).
-define(LANDFORM_WATER,    8).

%% 是否障碍区（像素坐标）
is_block(SceneId, XPixel, YPixel) ->
    {LogicX, LogicY} = lib_scene_calc:pixel_to_logic_coordinate(XPixel, YPixel),
    is_block_logic(SceneId, LogicX, LogicY).

%% 是否障碍区（网格逻辑坐标）
is_block_logic(SceneId, LogicX, LogicY) ->
    check_landform(SceneId, LogicX, LogicY, ?LANDFORM_BLOCK).

%% 是否安全区
is_safe_pos(SceneId, XPixel, YPixel) ->
    {LogicX, LogicY} = lib_scene_calc:pixel_to_logic_coordinate(XPixel, YPixel),
    check_landform(SceneId, LogicX, LogicY, ?LANDFORM_SAFE).

%% 检查场景坐标地形类型（只检查静态地形）
check_landform(SceneId, LogicX, LogicY, Type) ->
    LandformType = data_scene_landform:get(SceneId, LogicX, LogicY),
    LandformType =:= Type.

%% 可战斗区域
is_battle_pos(SceneId, XPixel, YPixel) ->
    {LogicX, LogicY} = lib_scene_calc:pixel_to_logic_coordinate(XPixel, YPixel),
    LandformType = data_scene_landform:get(SceneId, LogicX, LogicY),
    LandformType =:= ?LANDFORM_WALKABLE
        orelse LandformType =:= ?LANDFORM_SAFE
        orelse LandformType =:= ?LANDFORM_WATER.

%% 检查动态地形
%% XXX 原实现已经不兼容，不便于直接移植，同时由于游戏中未用到，所以暂时先直接删除动态地形
%% 如果需要实现，可由专门的管理进程记录动态地形数据，
%% 需要时进行动态变更，与此同时同步到场景进程中保存便于场景中直接读取数据
%% check_landform_dynamic(SceneId, CopyId, LogicX, LogicY, Type)



