viewport scale and audio fix
This commit is contained in:
parent
d0fa6fa9e7
commit
c2fd913ff2
|
|
@ -78,6 +78,9 @@ DEF_PROP_OBJ_VAL(Viewport, Tone, Tone, "tone")
|
||||||
DEF_PROP_I(Viewport, OX)
|
DEF_PROP_I(Viewport, OX)
|
||||||
DEF_PROP_I(Viewport, OY)
|
DEF_PROP_I(Viewport, OY)
|
||||||
|
|
||||||
|
DEF_PROP_F(Viewport, ScaleX)
|
||||||
|
DEF_PROP_F(Viewport, ScaleY)
|
||||||
|
|
||||||
void viewportBindingInit(){
|
void viewportBindingInit(){
|
||||||
VALUE klass = rb_define_class("Viewport", rb_cObject);
|
VALUE klass = rb_define_class("Viewport", rb_cObject);
|
||||||
rb_define_alloc_func(klass, classAllocate<&ViewportType>);
|
rb_define_alloc_func(klass, classAllocate<&ViewportType>);
|
||||||
|
|
@ -91,6 +94,8 @@ void viewportBindingInit(){
|
||||||
INIT_PROP_BIND( Viewport, Rect, "rect" );
|
INIT_PROP_BIND( Viewport, Rect, "rect" );
|
||||||
INIT_PROP_BIND( Viewport, OX, "ox" );
|
INIT_PROP_BIND( Viewport, OX, "ox" );
|
||||||
INIT_PROP_BIND( Viewport, OY, "oy" );
|
INIT_PROP_BIND( Viewport, OY, "oy" );
|
||||||
|
INIT_PROP_BIND( Viewport, ScaleX, "scale_x");
|
||||||
|
INIT_PROP_BIND( Viewport, ScaleY, "scale_y");
|
||||||
INIT_PROP_BIND( Viewport, Color, "color" );
|
INIT_PROP_BIND( Viewport, Color, "color" );
|
||||||
INIT_PROP_BIND( Viewport, Tone, "tone" );
|
INIT_PROP_BIND( Viewport, Tone, "tone" );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,3 +57,4 @@ Added In-Memory Log buffer
|
||||||
Added setting "Use Old Self Contained Universe(Reprise) version"
|
Added setting "Use Old Self Contained Universe(Reprise) version"
|
||||||
Rewrited audio system from SDL3_sound and OpenAL to SDL_mixer
|
Rewrited audio system from SDL3_sound and OpenAL to SDL_mixer
|
||||||
Added Master Volume setting
|
Added Master Volume setting
|
||||||
|
Added viewports scaling
|
||||||
|
|
@ -55,8 +55,10 @@ module Audio
|
||||||
@bgs_playback.play(-1, volume / 100.0, pitch / 100.0)
|
@bgs_playback.play(-1, volume / 100.0, pitch / 100.0)
|
||||||
end
|
end
|
||||||
def bgs_fade(time)
|
def bgs_fade(time)
|
||||||
|
if (@bgs_playback && @bgs_playback.playing)
|
||||||
@bgs_playback.fade_out(time / 60.0)
|
@bgs_playback.fade_out(time / 60.0)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
def bgs_stop
|
def bgs_stop
|
||||||
if @bgs_playback
|
if @bgs_playback
|
||||||
@bgs_playback.stop
|
@bgs_playback.stop
|
||||||
|
|
@ -79,12 +81,14 @@ module Audio
|
||||||
@me_playback.play(0, volume / 100.0, pitch / 100.0)
|
@me_playback.play(0, volume / 100.0, pitch / 100.0)
|
||||||
end
|
end
|
||||||
def me_fade(time)
|
def me_fade(time)
|
||||||
|
if (@me_playback && @me_playback.playing)
|
||||||
@me_playback.fade_out(time / 60.0)
|
@me_playback.fade_out(time / 60.0)
|
||||||
if @bgm_playback
|
if @bgm_playback
|
||||||
@bgm_playback.position = @bgm_pos
|
@bgm_playback.position = @bgm_pos
|
||||||
@bgm_playback.fade_in(time / 60.0)
|
@bgm_playback.fade_in(time / 60.0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
def me_stop
|
def me_stop
|
||||||
if @me_playback
|
if @me_playback
|
||||||
@me_playback.stop
|
@me_playback.stop
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,10 @@
|
||||||
class Scene_OF
|
class Scene_OF
|
||||||
|
BPM = 135
|
||||||
|
WAIT_TIME = 1.0 * (BPM / 60.0) * Graphics.frame_rate
|
||||||
|
|
||||||
|
BUMP_SCALE = 1.2
|
||||||
|
BUMP_RETURN_SPEED = 0.2
|
||||||
|
|
||||||
ARROW_SIZE = 32
|
ARROW_SIZE = 32
|
||||||
ARROW_SCALE = 2
|
ARROW_SCALE = 2
|
||||||
ARROWS_PADDING = 12
|
ARROWS_PADDING = 12
|
||||||
|
|
@ -55,29 +61,33 @@ class Scene_OF
|
||||||
def main
|
def main
|
||||||
Audio.bgm_stop
|
Audio.bgm_stop
|
||||||
|
|
||||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
@viewport_ui = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||||
|
@viewport_ui.ox = -Graphics.width / 2
|
||||||
|
@viewport_ui.oy = -Graphics.height / 2
|
||||||
@spritesheet = RPG::Cache.misc(".cats")
|
@spritesheet = RPG::Cache.misc(".cats")
|
||||||
|
|
||||||
@player_arrows = []
|
@player_arrows = []
|
||||||
@cat_arrows = []
|
@cat_arrows = []
|
||||||
for i in 0..3
|
for i in 0..3
|
||||||
player_arrow = Sprite.new(@viewport)
|
player_arrow = Sprite.new(@viewport_ui)
|
||||||
player_arrow.bitmap = Bitmap.new(ARROW_SIZE, ARROW_SIZE)
|
player_arrow.bitmap = Bitmap.new(ARROW_SIZE, ARROW_SIZE)
|
||||||
player_arrow.bitmap.stretch_blt(Rect.new(0, 0, ARROW_SIZE, ARROW_SIZE), @spritesheet, SPRITES[PLAYER_ARROWS_SPRITES[:base][i]])
|
player_arrow.bitmap.stretch_blt(Rect.new(0, 0, ARROW_SIZE, ARROW_SIZE), @spritesheet, SPRITES[PLAYER_ARROWS_SPRITES[:base][i]])
|
||||||
player_arrow.zoom_x = player_arrow.zoom_y = ARROW_SCALE
|
player_arrow.zoom_x = player_arrow.zoom_y = ARROW_SCALE
|
||||||
player_arrow.x = Graphics.width - ARROWS_SIDES_MARGIN + (ARROW_SIZE * ARROW_SCALE + ARROWS_PADDING) * i - (ARROW_SIZE * ARROW_SCALE * 4 + ARROWS_PADDING * 3)
|
player_arrow.x = Graphics.width / 2 - ARROWS_SIDES_MARGIN + (ARROW_SIZE * ARROW_SCALE + ARROWS_PADDING) * i - (ARROW_SIZE * ARROW_SCALE * 4 + ARROWS_PADDING * 3)
|
||||||
player_arrow.y = ARROWS_TOP_MARGIN
|
player_arrow.y = ARROWS_TOP_MARGIN - Graphics.height / 2
|
||||||
@player_arrows << player_arrow
|
@player_arrows << player_arrow
|
||||||
|
|
||||||
cat_arrow = Sprite.new(@viewport)
|
cat_arrow = Sprite.new(@viewport_ui)
|
||||||
cat_arrow.bitmap = Bitmap.new(ARROW_SIZE, ARROW_SIZE)
|
cat_arrow.bitmap = Bitmap.new(ARROW_SIZE, ARROW_SIZE)
|
||||||
cat_arrow.bitmap.stretch_blt(Rect.new(0, 0, ARROW_SIZE, ARROW_SIZE), @spritesheet, SPRITES[CAT_ARROWS_SPRITES[:base][i]])
|
cat_arrow.bitmap.stretch_blt(Rect.new(0, 0, ARROW_SIZE, ARROW_SIZE), @spritesheet, SPRITES[CAT_ARROWS_SPRITES[:base][i]])
|
||||||
cat_arrow.zoom_x = cat_arrow.zoom_y = ARROW_SCALE
|
cat_arrow.zoom_x = cat_arrow.zoom_y = ARROW_SCALE
|
||||||
cat_arrow.x = ARROWS_SIDES_MARGIN + (ARROW_SIZE * ARROW_SCALE + ARROWS_PADDING) * i
|
cat_arrow.x = ARROWS_SIDES_MARGIN + (ARROW_SIZE * ARROW_SCALE + ARROWS_PADDING) * i - Graphics.width / 2
|
||||||
cat_arrow.y = ARROWS_TOP_MARGIN
|
cat_arrow.y = ARROWS_TOP_MARGIN - Graphics.height / 2
|
||||||
@cat_arrows << cat_arrow
|
@cat_arrows << cat_arrow
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@bump_timeout = WAIT_TIME
|
||||||
|
|
||||||
# Execute transition
|
# Execute transition
|
||||||
Graphics.transition(40)
|
Graphics.transition(40)
|
||||||
# Main loop
|
# Main loop
|
||||||
|
|
@ -99,7 +109,14 @@ class Scene_OF
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@viewport.scale_x -= 0.001
|
@bump_timeout -= 1
|
||||||
|
if @bump_timeout <= 0
|
||||||
|
@bump_timeout += WAIT_TIME
|
||||||
|
@viewport_ui.scale_x = BUMP_SCALE
|
||||||
|
@viewport_ui.scale_y = BUMP_SCALE
|
||||||
|
end
|
||||||
|
@viewport_ui.scale_x = @viewport_ui.scale_x * (1.0 - BUMP_RETURN_SPEED) + BUMP_RETURN_SPEED
|
||||||
|
@viewport_ui.scale_y = @viewport_ui.scale_y * (1.0 - BUMP_RETURN_SPEED) + BUMP_RETURN_SPEED
|
||||||
end
|
end
|
||||||
|
|
||||||
def map_input(input)
|
def map_input(input)
|
||||||
|
|
|
||||||
|
|
@ -622,6 +622,11 @@ void Sprite::onGeometryChange(const Scene::Geometry &geo){
|
||||||
/* Offset at which the sprite will be drawn
|
/* Offset at which the sprite will be drawn
|
||||||
* relative to screen origin */
|
* relative to screen origin */
|
||||||
p->trans.setGlobalOffset(geo.offset());
|
p->trans.setGlobalOffset(geo.offset());
|
||||||
|
Viewport* viewport = ViewportElement::getViewport();
|
||||||
|
if (viewport)
|
||||||
|
p->trans.setGlobalScale(Vec2(viewport->getScaleX(), viewport->getScaleY()));
|
||||||
|
else
|
||||||
|
p->trans.setGlobalScale(Vec2(1.0, 1.0));
|
||||||
|
|
||||||
p->sceneRect.setSize(geo.rect.size());
|
p->sceneRect.setSize(geo.rect.size());
|
||||||
p->sceneOrig = geo.orig;
|
p->sceneOrig = geo.orig;
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,11 @@ public:
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setGlobalScale(const Vec2 &value){
|
||||||
|
globalScale = value;
|
||||||
|
dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
const float *getMatrix(){
|
const float *getMatrix(){
|
||||||
if (dirty){
|
if (dirty){
|
||||||
updateMatrix();
|
updateMatrix();
|
||||||
|
|
@ -121,18 +126,18 @@ private:
|
||||||
|
|
||||||
float angle = rotation * 3.141592654f / 180.0f;
|
float angle = rotation * 3.141592654f / 180.0f;
|
||||||
float cosine = (float) SDL_cos(angle);
|
float cosine = (float) SDL_cos(angle);
|
||||||
float sine = (float) sin(angle);
|
float sine = (float) SDL_sin(angle);
|
||||||
float sxc = scale.x * cosine;
|
float sxc = scale.x * cosine;
|
||||||
float syc = scale.y * cosine;
|
float syc = scale.y * cosine;
|
||||||
float sxs = scale.x * sine;
|
float sxs = scale.x * sine;
|
||||||
float sys = scale.y * sine;
|
float sys = scale.y * sine;
|
||||||
float tx = -origin.x * sxc - origin.y * sys + position.x + offset.x;
|
float tx = (-origin.x * sxc - origin.y * sys + position.x) * globalScale.x + offset.x;
|
||||||
float ty = origin.x * sxs - origin.y * syc + position.y + offset.y;
|
float ty = ( origin.x * sxs - origin.y * syc + position.y) * globalScale.y + offset.y;
|
||||||
|
|
||||||
matrix[0] = sxc;
|
matrix[0] = sxc * globalScale.x;
|
||||||
matrix[1] = -sxs;
|
matrix[1] = -sxs * globalScale.y;
|
||||||
matrix[4] = sys;
|
matrix[4] = sys * globalScale.x;
|
||||||
matrix[5] = syc;
|
matrix[5] = syc * globalScale.y;
|
||||||
matrix[12] = tx;
|
matrix[12] = tx;
|
||||||
matrix[13] = ty;
|
matrix[13] = ty;
|
||||||
}
|
}
|
||||||
|
|
@ -144,6 +149,8 @@ private:
|
||||||
|
|
||||||
/* Silently added to position */
|
/* Silently added to position */
|
||||||
Vec2i offset;
|
Vec2i offset;
|
||||||
|
/* Silently added to scale */
|
||||||
|
Vec2 globalScale;
|
||||||
|
|
||||||
float matrix[16];
|
float matrix[16];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ struct ViewportPrivate{
|
||||||
IntRect screenRect;
|
IntRect screenRect;
|
||||||
int isOnScreen;
|
int isOnScreen;
|
||||||
|
|
||||||
|
double scaleX;
|
||||||
|
double scaleY;
|
||||||
|
|
||||||
EtcTemps tmp;
|
EtcTemps tmp;
|
||||||
|
|
||||||
ViewportPrivate(int x, int y, unsigned int width, unsigned int height, Viewport *self)
|
ViewportPrivate(int x, int y, unsigned int width, unsigned int height, Viewport *self)
|
||||||
|
|
@ -51,6 +54,8 @@ struct ViewportPrivate{
|
||||||
rect(&tmp.rect),
|
rect(&tmp.rect),
|
||||||
color(&tmp.color),
|
color(&tmp.color),
|
||||||
tone(&tmp.tone),
|
tone(&tmp.tone),
|
||||||
|
scaleX(1.0),
|
||||||
|
scaleY(1.0),
|
||||||
isOnScreen(false)
|
isOnScreen(false)
|
||||||
{
|
{
|
||||||
rect->set(x, y, width, height);
|
rect->set(x, y, width, height);
|
||||||
|
|
@ -61,7 +66,7 @@ struct ViewportPrivate{
|
||||||
rectCon.Disconnect();
|
rectCon.Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onRectChange(){
|
void onRectChange() {
|
||||||
self->geometry.rect = rect->toIntRect();
|
self->geometry.rect = rect->toIntRect();
|
||||||
self->notifyGeometryChange();
|
self->notifyGeometryChange();
|
||||||
recomputeOnScreen();
|
recomputeOnScreen();
|
||||||
|
|
@ -134,6 +139,9 @@ void Viewport::update(){
|
||||||
DEF_ATTR_RD_SIMPLE(Viewport, OX, int, geometry.orig.x)
|
DEF_ATTR_RD_SIMPLE(Viewport, OX, int, geometry.orig.x)
|
||||||
DEF_ATTR_RD_SIMPLE(Viewport, OY, int, geometry.orig.y)
|
DEF_ATTR_RD_SIMPLE(Viewport, OY, int, geometry.orig.y)
|
||||||
|
|
||||||
|
DEF_ATTR_RD_SIMPLE(Viewport, ScaleX, double, p->scaleX)
|
||||||
|
DEF_ATTR_RD_SIMPLE(Viewport, ScaleY, double, p->scaleY)
|
||||||
|
|
||||||
DEF_ATTR_SIMPLE(Viewport, Rect, Rect&, *p->rect)
|
DEF_ATTR_SIMPLE(Viewport, Rect, Rect&, *p->rect)
|
||||||
DEF_ATTR_SIMPLE(Viewport, Color, Color&, *p->color)
|
DEF_ATTR_SIMPLE(Viewport, Color, Color&, *p->color)
|
||||||
DEF_ATTR_SIMPLE(Viewport, Tone, Tone&, *p->tone)
|
DEF_ATTR_SIMPLE(Viewport, Tone, Tone&, *p->tone)
|
||||||
|
|
@ -158,6 +166,26 @@ void Viewport::setOY(int value){
|
||||||
notifyGeometryChange();
|
notifyGeometryChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Viewport::setScaleX(double value){
|
||||||
|
guardDisposed();
|
||||||
|
|
||||||
|
if (p->scaleX == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
p->scaleX = value;
|
||||||
|
notifyGeometryChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Viewport::setScaleY(double value){
|
||||||
|
guardDisposed();
|
||||||
|
|
||||||
|
if (p->scaleY == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
p->scaleY = value;
|
||||||
|
notifyGeometryChange();
|
||||||
|
}
|
||||||
|
|
||||||
void Viewport::initDynAttribs(){
|
void Viewport::initDynAttribs(){
|
||||||
p->rect = new Rect(*p->rect);
|
p->rect = new Rect(*p->rect);
|
||||||
p->color = new Color;
|
p->color = new Color;
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ public:
|
||||||
DECL_ATTR( Rect, Rect& )
|
DECL_ATTR( Rect, Rect& )
|
||||||
DECL_ATTR( OX, int )
|
DECL_ATTR( OX, int )
|
||||||
DECL_ATTR( OY, int )
|
DECL_ATTR( OY, int )
|
||||||
|
DECL_ATTR( ScaleX, double )
|
||||||
|
DECL_ATTR( ScaleY, double )
|
||||||
DECL_ATTR( Color, Color& )
|
DECL_ATTR( Color, Color& )
|
||||||
DECL_ATTR( Tone, Tone& )
|
DECL_ATTR( Tone, Tone& )
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue