/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Sample.h" #include "Resources.h" #include "SkAnimTimer.h" #include "nima/NimaActor.h" #include <nima/Animation/ActorAnimationInstance.hpp> #include <cmath> using namespace nima; class NimaView : public Sample { public: NimaView() : fActor(nullptr) { } protected: virtual bool onQuery(Sample::Event* evt) override { if (Sample::TitleQ(*evt)) { Sample::TitleR(evt, "Nima"); return true; } return this->INHERITED::onQuery(evt); } void onOnceBeforeDraw() override { // Create the actor. std::string nimaPath(GetResourcePath("nima/Robot.nima").c_str()); std::string texturePath(GetResourcePath("nima/Robot.png").c_str()); fActor = std::make_unique<NimaActor>(nimaPath, texturePath); // Also available: dance, jump, idle fActor->setAnimation("attack"); } void onDrawContent(SkCanvas* canvas) override { canvas->save(); canvas->translate(500, 700); canvas->scale(1, -1); // Render the actor. fActor->render(canvas); canvas->restore(); } bool onAnimate(const SkAnimTimer& timer) override { if (fActor) { float time = std::fmod(timer.secs(), fActor->duration()); fActor->seek(time); } return true; } private: std::unique_ptr<NimaActor> fActor; typedef Sample INHERITED; }; ////////////////////////////////////////////////////////////////////////////// DEF_SAMPLE( return new NimaView(); )