Giter Club home page Giter Club logo

hexflow's Introduction

HexFlow

一个试图缝合 minecract(mc), factorio(fto), 戴森球计划(dsp) 等同类游戏的工厂模拟游戏项目. 同时顺便可以用来试验一些想法/学习一些很酷的东西.

可以在看板中追踪最近的更新情况.

计划中的功能

普通玩家能看到的

  • 六边形网格平面地图 - WIP
    • 平面地图, 但是 3d 模型

      • 基础地形是扁的, 在一个平面上
      • 但上面放的设施可以是真正的 3D 模型?
    • 不止一层?

    • 随机地图生成

      • 在 cpp 实现基于分型柏林噪音的类山脉地形生成, 且满足伪随机性(这里指相同种子产出相同结果). 已验证 jobsystem 可用于该生成算法, compushader 也是一个改进方向, 但必要性不大
      • 资源, 预设建筑群的生成
    • 内置的地图编辑器

    • 其实考虑过类似 mc 的3个轴向任意搭建的3d地图, 但是这样难度可能会高很多, 画饼都不太敢画. 因此选择折中的 3d 渲染+(有限层数的)多层结构

  • 设施-工厂模拟游戏的核心
    • 单体设施: 放置即可用的设施, 不可拆分, 不可组合
    • 组合设施: 由不同部件组合而成的设施, 可根据需求和运行状况调整不同组件的数量和位置, 达到若干参数的平衡或极致的产能
    • 设施增幅机制: fto 的加速塔和 dsp 的增产剂都是很好的设计. 而 mc 的某些科技 mod 中, 给机器加个插件就能直接提升性能的设计就过于粗暴.
  • 逐渐强化的敌人与环境压力-不准挂机!
    • 显然是指 fto 的虫巢和 dsp (到2023/08/29还没出的)黑雾
    • 当然, 应当给个开关把它关掉
  • 物流系统
    • 传送带-物流的灵魂!
    • 一种和火车、物流塔都有所不同的, 有一定可玩性的大批量物品物流机制(idea required). 比如, 将物品打包成某种科幻物质, 然后发射到另一个位置(顺便造成丢包/生物伤害?).
  • 固体、液体和气体的区分
    • 这根据真实程度和机制复杂度可能会有很高的实现难度.
  • 温度系统
    • 最简单的实现里只是一个每帧更新的灰度图
  • 基于逻辑运算的控制系统
    • fto 的运算器可以说是 Best-practice 级别的设计, 尽管会下坠的信号线多起来跟蜘蛛网一样
  • 网络同步(即联机游戏), 并提供一个专用服务器程序

硬核玩家&游戏开发者希望看到的

  • 基于 cpp 实现的底层代码, 最大限度利(ya)用(zha)CPU算力
  • ECS (Entity-Component-System) 游戏架构, 而不是 Unity 中常用的 Entity-Component 架构
    • 考察一下最近的 DOTS 系统和 Job 系统, 以及 Unity 官网提到的面向数据模式
  • 多线程支持. 没人希望一个工厂游戏只能跑单核吧?
  • lua 实现游戏业务逻辑, 并开放有足够深度的自定义接口
  • 基于哈希表的网格内存储和检索算法, 以及按固定大小区块划分的地图. 渲染相关的数据用流式加载的思路, 但所有(重要的)区块都是全局同步更新.

API文档

  • cpp 模块在 NativeLibrary 下, 包含函数接口的解释和必要的数学知识

hexflow's People

Contributors

lovelycathyt avatar

Stargazers

Cheems avatar Simon avatar Buger404 avatar 陆陆侠 avatar  avatar XiaHan avatar latyas avatar Soar avatar  avatar Dxball ☕ avatar Ulysses avatar LiangXiang Shen avatar nicognaw avatar LightyTheLight avatar  avatar Voidmatrix avatar

Watchers

LightyTheLight avatar  avatar 雨落随风 avatar

hexflow's Issues

Feat: 根据网格相连的位置关系构建纹理的机制

相连的两个格子, 如果是同种地形, 则应在连接处使用连续的纹理; 如果是不同种地形, 则应在连接处使用各自的边缘纹理.

基本思路是在划分为 6 个三角形的 Mesh 上, 对每个三角形的连接情形, 可以划分为16种组合. 在生成纹理坐标时, 就能根据连接状态选择要使用的纹理区域.

  • 简单重复的 uv 坐标的生成算法
  • 连接型纹理的 uv 坐标的生成算法
    • 基于滑动窗口的遍历算法
    • 针对空区块边缘的微小像素点的优化
  • 包含16种情况的纹理

Feat: 地图的保存与载入

目前没 UI, 开局自动读取默认地图, 然后随便丢个 GetKeyDown 或者临时按钮来触发保存

  • 地图保存
  • 地图载入

Feat: 随机生成地图

需要具有以下特性:

  • 一个种子即可唯一决定整个地图的地形
  • 不限制区块的生成顺序, 即任意区块可在任意时机生成
  • 相邻区块间具有连续性

可以参考 这个视频 的算法, 尝试用 job 系统实现?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.