From 75374b0c97b76dc77c84344fb656fb8d5a4b0eeb Mon Sep 17 00:00:00 2001 From: Marek Moeckel Date: Fri, 15 Jul 2005 23:56:44 +0000 Subject: [PATCH] -modified moving platform class to make use of the new path class. -added some tiles to sprites.strf so they can be used as platforms. -included a test level to demonstrate the use of the platforms. SVN-Revision: 2721 --- data/images/sprites.strf | 31 ++++++++- data/levels/test/platform.stl | 149 ++++++++++++++++++++++++++++++++++++++++++ src/moving_object.hpp | 1 + src/object/platform.cpp | 66 ++++++++----------- src/object/platform.hpp | 8 ++- 5 files changed, 210 insertions(+), 45 deletions(-) create mode 100644 data/levels/test/platform.stl diff --git a/data/images/sprites.strf b/data/images/sprites.strf index d3549cf2a..4321e121a 100644 --- a/data/images/sprites.strf +++ b/data/images/sprites.strf @@ -1377,14 +1377,41 @@ "objects/trampoline/trampoline1-3.png"))) ; Flying platform - (sprite (name "flying_platform") + (sprite (name "platform") (action + (name "flying") (x-offset 0) (y-offset 0) (images "objects/flying_platform/flying_platform-0.png" "objects/flying_platform/flying_platform-1.png" "objects/flying_platform/flying_platform-2.png" - "objects/flying_platform/flying_platform-3.png"))) + "objects/flying_platform/flying_platform-3.png") + ) + (action + (name "block1") + (x-offset 0) + (y-offset 0) + (images "tiles/blocks/block1.png") + ) + (action + (name "block2") + (x-offset 0) + (y-offset 0) + (images "tiles/blocks/block2.png") + ) + (action + (name "block3") + (x-offset 0) + (y-offset 0) + (images "tiles/blocks/block3.png") + ) + (action + (name "block4") + (x-offset 0) + (y-offset 0) + (images "tiles/blocks/block4.png") + ) + ) ; Door (sprite (name "door") (action diff --git a/data/levels/test/platform.stl b/data/levels/test/platform.stl new file mode 100644 index 000000000..8e33a772f --- /dev/null +++ b/data/levels/test/platform.stl @@ -0,0 +1,149 @@ +;; Generated by Flexlay Editor +(supertux-level + (version 2) + (name (_ "Flying Platform Test")) + (author "Marek") + (sector + (name "main") + (gravity 10.000000) + (tilemap + (layer "background") + (solid #f) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + )) + (tilemap + (layer "interactive") + (solid #t) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + )) + (tilemap + (layer "foreground") + (solid #f) + (speed 1.000000) + (width 30) + (height 30) + (tiles + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + )) + (camera + (mode "normal") + ) + + (background + (image "arctis.jpg") + (speed 0.500000) + ) + (path (name "path1") (speed 100) (x 0) (y 0) (x 0) (y -100) (x 100) (y -100) (x 100) (y 0)) + (path (name "path2") (speed 100) (x 0) (y 0) (x 0) (y 100) (x 100) (y 100) (x 100) (y 0)) + (platform (use_path "path1") (x 200) (y 850) (type "block1")) + (platform (use_path "path1") (x 232) (y 850) (type "block2")) + (platform (use_path "path2") (x 264) (y 650) (type "block2")) + (platform (use_path "path2") (x 296) (y 650) (type "block2")) + (platform (use_path "path1") (x 328) (y 850) (type "block2")) + (platform (use_path "path1") (x 360) (y 850) (type "block2")) + (platform (use_path "path2") (x 392) (y 650) (type "block2")) + (platform (use_path "path2") (x 424) (y 650) (type "block2")) + (platform (use_path "path1") (x 456) (y 850) (type "block2")) + (platform (use_path "path1") (x 488) (y 850) (type "block3")) + (powerup (x 100) (y 700) (sprite "egg")) + (jumpy (x 140) (y 750)) + (spawnpoint (name "main") (x 340) (y 800)) + ) + ) + +;; EOF ;; diff --git a/src/moving_object.hpp b/src/moving_object.hpp index ddc98d413..753914be0 100644 --- a/src/moving_object.hpp +++ b/src/moving_object.hpp @@ -70,6 +70,7 @@ public: protected: friend class Sector; friend class CollisionGrid; + friend class Platform; /** The bounding box of the object (as used for collision detection, this * isn't necessarily the bounding box for graphics) diff --git a/src/object/platform.cpp b/src/object/platform.cpp index 8197f6ecf..6bc64f4ba 100644 --- a/src/object/platform.cpp +++ b/src/object/platform.cpp @@ -1,7 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2005 Matthias Braun +// Copyright (C) 2005 Marek Moeckel // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -26,20 +26,26 @@ #include "player.hpp" #include "sprite/sprite_manager.hpp" #include "lisp/lisp.hpp" -#include "lisp/writer.hpp" #include "object_factory.hpp" Platform::Platform(const lisp::Lisp& reader) { - sprite = sprite_manager->create("flying_platform"); - movement = Vector(0, 1); + std::string use_path; + std::string type; + reader.get("x", bbox.p1.x); reader.get("y", bbox.p1.y); + reader.get("type", type); + reader.get("use_path", use_path); + sprite = sprite_manager->create("platform"); + sprite->set_action(type); bbox.set_size(sprite->get_width(), sprite->get_height()); flags |= FLAG_SOLID; - state = 0; + path = Path::GetByName(use_path); + + path_offset = bbox.p1 - path->GetStart(); } Platform::~Platform() @@ -48,46 +54,26 @@ Platform::~Platform() } HitResponse -Platform::collision(GameObject& , const CollisionHit& ) +Platform::collision(GameObject& other, const CollisionHit& hit) { -#if 0 - if(typeid(object) == typeid(Player)) { - Player* player = (Player*) &object; - //player->movement += movement; + if (typeid(other) == typeid(Player)) { + Player* player = (Player*) &other; + if ((hit.normal.x == 0) && (hit.normal.y == 1)) { + //Tux is standing on the platform + player->movement += path->GetLastMovement(); + } + } + if(other.get_flags() & FLAG_SOLID) { + //Collision with a solid tile + //does nothing, because the movement vector isn't used at the moment } -#endif return FORCE_MOVE; } void -Platform::update(float ) +Platform::update(float elapsed_time) { - // just some test code... - if(state == 0) { - movement = Vector(0, 1); - if(bbox.p1.y > 250) - state = 1; - } - if(state == 1) { - movement = Vector(0, -1); - if(bbox.p1.y < 50) - state = 2; - } - if(state == 2) { - movement = Vector(1, 0); - if(bbox.p1.x > 800) - state = 3; - } - if(state == 3) { - movement = Vector(-1, 0); - if(bbox.p1.x < 400) - state = 4; - } - if(state == 4) { - movement = Vector(-1, 1); - if(bbox.p1.x < 0) - state = 0; - } + set_pos(path->GetPosition() + path_offset); } void @@ -96,4 +82,4 @@ Platform::draw(DrawingContext& context) sprite->draw(context, get_pos(), LAYER_OBJECTS); } -IMPLEMENT_FACTORY(Platform, "flying_platform"); +IMPLEMENT_FACTORY(Platform, "platform"); diff --git a/src/object/platform.hpp b/src/object/platform.hpp index 4a88dbb62..c6286c1c0 100644 --- a/src/object/platform.hpp +++ b/src/object/platform.hpp @@ -1,7 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2005 Matthias Braun +// Copyright (C) 2005 Marek Moeckel // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,6 +22,7 @@ #include "moving_object.hpp" #include "sprite/sprite.hpp" +#include "object/path.hpp" /** * This class is the base class for platforms that tux can stand on @@ -37,8 +38,9 @@ public: virtual void draw(DrawingContext& context); private: - int state; Sprite* sprite; + Path* path; + Vector path_offset; }; #endif -- 2.11.0