From e4a3a354f523ea12601dae2f7cd89caf7aae6c00 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 30 Jan 2019 20:30:00 +0800 Subject: *misc --- Source/Asura.Framework/Class.lua | 17 +-- Source/Asura.Framework/Component.lua | 6 +- Source/Asura.Framework/Filesystem/scene_loader.lua | 2 + Source/Asura.Framework/Graphics/Animator.lua | 16 +-- Source/Asura.Framework/Graphics/Camera.lua | 8 +- .../Asura.Framework/Graphics/particle_system.lua | 4 +- Source/Asura.Framework/Scene.lua | 8 +- Source/Asura.Framework/Transform.lua | 11 +- Source/Asura.Framework/class.lua | 17 +-- Source/Asura.Framework/component.lua | 6 +- Source/Asura.Framework/entity.lua | 110 -------------------- .../Asura.Framework/filesystem/entity_loader.lua | 2 +- Source/Asura.Framework/filesystem/scene_loader.lua | 2 + Source/Asura.Framework/gameobject.lua | 115 +++++++++++++++++++++ Source/Asura.Framework/graphics/animator.lua | 16 +-- Source/Asura.Framework/graphics/camera.lua | 8 +- Source/Asura.Framework/graphics/canvas.lua | 18 ++-- .../Asura.Framework/graphics/particle_system.lua | 4 +- Source/Asura.Framework/managers/scene_manager.lua | 16 +++ Source/Asura.Framework/managers/sprite_manager.lua | 0 Source/Asura.Framework/scene.lua | 8 +- Source/Asura.Framework/transform.lua | 11 +- 22 files changed, 223 insertions(+), 182 deletions(-) delete mode 100644 Source/Asura.Framework/entity.lua create mode 100644 Source/Asura.Framework/gameobject.lua create mode 100644 Source/Asura.Framework/managers/scene_manager.lua create mode 100644 Source/Asura.Framework/managers/sprite_manager.lua (limited to 'Source/Asura.Framework') diff --git a/Source/Asura.Framework/Class.lua b/Source/Asura.Framework/Class.lua index ee30c8d..94dc491 100644 --- a/Source/Asura.Framework/Class.lua +++ b/Source/Asura.Framework/Class.lua @@ -1,16 +1,19 @@ AsuraEngine.Class = {} + local Class = AsuraEngine.Class Class.__index = Class -function AsuraEngine.Class.Sub(cname) - local c = {} - c.class = cname - setmetatable(c, Class) +function Class.Sub(base, classname) + local subclass = {} + base.__index = base + setmetatable(subclass, base) return c end -function AsuraEngine.Class.New(self) +--实例化 +function Class.New(cls) local obj = {} - setmetatable(obj, self) - self.__index = self + setmetatable(obj, cls) + cls.__index = cls end + diff --git a/Source/Asura.Framework/Component.lua b/Source/Asura.Framework/Component.lua index a31b31c..289dc8e 100644 --- a/Source/Asura.Framework/Component.lua +++ b/Source/Asura.Framework/Component.lua @@ -3,15 +3,15 @@ AsuraEngine.Component = AsuraEngine.Class("Component") local Component = AsuraEngine.Component -- Component要显示在inspector的变量 -Component.mEntity = AsuraEngine.Type.GameObject +Component.gameobject = AsuraEngine.Type.GameObject function Component.Sub(cname) assert(Component.components[cname] == nil) end -function Component:Ctor(go) - self.mEntity = go +function Component:Ctor(gameobject) + self.gameobject = gameobject end function Component:OnEvent(e) diff --git a/Source/Asura.Framework/Filesystem/scene_loader.lua b/Source/Asura.Framework/Filesystem/scene_loader.lua index 3284c57..c0a951f 100644 --- a/Source/Asura.Framework/Filesystem/scene_loader.lua +++ b/Source/Asura.Framework/Filesystem/scene_loader.lua @@ -1,3 +1,5 @@ +local Scene = require "scene" + local loader = AsuraEngine.Loader.New("scene") function loader.Load(asset) diff --git a/Source/Asura.Framework/Graphics/Animator.lua b/Source/Asura.Framework/Graphics/Animator.lua index 7cc18a1..02f67ff 100644 --- a/Source/Asura.Framework/Graphics/Animator.lua +++ b/Source/Asura.Framework/Graphics/Animator.lua @@ -3,21 +3,21 @@ AsuraEngine.Animator = AsuraEngine.Component.Sub("Animator") local Animator = AsuraEngine.Animator -- Animator inspector variables. -Animator.mSpriteRenderer = AsuraEngine.Type.SpriteRenderer -Animator.mAnimation = AsuraEngine.Type.Animation +Animator.spriteRenderer = AsuraEngine.Type.SpriteRenderer +Animator.animation = AsuraEngine.Type.Animation -function Animator:Ctor(entity, animation) - self.base(entity) - self.mSpriteRenderer = entity:GetSpriteRenderer() - self.mAnimation = animation +function Animator:Ctor(gameobject, animation) + self.base(gameobject) + self.spriteRenderer = gameobject:GetSpriteRenderer() + self.animation = animation end function Animator:SetAnimation(animation) - self.mAnimation = animation + self.animation = animation end function Animator:GetAnimation() - return self.mAnimation + return self.animation end function Animator:OnUpdate(dt) diff --git a/Source/Asura.Framework/Graphics/Camera.lua b/Source/Asura.Framework/Graphics/Camera.lua index 039de1a..c8176f8 100644 --- a/Source/Asura.Framework/Graphics/Camera.lua +++ b/Source/Asura.Framework/Graphics/Camera.lua @@ -2,12 +2,12 @@ AsuraEngine.Camera = AsuraEngine.Component.Sub("Camera") local Camera = AsuraEngine.Camera -Camera.mIsCulling = AsuraEngine.Type.Bool -Camera.mIsOnScreen = AsuraEngine.Type.Bool +Camera.isCulling = AsuraEngine.Type.Bool +Camera.isOnScreen = AsuraEngine.Type.Bool function Camera.Ctor(self) - self.mIsCulling = false - self.mIsOnScreen = false + self.isCulling = false + self.isOnScreen = false end function Camera.OnUpdate(dt) diff --git a/Source/Asura.Framework/Graphics/particle_system.lua b/Source/Asura.Framework/Graphics/particle_system.lua index 17d52e7..055d1b2 100644 --- a/Source/Asura.Framework/Graphics/particle_system.lua +++ b/Source/Asura.Framework/Graphics/particle_system.lua @@ -4,8 +4,8 @@ AsuraEngine.ParticleSystem = AsuraEngine.Component.Sub("ParticleSystem") local ParticleSystem = AsuraEngine.ParticleSystem -function ParticleSystem.Ctor(self, entity, def) - self.base(entity) +function ParticleSystem.Ctor(self, gameobject, def) + self.base(gameobject) self.spriteRenderer = AsuraEngine.SpriteRenderer.New() end diff --git a/Source/Asura.Framework/Scene.lua b/Source/Asura.Framework/Scene.lua index 48a766c..c0eaaa8 100644 --- a/Source/Asura.Framework/Scene.lua +++ b/Source/Asura.Framework/Scene.lua @@ -1,12 +1,12 @@ -- --- 原点在左下角 +-- Scene是一系列gameobject的集合。 -- AsuraEngine.Scene = AsuraEngine.Asset.Sub("Scene") local Scene = AsuraEngine.Scene function Scene.Ctor(self) - self.entities = {} --当前场景的所有entity + self.rootGameObjects = {} --当前场景的所有root gameobject end --获取当前的场景 @@ -14,4 +14,8 @@ function Scene.GetCurrent() end +function Scene.ToAsset() + +end + return Scene \ No newline at end of file diff --git a/Source/Asura.Framework/Transform.lua b/Source/Asura.Framework/Transform.lua index e45a027..a415921 100644 --- a/Source/Asura.Framework/Transform.lua +++ b/Source/Asura.Framework/Transform.lua @@ -1,8 +1,9 @@ -local Transform = AsuraEngine.Class("Transform") -AsuraEngine.Transform = Transform +-- transform的起点在左下角,逆时针为正向 +AsuraEngine.Transform = AsuraEngine.Class("Transform") +local Transform = AsuraEngine.Transform function Transform.Ctor(self) - self.position = {} - self.rotation = {} - self.size = {} + self.position = {x=0, y=0} + self.rotation = 0 + self.size = {w=0, h=0} end diff --git a/Source/Asura.Framework/class.lua b/Source/Asura.Framework/class.lua index ee30c8d..94dc491 100644 --- a/Source/Asura.Framework/class.lua +++ b/Source/Asura.Framework/class.lua @@ -1,16 +1,19 @@ AsuraEngine.Class = {} + local Class = AsuraEngine.Class Class.__index = Class -function AsuraEngine.Class.Sub(cname) - local c = {} - c.class = cname - setmetatable(c, Class) +function Class.Sub(base, classname) + local subclass = {} + base.__index = base + setmetatable(subclass, base) return c end -function AsuraEngine.Class.New(self) +--实例化 +function Class.New(cls) local obj = {} - setmetatable(obj, self) - self.__index = self + setmetatable(obj, cls) + cls.__index = cls end + diff --git a/Source/Asura.Framework/component.lua b/Source/Asura.Framework/component.lua index a31b31c..289dc8e 100644 --- a/Source/Asura.Framework/component.lua +++ b/Source/Asura.Framework/component.lua @@ -3,15 +3,15 @@ AsuraEngine.Component = AsuraEngine.Class("Component") local Component = AsuraEngine.Component -- Component要显示在inspector的变量 -Component.mEntity = AsuraEngine.Type.GameObject +Component.gameobject = AsuraEngine.Type.GameObject function Component.Sub(cname) assert(Component.components[cname] == nil) end -function Component:Ctor(go) - self.mEntity = go +function Component:Ctor(gameobject) + self.gameobject = gameobject end function Component:OnEvent(e) diff --git a/Source/Asura.Framework/entity.lua b/Source/Asura.Framework/entity.lua deleted file mode 100644 index b41d365..0000000 --- a/Source/Asura.Framework/entity.lua +++ /dev/null @@ -1,110 +0,0 @@ --- --- 实体,作为scene中的实体存在。Scene中唯一管理的就是实体entity,游戏里的所有component都依附于entity存在,包括camera组件。 --- -require "transform" - -AsuraEngine.Entity = AsuraEngine.Asset.Sub("Entity") - -local Entity = AsuraEngine.Entity - -function Entity:Ctor() - self.transform = AsuraEngine.Transform.New() -end - -function Entity:AddComponent(type, name) - local cname = type - if name == nil then - cname = name - end - local component = AsuraEngine.Component.GetComponent(type) - self.components[cname] = compoennt -end - --- 根据组件名拿到组件 -function Entity:GetComponent(name) - return self.components[name] -end - --- 根据组件类型拿到组件 -function Entity:GetComponentByType(tname) - -end - -function Entity:OnEnable() - -end - -function Entity:OnEvent(e) - if self.components == nil or type(self.components) ~= "table" then - AsuraEditor.LogError("") - return - end - for name, component in self.components do - if component.OnEvent ~= nil then - component:OnEvent(e) - end - end -end - -function Entity:OnUpdate(dt) - for name, component in self.components do - if component.OnUpdate ~= nil then - component:OnUpdate(dt) - end - end -end - -function Entity:OnRender() - for name, component in self.components do - if component.OnRender ~= nil then - component.OnRender() - end - end -end - -function Entity:OnDisable() - for name, component in self.components do - if component.OnDisable ~= nil then - component.OnDisable() - end - end -end - -function Entity:GetTrasform() - return self.transform -end - -function Entity:GetPosition() - -end - -function Entity:GetScale() - -end - -function Entity:GetRotation() - -end - -function Entity:SetTrasform(transform) - -end - -function Entity:SetPosition() - -end - -function Entity:SetScale() - -end - -function Entity:SetRotation() - -end - ---写asset -function Entity:ToAsset() - -end - -return Entity \ No newline at end of file diff --git a/Source/Asura.Framework/filesystem/entity_loader.lua b/Source/Asura.Framework/filesystem/entity_loader.lua index 67a849d..771f86a 100644 --- a/Source/Asura.Framework/filesystem/entity_loader.lua +++ b/Source/Asura.Framework/filesystem/entity_loader.lua @@ -1,4 +1,4 @@ -local loader = AsuraEngine.Loader.New("entity") +local loader = AsuraEngine.Loader.New("gameobject") function loader.Load(asset) diff --git a/Source/Asura.Framework/filesystem/scene_loader.lua b/Source/Asura.Framework/filesystem/scene_loader.lua index 3284c57..c0a951f 100644 --- a/Source/Asura.Framework/filesystem/scene_loader.lua +++ b/Source/Asura.Framework/filesystem/scene_loader.lua @@ -1,3 +1,5 @@ +local Scene = require "scene" + local loader = AsuraEngine.Loader.New("scene") function loader.Load(asset) diff --git a/Source/Asura.Framework/gameobject.lua b/Source/Asura.Framework/gameobject.lua new file mode 100644 index 0000000..cd984ee --- /dev/null +++ b/Source/Asura.Framework/gameobject.lua @@ -0,0 +1,115 @@ +-- +-- 实体,作为scene中的实体存在。Scene中唯一管理的就是实体entity,游戏里的所有component都依附于entity存在,包括camera组件。 +-- +require "transform" + +AsuraEngine.GameObject = AsuraEngine.Asset.Sub("GameObject") + +local GameObject = AsuraEngine.GameObject + +function GameObject:Ctor() + self.transform = AsuraEngine.Transform.New() + self.subentities = {} -- Sub node entities +end + +function GameObject:AddChild(gameobject) + table.insert(self.child, gameobject) +end + +function GameObject:AddComponent(type, name) + local cname = type + if name == nil then + cname = name + end + local component = AsuraEngine.Component.GetComponent(type) + self.components[cname] = compoennt +end + +-- 根据组件名拿到组件 +function GameObject:GetComponent(name) + return self.components[name] +end + +-- 根据组件类型拿到组件 +function GameObject:GetComponentByType(tname) + +end + +function GameObject:OnEnable() + +end + +function GameObject:OnEvent(e) + if self.components == nil or type(self.components) ~= "table" then + AsuraEditor.LogError("") + return + end + for name, component in self.components do + if component.OnEvent ~= nil then + component:OnEvent(e) + end + end +end + +function GameObject:OnUpdate(dt) + for name, component in self.components do + if component.OnUpdate ~= nil then + component:OnUpdate(dt) + end + end +end + +function GameObject:OnRender() + for name, component in self.components do + if component.OnRender ~= nil then + component.OnRender() + end + end +end + +function GameObject:OnDisable() + for name, component in self.components do + if component.OnDisable ~= nil then + component.OnDisable() + end + end +end + +function GameObject:GetTrasform() + return self.transform +end + +function GameObject:GetPosition() + +end + +function GameObject:GetScale() + +end + +function GameObject:GetRotation() + +end + +function GameObject:SetTrasform(transform) + +end + +function GameObject:SetPosition() + +end + +function GameObject:SetScale() + +end + +function GameObject:SetRotation() + +end + +--写asset +function GameObject:ToAsset() + +end + +return GameObject \ No newline at end of file diff --git a/Source/Asura.Framework/graphics/animator.lua b/Source/Asura.Framework/graphics/animator.lua index 7cc18a1..02f67ff 100644 --- a/Source/Asura.Framework/graphics/animator.lua +++ b/Source/Asura.Framework/graphics/animator.lua @@ -3,21 +3,21 @@ AsuraEngine.Animator = AsuraEngine.Component.Sub("Animator") local Animator = AsuraEngine.Animator -- Animator inspector variables. -Animator.mSpriteRenderer = AsuraEngine.Type.SpriteRenderer -Animator.mAnimation = AsuraEngine.Type.Animation +Animator.spriteRenderer = AsuraEngine.Type.SpriteRenderer +Animator.animation = AsuraEngine.Type.Animation -function Animator:Ctor(entity, animation) - self.base(entity) - self.mSpriteRenderer = entity:GetSpriteRenderer() - self.mAnimation = animation +function Animator:Ctor(gameobject, animation) + self.base(gameobject) + self.spriteRenderer = gameobject:GetSpriteRenderer() + self.animation = animation end function Animator:SetAnimation(animation) - self.mAnimation = animation + self.animation = animation end function Animator:GetAnimation() - return self.mAnimation + return self.animation end function Animator:OnUpdate(dt) diff --git a/Source/Asura.Framework/graphics/camera.lua b/Source/Asura.Framework/graphics/camera.lua index 039de1a..c8176f8 100644 --- a/Source/Asura.Framework/graphics/camera.lua +++ b/Source/Asura.Framework/graphics/camera.lua @@ -2,12 +2,12 @@ AsuraEngine.Camera = AsuraEngine.Component.Sub("Camera") local Camera = AsuraEngine.Camera -Camera.mIsCulling = AsuraEngine.Type.Bool -Camera.mIsOnScreen = AsuraEngine.Type.Bool +Camera.isCulling = AsuraEngine.Type.Bool +Camera.isOnScreen = AsuraEngine.Type.Bool function Camera.Ctor(self) - self.mIsCulling = false - self.mIsOnScreen = false + self.isCulling = false + self.isOnScreen = false end function Camera.OnUpdate(dt) diff --git a/Source/Asura.Framework/graphics/canvas.lua b/Source/Asura.Framework/graphics/canvas.lua index 2ccb033..248c3ab 100644 --- a/Source/Asura.Framework/graphics/canvas.lua +++ b/Source/Asura.Framework/graphics/canvas.lua @@ -3,32 +3,32 @@ AsuraEngine.Canvas = AsuraEngine.Component.Sub("Canvas") local Canvas = AsuraEngine.Canvas function Canvas.Ctor(self, width, height) - self.mSimCanvas = AsuraEngine.SimCanvas.New(width, height) - self.mWidth = width - self.mHeight = height + self.simCanvas = AsuraEngine.SimCanvas.New(width, height) + self.width = width + self.height = height end function Canvas.GetWidth(self) - return self.mWidth + return self.width end function Canvas.GetHeight(self) - return self.mHeight + return self.height end function Canvas.GetSize(self) - return self.mWidth, self.mHeight + return self.width, self.height end function Canvas.OnEnable(self) - if self.mSimCanvas == nil then + if self.simCanvas == nil then return end - self.mSimCanvas:Begin() + self.simCanvas:Begin() end function Canvas.OnDisable(self) - + end return Canvas \ No newline at end of file diff --git a/Source/Asura.Framework/graphics/particle_system.lua b/Source/Asura.Framework/graphics/particle_system.lua index 17d52e7..055d1b2 100644 --- a/Source/Asura.Framework/graphics/particle_system.lua +++ b/Source/Asura.Framework/graphics/particle_system.lua @@ -4,8 +4,8 @@ AsuraEngine.ParticleSystem = AsuraEngine.Component.Sub("ParticleSystem") local ParticleSystem = AsuraEngine.ParticleSystem -function ParticleSystem.Ctor(self, entity, def) - self.base(entity) +function ParticleSystem.Ctor(self, gameobject, def) + self.base(gameobject) self.spriteRenderer = AsuraEngine.SpriteRenderer.New() end diff --git a/Source/Asura.Framework/managers/scene_manager.lua b/Source/Asura.Framework/managers/scene_manager.lua new file mode 100644 index 0000000..fc5a6ba --- /dev/null +++ b/Source/Asura.Framework/managers/scene_manager.lua @@ -0,0 +1,16 @@ +AsuraEngine.SceneManager = AsuraEngine.Class("SceneManager") + +local SceneManager = AsuraEngine.SceneManager + +--游戏里的所有场景 +SceneManager.scenes = {} + +function SceneManager.Ctor() + +end + +function SceneManager.GetSceneByGUID() + +end + +return SceneManager \ No newline at end of file diff --git a/Source/Asura.Framework/managers/sprite_manager.lua b/Source/Asura.Framework/managers/sprite_manager.lua new file mode 100644 index 0000000..e69de29 diff --git a/Source/Asura.Framework/scene.lua b/Source/Asura.Framework/scene.lua index 48a766c..c0eaaa8 100644 --- a/Source/Asura.Framework/scene.lua +++ b/Source/Asura.Framework/scene.lua @@ -1,12 +1,12 @@ -- --- 原点在左下角 +-- Scene是一系列gameobject的集合。 -- AsuraEngine.Scene = AsuraEngine.Asset.Sub("Scene") local Scene = AsuraEngine.Scene function Scene.Ctor(self) - self.entities = {} --当前场景的所有entity + self.rootGameObjects = {} --当前场景的所有root gameobject end --获取当前的场景 @@ -14,4 +14,8 @@ function Scene.GetCurrent() end +function Scene.ToAsset() + +end + return Scene \ No newline at end of file diff --git a/Source/Asura.Framework/transform.lua b/Source/Asura.Framework/transform.lua index e45a027..a415921 100644 --- a/Source/Asura.Framework/transform.lua +++ b/Source/Asura.Framework/transform.lua @@ -1,8 +1,9 @@ -local Transform = AsuraEngine.Class("Transform") -AsuraEngine.Transform = Transform +-- transform的起点在左下角,逆时针为正向 +AsuraEngine.Transform = AsuraEngine.Class("Transform") +local Transform = AsuraEngine.Transform function Transform.Ctor(self) - self.position = {} - self.rotation = {} - self.size = {} + self.position = {x=0, y=0} + self.rotation = 0 + self.size = {w=0, h=0} end -- cgit v1.1-26-g67d0