Git Product home page Git Product logo

sivcomponent's Introduction

Barrage Storm

特徴

コンポーネント指向エンジン
Photon SDKを利用したオンラインマルチプレイ機能

設計概要

ComponentEngine

エンジンの基礎部分です。基本的なオブジェクトはこの名前空間に入っています。
基本的にライブラリに依存しない設計にしていますが、transformは例外です。座標の管理などでSiv3Dと密接な連携が必要になるため、
using Transform = SivTransformと型エイリアスを作ってコーディングしています。DirectX等を使う場合はTransformを新たに作り直す必要があります。

本README執筆時点ではOpenSiv3D以外への移植がまだ考えられていないこと、GameObjectと密接に関わるTransformに必要な機能について分離等の設計がしっかりできていないので、インターフェース等を作っていません。他ライブラリとの親和性を考えるとそのうち作った方がよさそうですね。

SivComponent

名前空間ではComponentEngine::Sivになっています。
Siv3Dに関するコンポーネントの機能はここで実装しています。しかし全然追いついていません。

PhotonComponent

Photonを使ったオンライン機能をコンポーネントにまとめたものです。しかし現在まとまっていると言える状況ではなく、初期化のために共通オブジェクトの実装が必要だったりしてかなり設計が甘い状況です。一応、きちんとコールバック受け取って動くことは確認が取れているので、扱いが不便なだけであり実用上の機能は揃っています。

運用の基本

SceneManager -> Scene -> GameObject -> Component のような保持関係になっています。上位オブジェクトは GetHoge.lock() で取得することができます。(シーン遷移するためにはSceneManagerまで辿って呼ぶ必要があるのでかなり面倒ですが、あまり頻繁に書く機能ではないので許容しています)

  1. ComponentEngine::ISceneを継承したクラスを作ります。
  2. ComponentEngine::AttachbleComponentを継承したクラスを作り、Start()やUpdate()に処理を書いていきます。Unityと同様です。
  3. void IScene::Setup() override にてゲームオブジェクトを生成していきます。生成と同時にオブジェクトのポインタを受け取れる、CreateAndGetGameObject()がおすすめです。オブジェクトにはAddComponentでコンポーネントをくっつけていきましょう。
  4. シーンマネージャーを作り、クラスを登録します。シーン登録については、Siv3Dのシーンマネージャーに似せています。最初に登録したシーンが最初のシーンになります。
  5. SceneManager.UpdateCurrentScene()をゲームループで毎フレーム呼びます。

大まかにはこのような形です。わからないことがあればTwitterかSlackで連絡でもください。テストユーザー大歓迎です。

ライブラリ

ビルドする場合はそれぞれインストールを行い、パス等を自力で通す必要があります

boost 1.72.0

Photon Realtime SDK v4.1.15.2
https://www.photonengine.com/ja/sdks

OpenSiv3D v0.4.2
Copyright (c) 2008-2019 Ryo Suzuki
Copyright (c) 2016-2019 OpenSiv3D Project
https://github.com/Siv3D/OpenSiv3D

ICU
Copyright © 1991-2020 Unicode, Inc.

ご意見・ご感想

https://docs.google.com/forms/d/e/1FAIpQLSdV1MVUXTzXItOsQgxnE7dtvRE21YwIkWCQzmX6LoRa-X9hxA/viewform?usp=sf_link

開発用メモ

RequireComponentが欲しい

Prefabの登録がクソすぎるので各クラスに分散させられるような仕組みが必要 シーン登録時にセットで登録か?

衝突判定エンジンに不具合アリ コライダー(形状)をオフにしても反応するはず IColliderからGetActiveが取れんのでCollisionObjectの作り直し


敵タイプ スタンダード 🎃 標準的 コア❇に向かって移動して狙ってくる

アタッカー ⚽ プレイヤーを標的として追尾してくる

ボマー 💣 🎆 コアに体当たりし、爆発する HPをゼロにしても爆発して周囲に大ダメージ

爆発は敵弾扱い

🎃⚽💣🎆😀😨😱


sivcomponent's People

Contributors

para7 avatar mak1a avatar

Watchers

James Cloos avatar  avatar  avatar

sivcomponent's Issues

フレームカウンターの共通化案

global.cpp

namespace ComponentEngine::Global{

static int frameCount = 0;

void Update(){
++frameCount;
}

int FrameCount(){
return frameCount;
}

}

global.hpp

namespace ComponentEngine::Global{

int FrameCount();
}

SceneManager.cpp

Main()
{
Global::Update();
}

currentID = Global::FrameCount();

衝突判定のEnterとExitの実装案

とりあえず仮想関数を作る

それはそう

ゲームエンジン全体

現フレーム判定のためのint型を作ります
エンジンのメインループのたびにインクリメントさせるやつ

衝突判定マスターみたいなコンポーネントがあったはずなので改造します

前フレームで衝突したオブジェクト一覧のforward_listを作る

パフォーマンス的にたぶんforward_listがベスト
いやわからん ワンチャンmapの方が検索は早いし全体が早くなるかもしれん でも再構築かかりやすい気もするし何十個も重ならないからlistでいいと思う
このforward_listはゲームオブジェクトを直接ではない。int型とゲームオブジェクトのポインタをセットにして管理する

関数呼び出し構造忘れたけど、最終的に各コンポーネントの衝突関数が呼ばれるわけですが(たぶんforで全コンポーネントの関数を呼ぶよう回してるはず)その直前でチェックを入れる

forward_listを線形探索してあるかないか調べます。なかったらEnterを呼び出す。そしてlistに追加(衝突する数なんてたかが知れてるので平気)
ここ重要なので忘れるなlistはint型を持ってるので、そこに現在のフレームIDを保存しておく

Exit処理専用関数を作る

現在のIDとListのIDを比較し、一致しなかったらExitを呼ぶ→Listから除外する関数

どこだか忘れたけど衝突判定エンジンの動作開始してる場所あたりに処理を書く

衝突判定エンジンが終了→Exit判定開始 の流れ

衝突エンジンが終了したあとに全オブジェクトをforで回してさっき作ったExit処理専用関数を呼ぶ

でたぶんできる

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.