Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / preinstall / ActivityMark.cs
using System;
using System.Collections.Generic;
using Godot;

public class ActivityMark
{
    /// <summary>
    /// 物体 Id
    /// </summary>
    public string Id { get; set; }

    /// <summary>
    /// 刷新位置, 单位: 像素
    /// </summary>
    public Vector2 Position { get; set; }

    /// <summary>
    /// 额外属性, 不要自行修改字典内的属性数据, 要改的话请在 DerivedAttr 上改
    /// </summary>
    public Dictionary<string, string> Attr { get; set; }
    
    /// <summary>
    /// 衍生属性, 可随意修改值, 通常用于存储随机出来的数据
    /// </summary>
    public Dictionary<string, string> DerivedAttr { get; set; }
    
    /// <summary>
    /// 特殊标记类型
    /// </summary>
    public SpecialMarkType MarkType { get; set; }

    /// <summary>
    /// 延时时间, 单位: 秒
    /// </summary>
    public float DelayTime { get; set; }

    /// <summary>
    /// 物体初始海拔高度
    /// </summary>
    public int Altitude { get; set; } = 8;

    /// <summary>
    /// 物体初始纵轴速度
    /// </summary>
    public float VerticalSpeed { get; set; } = 0;
    
    /// <summary>
    /// 物体类型
    /// </summary>
    public ActivityType ActivityType { get; set; }

    /// <summary>
    /// 地牢房间加载完成事件
    /// </summary>
    public Action OnReadyEvent;
    
    /// <summary>
    /// 快速创建标记
    /// </summary>
    /// <param name="activityType">物体类型</param>
    /// <param name="delayTime">延时时间</param>
    /// <param name="pos">位置</param>
    public static ActivityMark CreateMark(ActivityType activityType, float delayTime, Vector2 pos)
    {
        var mark = new ActivityMark();
        mark.Attr = new Dictionary<string, string>();
        mark.ActivityType = activityType;
        mark.MarkType = SpecialMarkType.Normal;
        mark.VerticalSpeed = 0;
        mark.Altitude = activityType == ActivityType.Enemy ? 0 : 8;
        mark.DelayTime = delayTime;
        mark.Position = pos;
        return mark;
    }
}